mirror of
https://github.com/home-assistant/frontend.git
synced 2025-10-03 08:49:40 +00:00
Compare commits
1 Commits
combine-ap
...
remove-dup
Author | SHA1 | Date | |
---|---|---|---|
![]() |
255740da83 |
@@ -1,13 +0,0 @@
|
||||
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.148.1/containers/python-3/.devcontainer/base.Dockerfile
|
||||
FROM mcr.microsoft.com/vscode/devcontainers/python:0-3.9
|
||||
|
||||
ENV \
|
||||
DEBIAN_FRONTEND=noninteractive \
|
||||
DEVCONTAINER=true \
|
||||
PATH=$PATH:./node_modules/.bin
|
||||
|
||||
# Install nvm
|
||||
COPY .nvmrc /tmp/.nvmrc
|
||||
RUN \
|
||||
su vscode -c \
|
||||
"source /usr/local/share/nvm/nvm.sh && nvm install $(cat /tmp/.nvmrc) 2>&1"
|
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"name": "Home Assistant Frontend",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"context": ".."
|
||||
},
|
||||
"appPort": "8124:8123",
|
||||
"context": "..",
|
||||
"postCreateCommand": "script/bootstrap",
|
||||
"extensions": [
|
||||
"github.vscode-pull-request-github",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"ms-vscode.vscode-typescript-tslint-plugin",
|
||||
"esbenp.prettier-vscode",
|
||||
"bierner.lit-html",
|
||||
"runem.lit-plugin",
|
||||
"ms-python.vscode-pylance"
|
||||
],
|
||||
"settings": {
|
||||
"terminal.integrated.shell.linux": "/bin/bash",
|
||||
"files.eol": "\n",
|
||||
"editor.tabSize": 2,
|
||||
"editor.formatOnPaste": false,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.formatOnType": true,
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"files.trimTrailingWhitespace": true
|
||||
}
|
||||
}
|
4
.dockerignore
Normal file
4
.dockerignore
Normal file
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
hass_frontend
|
||||
hass_frontend_es5
|
||||
.git
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"extends": [
|
||||
"airbnb-typescript/base",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"airbnb-typescript/base",
|
||||
"plugin:wc/recommended",
|
||||
"plugin:lit/recommended",
|
||||
"prettier",
|
||||
@@ -11,12 +11,17 @@
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2020,
|
||||
"ecmaFeatures": {
|
||||
"jsx": true,
|
||||
"modules": true
|
||||
},
|
||||
"sourceType": "module",
|
||||
"project": "./tsconfig.json"
|
||||
},
|
||||
"settings": {
|
||||
"react": {
|
||||
"pragma": "h",
|
||||
"version": "15.0"
|
||||
},
|
||||
"import/resolver": {
|
||||
"webpack": {
|
||||
"config": "./webpack.config.js"
|
||||
@@ -45,16 +50,16 @@
|
||||
"func-names": 0,
|
||||
"prefer-arrow-callback": 0,
|
||||
"no-underscore-dangle": 0,
|
||||
"no-var": 0,
|
||||
"strict": 0,
|
||||
"prefer-spread": 0,
|
||||
"no-plusplus": 0,
|
||||
"no-bitwise": 2,
|
||||
"no-bitwise": 0,
|
||||
"comma-dangle": 0,
|
||||
"vars-on-top": 0,
|
||||
"no-continue": 0,
|
||||
"no-param-reassign": 0,
|
||||
"no-multi-assign": 0,
|
||||
"no-console": 2,
|
||||
"radix": 0,
|
||||
"no-alert": 0,
|
||||
"no-return-await": 0,
|
||||
@@ -75,17 +80,21 @@
|
||||
"object-curly-newline": 0,
|
||||
"default-case": 0,
|
||||
"wc/no-self-class": 0,
|
||||
"no-shadow": 0,
|
||||
"@typescript-eslint/camelcase": 0,
|
||||
"@typescript-eslint/ban-ts-comment": 0,
|
||||
"@typescript-eslint/ban-ts-ignore": 0,
|
||||
"@typescript-eslint/no-use-before-define": 0,
|
||||
"@typescript-eslint/no-non-null-assertion": 0,
|
||||
"@typescript-eslint/no-explicit-any": 0,
|
||||
"@typescript-eslint/no-unused-vars": 0,
|
||||
"@typescript-eslint/explicit-function-return-type": 0,
|
||||
"@typescript-eslint/explicit-module-boundary-types": 0,
|
||||
"@typescript-eslint/no-shadow": ["error"]
|
||||
"@typescript-eslint/explicit-function-return-type": 0
|
||||
},
|
||||
"plugins": ["disable", "import", "lit", "prettier", "@typescript-eslint"],
|
||||
"plugins": [
|
||||
"disable",
|
||||
"import",
|
||||
"react",
|
||||
"lit",
|
||||
"prettier",
|
||||
"@typescript-eslint"
|
||||
],
|
||||
"processor": "disable/disable"
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@ DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed w
|
||||
<!--
|
||||
Provide details about the versions you are using, which helps us reproducing
|
||||
and finding the issue quicker. Version information is found in the
|
||||
Home Assistant frontend: Configuration -> Info.
|
||||
Home Assistant frontend: Developer tools -> Info.
|
||||
|
||||
Browser version and operating system is important! Please try to replicate
|
||||
your issue in a different browser and be sure to include your findings.
|
||||
@@ -74,12 +74,12 @@ DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed w
|
||||
|
||||
```
|
||||
|
||||
## Problem-relevant frontend configuration
|
||||
## Problem-relevant configuration
|
||||
|
||||
<!--
|
||||
An example configuration that caused the problem for you, e.g. the YAML configuration
|
||||
of the used cards. Fill this out even if it seems unimportant to you. Please be sure
|
||||
to remove personal information like passwords, private URLs and other credentials.
|
||||
An example configuration that caused the problem for you. Fill this out even
|
||||
if it seems unimportant to you. Please be sure to remove personal information
|
||||
like passwords, private URLs and other credentials.
|
||||
-->
|
||||
|
||||
```yaml
|
||||
@@ -89,7 +89,7 @@ DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed w
|
||||
## Javascript errors shown in your browser console/inspector
|
||||
|
||||
<!--
|
||||
If you come across any Javascript or other error logs, e.g. in your browser
|
||||
If you come across any javascript or other error logs, e.g., in your browser
|
||||
console/inspector please provide them.
|
||||
-->
|
||||
|
26
.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
vendored
Normal file
26
.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
name: Request a feature for the UI, Frontend or Lovelace
|
||||
about: Request an new feature for the Home Assistant frontend.
|
||||
labels: feature request
|
||||
---
|
||||
|
||||
<!--
|
||||
DO NOT DELETE ANY TEXT from this template!
|
||||
Otherwise, your request may be closed without comment.
|
||||
-->
|
||||
|
||||
## The request
|
||||
|
||||
<!--
|
||||
Describe to our maintainers, the feature you would like to be added.
|
||||
Please be clear and concise and, if possible, provide a screenshot or mockup.
|
||||
-->
|
||||
|
||||
## The alternatives
|
||||
|
||||
<!--
|
||||
Are you currently using, or have you considered alternatives?
|
||||
If so, could you please describe those?
|
||||
-->
|
||||
|
||||
## Additional information
|
138
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
138
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,138 +0,0 @@
|
||||
name: Report a bug with the UI, Frontend or Lovelace
|
||||
about: Report an issue related to the Home Assistant frontend.
|
||||
labels: bug
|
||||
title: ""
|
||||
issue_body: true
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Make sure you are running the [latest version of Home Assistant][releases] before reporting an issue.
|
||||
|
||||
If you have a feature or enhancement request for the frontend, please [start an discussion][fr] instead of creating an issue.
|
||||
|
||||
**Please not not report issues for custom Lovelace cards.**
|
||||
|
||||
[fr]: https://github.com/home-assistant/frontend/discussions
|
||||
[releases]: https://github.com/home-assistant/home-assistant/releases
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: Please verify that you've followed these steps
|
||||
options:
|
||||
- label: I have updated to the latest available Home Assistant version.
|
||||
required: true
|
||||
- label: I have cleared the cache of my browser.
|
||||
required: true
|
||||
- label: I have tried a different browser to see if it is related to my browser.
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## The problem
|
||||
- type: textarea
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Describe the issue you are experiencing
|
||||
description: Provide a clear and concise description of what the bug is.
|
||||
- type: textarea
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Describe the behavior you expected
|
||||
description: Describe what you expected to happen or it should look/behave.
|
||||
- type: textarea
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: Steps to reproduce the issue
|
||||
description: |
|
||||
Please tell us exactly how to reproduce your issue.
|
||||
Provide clear and concise step by step instructions and add code snippets if needed.
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
...
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## Environment
|
||||
- type: input
|
||||
validations:
|
||||
required: true
|
||||
attributes:
|
||||
label: What version of Home Assistant Core has the issue?
|
||||
placeholder: core-
|
||||
description: >
|
||||
Can be found in the Configuration panel -> Info.
|
||||
- type: input
|
||||
attributes:
|
||||
label: What was the last working version of Home Assistant Core?
|
||||
placeholder: core-
|
||||
description: >
|
||||
If known, otherwise leave blank.
|
||||
- type: input
|
||||
attributes:
|
||||
label: In which browser are you experiencing the issue with?
|
||||
placeholder: Google Chrome 88.0.4324.150
|
||||
description: >
|
||||
Provide the full name and don't forget to add the version!
|
||||
- type: input
|
||||
attributes:
|
||||
label: Which operating system are you using to run this browser?
|
||||
placeholder: macOS Big Sur (1.11)
|
||||
description: >
|
||||
Don't forget to add the version!
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# Details
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: State of relevant entities
|
||||
description: >
|
||||
If your issue is about how an entity is shown in the UI, please add the
|
||||
state and attributes for all situations. You can find this information
|
||||
at Developer Tools -> States.
|
||||
value: |
|
||||
```yaml
|
||||
# Paste your state here.
|
||||
|
||||
```
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Problem-relevant frontend configuration
|
||||
description: >
|
||||
An example configuration that caused the problem for you, e.g., the YAML
|
||||
configuration of the used cards. Fill this out even if it seems
|
||||
unimportant to you. Please be sure to remove personal information like
|
||||
passwords, private URLs and other credentials.
|
||||
value: |
|
||||
```yaml
|
||||
# Paste your YAML here.
|
||||
|
||||
```
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Javascript errors shown in your browser console/inspector
|
||||
description: >
|
||||
If you come across any Javascript or other error logs, e.g., in your
|
||||
browser console/inspector please provide them.
|
||||
value: |
|
||||
```txt
|
||||
# Paste your logs here.
|
||||
|
||||
```
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## Additional information
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
If you have any additional information for us, use the field below.
|
||||
Please note, you can attach screenshots or screen recordings here,
|
||||
by dragging and dropping files in the field below.
|
3
.github/ISSUE_TEMPLATE/config.yml
vendored
3
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,8 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Request a feature for the UI, Frontend or Lovelace
|
||||
url: https://github.com/home-assistant/frontend/discussions/category_choices
|
||||
about: Request an new feature for the Home Assistant frontend.
|
||||
- name: Report a bug that is NOT related to the UI, Frontend or Lovelace
|
||||
url: https://github.com/home-assistant/core/issues
|
||||
about: This is the issue tracker for our frontend. Please report other issues with the backend repository.
|
||||
|
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -18,8 +18,8 @@
|
||||
<!--
|
||||
Describe the big picture of your changes here to communicate to the
|
||||
maintainers why we should accept this pull request. If it fixes a bug
|
||||
or resolves a feature request, be sure to link to that issue or discussion
|
||||
in the additional information section.
|
||||
or resolves a feature request, be sure to link to that issue in the
|
||||
additional information section.
|
||||
-->
|
||||
|
||||
## Type of change
|
||||
@@ -56,7 +56,7 @@
|
||||
-->
|
||||
|
||||
- This PR fixes or closes issue: fixes #
|
||||
- This PR is related to issue or discussion:
|
||||
- This PR is related to issue:
|
||||
- Link to documentation pull request:
|
||||
|
||||
## Checklist
|
||||
|
27
.github/lock.yml
vendored
Normal file
27
.github/lock.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
|
||||
|
||||
# Number of days of inactivity before a closed issue or pull request is locked
|
||||
daysUntilLock: 1
|
||||
|
||||
# Skip issues and pull requests created before a given timestamp. Timestamp must
|
||||
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
|
||||
skipCreatedBefore: 2020-01-01
|
||||
|
||||
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
|
||||
exemptLabels: []
|
||||
|
||||
# Label to add before locking, such as `outdated`. Set to `false` to disable
|
||||
lockLabel: false
|
||||
|
||||
# Comment to post before locking. Set to `false` to disable
|
||||
lockComment: false
|
||||
|
||||
# Assign `resolved` as the reason for locking. Set to `false` to disable
|
||||
setLockReason: false
|
||||
|
||||
# Limit to only `issues` or `pulls`
|
||||
only: pulls
|
||||
|
||||
# Optionally, specify configuration settings just for `issues` or `pulls`
|
||||
issues:
|
||||
daysUntilLock: 30
|
56
.github/stale.yml
vendored
Normal file
56
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
# Configuration for probot-stale - https://github.com/probot/stale
|
||||
|
||||
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
||||
daysUntilStale: 90
|
||||
|
||||
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
|
||||
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
||||
daysUntilClose: 7
|
||||
|
||||
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
|
||||
onlyLabels: []
|
||||
|
||||
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
||||
exemptLabels:
|
||||
- feature request
|
||||
- Help wanted
|
||||
- to do
|
||||
|
||||
# Set to true to ignore issues in a project (defaults to false)
|
||||
exemptProjects: true
|
||||
|
||||
# Set to true to ignore issues in a milestone (defaults to false)
|
||||
exemptMilestones: true
|
||||
|
||||
# Set to true to ignore issues with an assignee (defaults to false)
|
||||
exemptAssignees: false
|
||||
|
||||
# Label to use when marking as stale
|
||||
staleLabel: stale
|
||||
|
||||
# Comment to post when marking as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
There hasn't been any activity on this issue recently. Due to the high number
|
||||
of incoming GitHub notifications, we have to clean some of the old issues,
|
||||
as many of them have already been resolved with the latest updates.
|
||||
|
||||
Please make sure to update to the latest Home Assistant version and check
|
||||
if that solves the issue. Let us know if that works for you by adding a
|
||||
comment 👍
|
||||
|
||||
This issue now has been marked as stale and will be closed if no further
|
||||
activity occurs. Thank you for your contributions.
|
||||
|
||||
# Comment to post when removing the stale label.
|
||||
# unmarkComment: >
|
||||
# Your comment here.
|
||||
|
||||
# Comment to post when closing a stale Issue or Pull Request.
|
||||
# closeComment: >
|
||||
# Your comment here.
|
||||
|
||||
# Limit the number of actions per hour, from 1-30. Default is 30
|
||||
limitPerRun: 30
|
||||
|
||||
# Limit to only `issues` or `pulls`
|
||||
only: issues
|
10
.github/workflows/ci.yaml
vendored
10
.github/workflows/ci.yaml
vendored
@@ -34,8 +34,10 @@ jobs:
|
||||
run: yarn install
|
||||
env:
|
||||
CI: true
|
||||
- name: Build resources
|
||||
run: ./node_modules/.bin/gulp gen-icons-json build-translations gather-gallery-demos
|
||||
- name: Build icons
|
||||
run: ./node_modules/.bin/gulp gen-icons-hassio gen-icons-mdi gen-icons-app
|
||||
- name: Build translations
|
||||
run: ./node_modules/.bin/gulp build-translations
|
||||
- name: Run eslint
|
||||
run: ./node_modules/.bin/eslint '{**/src,src}/**/*.{js,ts,html}' --ignore-path .gitignore
|
||||
- name: Run tsc
|
||||
@@ -92,7 +94,7 @@ jobs:
|
||||
- name: Build Application
|
||||
run: ./node_modules/.bin/gulp build-app
|
||||
env:
|
||||
IS_TEST: "true"
|
||||
TRAVIS: "true"
|
||||
supervisor:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint, test]
|
||||
@@ -120,4 +122,4 @@ jobs:
|
||||
- name: Build Application
|
||||
run: ./node_modules/.bin/gulp build-hassio
|
||||
env:
|
||||
IS_TEST: "true"
|
||||
TRAVIS: "true"
|
||||
|
60
.github/workflows/codeql-analysis.yml
vendored
60
.github/workflows/codeql-analysis.yml
vendored
@@ -1,60 +0,0 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [dev, master]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [dev]
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# Override automatic language detection by changing the below list
|
||||
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
|
||||
language: ['javascript']
|
||||
# Learn more...
|
||||
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
# We must fetch at least the immediate parents so that if this is
|
||||
# a pull request then we can checkout the head.
|
||||
fetch-depth: 2
|
||||
|
||||
# If this run was triggered by a pull request event, then checkout
|
||||
# the head of the pull request instead of the merge commit.
|
||||
- run: git checkout HEAD^2
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
20
.github/workflows/lock.yml
vendored
20
.github/workflows/lock.yml
vendored
@@ -1,20 +0,0 @@
|
||||
name: Lock
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 * * * *"
|
||||
|
||||
jobs:
|
||||
lock:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v2.0.1
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
issue-lock-inactive-days: "30"
|
||||
issue-exclude-created-before: "2020-10-01T00:00:00Z"
|
||||
issue-lock-reason: ""
|
||||
pr-lock-inactive-days: "1"
|
||||
pr-exclude-created-before: "2020-11-01T00:00:00Z"
|
||||
pr-lock-reason: ""
|
19
.github/workflows/netflify.yml
vendored
19
.github/workflows/netflify.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Netlify
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
|
||||
jobs:
|
||||
trigger_builds:
|
||||
name: Trigger netlify build preview
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- name: Trigger Cast build
|
||||
run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_CAST_DEV_BUILD_HOOK }}
|
||||
|
||||
- name: Trigger Demo build
|
||||
run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_DEMO_DEV_BUILD_HOOK }}
|
||||
|
||||
- name: Trigger Gallery build
|
||||
run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_GALLERY_DEV_BUILD_HOOK }}
|
14
.github/workflows/release-drafter.yaml
vendored
14
.github/workflows/release-drafter.yaml
vendored
@@ -1,14 +0,0 @@
|
||||
name: Release Drafter
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
update_release_draft:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
81
.github/workflows/release.yaml
vendored
81
.github/workflows/release.yaml
vendored
@@ -1,81 +0,0 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- published
|
||||
|
||||
env:
|
||||
WHEELS_TAG: 3.7-alpine3.11
|
||||
PYTHON_VERSION: 3.7
|
||||
NODE_VERSION: 12.1
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Verify version
|
||||
uses: home-assistant/actions/helpers/verify-version@master
|
||||
|
||||
- name: Set up Python ${{ env.PYTHON_VERSION }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
- name: Set up Node ${{ env.NODE_VERSION }}
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
- name: Build and release package
|
||||
run: |
|
||||
python3 -m pip install twine
|
||||
export TWINE_USERNAME="__token__"
|
||||
export TWINE_PASSWORD="${{ secrets.TWINE_TOKEN }}"
|
||||
|
||||
script/release
|
||||
|
||||
wheels-init:
|
||||
name: Init wheels build
|
||||
needs: release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Generate requirements.txt
|
||||
run: |
|
||||
# Sleep to give pypi time to populate the new version across mirrors
|
||||
sleep 240
|
||||
version=$(echo "${{ github.ref }}" | awk -F"/" '{print $NF}' )
|
||||
echo "home-assistant-frontend==$version" > ./requirements.txt
|
||||
|
||||
- name: Upload requirements.txt
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: requirements
|
||||
path: ./requirements.txt
|
||||
|
||||
build-wheels:
|
||||
name: Build wheels for ${{ matrix.arch }}
|
||||
needs: wheels-init
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
arch: ["aarch64", "armhf", "armv7", "amd64", "i386"]
|
||||
steps:
|
||||
- name: Download requirements.txt
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
name: requirements
|
||||
|
||||
- name: Build wheels
|
||||
uses: home-assistant/wheels@master
|
||||
with:
|
||||
tag: ${{ env.WHEELS_TAG }}
|
||||
arch: ${{ matrix.arch }}
|
||||
wheels-host: ${{ secrets.WHEELS_HOST }}
|
||||
wheels-key: ${{ secrets.WHEELS_KEY }}
|
||||
wheels-user: wheels
|
||||
requirements: "requirements.txt"
|
42
.github/workflows/stale.yml
vendored
42
.github/workflows/stale.yml
vendored
@@ -1,42 +0,0 @@
|
||||
name: Stale
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 * * * *"
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 90 days stale policy
|
||||
uses: actions/stale@v3.0.13
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 90
|
||||
days-before-close: 7
|
||||
operations-per-run: 25
|
||||
remove-stale-when-updated: true
|
||||
stale-issue-label: "stale"
|
||||
exempt-issue-labels: "no-stale,Help%20wanted,help-wanted,feature-request,feature%20request"
|
||||
stale-issue-message: >
|
||||
There hasn't been any activity on this issue recently. Due to the
|
||||
high number of incoming GitHub notifications, we have to clean some
|
||||
of the old issues, as many of them have already been resolved with
|
||||
the latest updates.
|
||||
|
||||
Please make sure to update to the latest Home Assistant version and
|
||||
check if that solves the issue. Let us know if that works for you by
|
||||
adding a comment 👍
|
||||
|
||||
This issue has now been marked as stale and will be closed if no
|
||||
further activity occurs. Thank you for your contributions.
|
||||
|
||||
stale-pr-label: "stale"
|
||||
exempt-pr-labels: "no-stale"
|
||||
stale-pr-message: >
|
||||
There hasn't been any activity on this pull request recently. This
|
||||
pull request has been automatically marked as stale because of that
|
||||
and will be closed if no further activity occurs within 7 days.
|
||||
|
||||
Thank you for your contributions.
|
65
.github/workflows/translations.yaml
vendored
65
.github/workflows/translations.yaml
vendored
@@ -1,65 +0,0 @@
|
||||
name: Translations
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 0 * * *"
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- translations/en.json
|
||||
|
||||
env:
|
||||
NODE_VERSION: 12
|
||||
|
||||
jobs:
|
||||
upload:
|
||||
name: Upload
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Node ${{ env.NODE_VERSION }}
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
- name: Upload Translations
|
||||
run: |
|
||||
export LOKALISE_TOKEN="${{ secrets.LOKALISE_TOKEN }}"
|
||||
|
||||
./script/translations_upload_base
|
||||
|
||||
download:
|
||||
name: Download
|
||||
needs: upload
|
||||
if: github.event_name == 'schedule'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Node ${{ env.NODE_VERSION }}
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
|
||||
- name: Download Translations
|
||||
run: |
|
||||
export LOKALISE_TOKEN="${{ secrets.LOKALISE_TOKEN }}"
|
||||
|
||||
npm install
|
||||
./script/translations_download
|
||||
|
||||
- name: Initialize git
|
||||
uses: home-assistant/actions/helpers/git-init@master
|
||||
with:
|
||||
name: GitHub Action
|
||||
email: github-action@users.noreply.github.com
|
||||
|
||||
- name: Update translation
|
||||
run: |
|
||||
git add translations
|
||||
git commit -am "Translation update"
|
||||
git push
|
8
.gitignore
vendored
8
.gitignore
vendored
@@ -5,6 +5,7 @@ npm-debug.log
|
||||
.DS_Store
|
||||
hass_frontend/*
|
||||
.reify-cache
|
||||
demo/hademo-icons.html
|
||||
|
||||
# Python stuff
|
||||
*.py[cod]
|
||||
@@ -23,10 +24,8 @@ dist
|
||||
# vscode
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/tasks.json
|
||||
|
||||
# Cast dev settings
|
||||
# Cast dev settings
|
||||
src/cast/dev_const.ts
|
||||
|
||||
# Secrets
|
||||
@@ -35,6 +34,3 @@ yarn-error.log
|
||||
|
||||
#asdf
|
||||
.tool-versions
|
||||
|
||||
# Home Assistant config
|
||||
/config
|
||||
|
6
.hound.yml
Normal file
6
.hound.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
jshint:
|
||||
enabled: false
|
||||
|
||||
eslint:
|
||||
enabled: true
|
||||
config_file: .eslintrc-hound.json
|
@@ -3,6 +3,7 @@ build-translations/*
|
||||
translations/*
|
||||
node_modules/*
|
||||
hass_frontend/*
|
||||
demo/hademo-icons.html
|
||||
pip-selfcheck.json
|
||||
|
||||
# vscode
|
||||
|
44
.vscode/launch.json
vendored
44
.vscode/launch.json
vendored
@@ -1,44 +0,0 @@
|
||||
{
|
||||
// https://github.com/microsoft/vscode-js-debug/blob/master/OPTIONS.md
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Debug Frontend",
|
||||
"request": "launch",
|
||||
"type": "pwa-chrome",
|
||||
"url": "http://localhost:8123/",
|
||||
"webRoot": "${workspaceFolder}/hass_frontend",
|
||||
"disableNetworkCache": true,
|
||||
"preLaunchTask": "Develop Frontend",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/hass_frontend/frontend_latest/*.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Debug Gallery",
|
||||
"request": "launch",
|
||||
"type": "pwa-chrome",
|
||||
"url": "http://localhost:8100/",
|
||||
"webRoot": "${workspaceFolder}/gallery/dist",
|
||||
"disableNetworkCache": true,
|
||||
"preLaunchTask": "Develop Gallery"
|
||||
},
|
||||
{
|
||||
"name": "Debug Demo",
|
||||
"request": "launch",
|
||||
"type": "pwa-chrome",
|
||||
"url": "http://localhost:8090/",
|
||||
"webRoot": "${workspaceFolder}/demo/dist",
|
||||
"disableNetworkCache": true,
|
||||
"preLaunchTask": "Develop Demo"
|
||||
},
|
||||
{
|
||||
"name": "Debug Cast",
|
||||
"request": "launch",
|
||||
"type": "pwa-chrome",
|
||||
"url": "http://localhost:8080/",
|
||||
"webRoot": "${workspaceFolder}/cast/dist",
|
||||
"disableNetworkCache": true,
|
||||
"preLaunchTask": "Develop Cast"
|
||||
},
|
||||
]
|
||||
}
|
208
.vscode/tasks.json
vendored
208
.vscode/tasks.json
vendored
@@ -1,208 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Develop Frontend",
|
||||
"type": "gulp",
|
||||
"task": "develop-app",
|
||||
// Sync changes here to other tasks until issue resolved
|
||||
// https://github.com/Microsoft/vscode/issues/61497
|
||||
"problemMatcher": {
|
||||
"owner": "ha-build",
|
||||
"source": "ha-build",
|
||||
"fileLocation": "absolute",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
|
||||
"severity": 1,
|
||||
"file": 2,
|
||||
"message": 3,
|
||||
"line": 4,
|
||||
"column": 5
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Changes detected. Starting compilation",
|
||||
"endsPattern": "Build done @"
|
||||
}
|
||||
},
|
||||
"isBackground": true,
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"runOptions": {
|
||||
"instanceLimit": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Develop Supervisor panel",
|
||||
"type": "gulp",
|
||||
"task": "develop-hassio",
|
||||
"problemMatcher": {
|
||||
"owner": "ha-build",
|
||||
"source": "ha-build",
|
||||
"fileLocation": "absolute",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
|
||||
"severity": 1,
|
||||
"file": 2,
|
||||
"message": 3,
|
||||
"line": 4,
|
||||
"column": 5
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Changes detected. Starting compilation",
|
||||
"endsPattern": "Build done @"
|
||||
}
|
||||
},
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"runOptions": {
|
||||
"instanceLimit": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Develop Gallery",
|
||||
"type": "gulp",
|
||||
"task": "develop-gallery",
|
||||
"problemMatcher": {
|
||||
"owner": "ha-build",
|
||||
"source": "ha-build",
|
||||
"fileLocation": "absolute",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
|
||||
"severity": 1,
|
||||
"file": 2,
|
||||
"message": 3,
|
||||
"line": 4,
|
||||
"column": 5
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Changes detected. Starting compilation",
|
||||
"endsPattern": "Build done @"
|
||||
}
|
||||
},
|
||||
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"runOptions": {
|
||||
"instanceLimit": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Develop Demo",
|
||||
"type": "gulp",
|
||||
"task": "develop-demo",
|
||||
"problemMatcher": {
|
||||
"owner": "ha-build",
|
||||
"source": "ha-build",
|
||||
"fileLocation": "absolute",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
|
||||
"severity": 1,
|
||||
"file": 2,
|
||||
"message": 3,
|
||||
"line": 4,
|
||||
"column": 5
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Changes detected. Starting compilation",
|
||||
"endsPattern": "Build done @"
|
||||
}
|
||||
},
|
||||
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"runOptions": {
|
||||
"instanceLimit": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Develop Cast",
|
||||
"type": "gulp",
|
||||
"task": "develop-cast",
|
||||
"problemMatcher": {
|
||||
"owner": "ha-build",
|
||||
"source": "ha-build",
|
||||
"fileLocation": "absolute",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
|
||||
"severity": 1,
|
||||
"file": 2,
|
||||
"message": 3,
|
||||
"line": 4,
|
||||
"column": 5
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Changes detected. Starting compilation",
|
||||
"endsPattern": "Build done @"
|
||||
}
|
||||
},
|
||||
|
||||
"isBackground": true,
|
||||
"group": "build",
|
||||
"runOptions": {
|
||||
"instanceLimit": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Run HA Core in devcontainer",
|
||||
"type": "shell",
|
||||
"command": "script/core",
|
||||
"isBackground": true,
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"runOptions": {
|
||||
"instanceLimit": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Run HA Core for Supervisor in devcontainer",
|
||||
"type": "shell",
|
||||
"command": "HASSIO=${input:supervisorHost} HASSIO_TOKEN=${input:supervisorToken} script/core",
|
||||
"isBackground": true,
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"runOptions": {
|
||||
"instanceLimit": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"inputs": [
|
||||
{
|
||||
"id": "supervisorHost",
|
||||
"type": "promptString",
|
||||
"description": "The IP of the Supervisor host running the Remote API proxy add-on"
|
||||
},
|
||||
{
|
||||
"id": "supervisorToken",
|
||||
"type": "promptString",
|
||||
"description": "The token for the Remote API proxy add-on"
|
||||
}
|
||||
]
|
||||
}
|
@@ -2,139 +2,79 @@
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
## Our Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
[safety@home-assistant.io][email] or by using the report/flag feature of
|
||||
the medium used. All complaints will be reviewed and investigated promptly and
|
||||
fairly.
|
||||
reported by contacting the project team at [safety@home-assistant.io][email]. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available [here][version].
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder][mozilla].
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available [here][version].
|
||||
|
||||
## Adoption
|
||||
|
||||
This Code of Conduct was first adopted January 21st, 2017 and announced in
|
||||
[this][coc-blog] blog post and has been updated on May 25th, 2020 to version
|
||||
2.0 of the [Contributor Covenant][homepage] as announced in [this][coc2-blog]
|
||||
blog post.
|
||||
This Code of Conduct was first adopted January 21st, 2017 and announced in [this][coc-blog] blog post.
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
<https://www.contributor-covenant.org/faq>. Translations are available at
|
||||
<https://www.contributor-covenant.org/translations>.
|
||||
|
||||
[coc-blog]: /blog/2017/01/21/home-assistant-governance/
|
||||
[coc2-blog]: /blog/2020/05/25/code-of-conduct-updated/
|
||||
[email]: mailto:safety@home-assistant.io
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[mozilla]: https://github.com/mozilla/diversity
|
||||
[version]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
[email]: mailto:safety@home-assistant.io
|
||||
[coc-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/
|
||||
|
31
Dockerfile
Normal file
31
Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
||||
FROM node:8.11.1-alpine
|
||||
|
||||
# install yarn
|
||||
ENV PATH /root/.yarn/bin:$PATH
|
||||
|
||||
## Install/force base tools
|
||||
RUN apk update \
|
||||
&& apk add make g++ curl bash binutils tar git python2 python3 \
|
||||
&& rm -rf /var/cache/apk/* \
|
||||
&& /bin/bash \
|
||||
&& touch ~/.bashrc
|
||||
|
||||
## Install yarn
|
||||
RUN curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||
|
||||
## Setup the project
|
||||
RUN mkdir -p /frontend
|
||||
|
||||
WORKDIR /frontend
|
||||
|
||||
COPY package.json yarn.lock ./
|
||||
|
||||
RUN yarn install --frozen-lockfile
|
||||
|
||||
COPY . .
|
||||
|
||||
COPY script/docker_entrypoint.sh /usr/bin/docker_entrypoint.sh
|
||||
|
||||
RUN chmod +x /usr/bin/docker_entrypoint.sh
|
||||
|
||||
CMD [ "docker_entrypoint.sh" ]
|
17
README.md
17
README.md
@@ -6,15 +6,15 @@ This is the repository for the official [Home Assistant](https://home-assistant.
|
||||
|
||||
- [View demo of Home Assistant](https://demo.home-assistant.io/)
|
||||
- [More information about Home Assistant](https://home-assistant.io)
|
||||
- [Frontend development instructions](https://developers.home-assistant.io/docs/frontend/development/)
|
||||
- [Frontend development instructions](https://developers.home-assistant.io/docs/en/frontend_index.html)
|
||||
|
||||
## Development
|
||||
|
||||
- Initial setup: `script/setup`
|
||||
- Development: [Instructions](https://developers.home-assistant.io/docs/frontend/development/)
|
||||
- Development: [Instructions](https://developers.home-assistant.io/docs/en/frontend_development.html)
|
||||
- Production build: `script/build_frontend`
|
||||
- Gallery: `cd gallery && script/develop_gallery`
|
||||
- Supervisor: [Instructions](https://developers.home-assistant.io/docs/supervisor/developing)
|
||||
- Hass.io: [Instructions](https://developers.home-assistant.io/docs/en/hassio_hass.html)
|
||||
|
||||
## Frontend development
|
||||
|
||||
@@ -22,8 +22,17 @@ This is the repository for the official [Home Assistant](https://home-assistant.
|
||||
|
||||
A complete guide can be found at the following [link](https://www.home-assistant.io/developers/frontend/). It describes a short guide for the build of project.
|
||||
|
||||
### Docker environment
|
||||
|
||||
It is possible to compile the project and/or run commands in the development environment having only the [Docker](https://www.docker.com) pre-installed in the system. On the root of project you can do:
|
||||
|
||||
- `sh ./script/docker_run.sh build` Build all the project with one command
|
||||
- `sh ./script/docker_run.sh bash` Open an interactive shell (the same environment generated by the _classic environment_) where you can run commands. This bash work on your project directory and any change on your file is automatically present within your build bash.
|
||||
|
||||
**Note**: if you have installed `npm` in addition to the `docker`, you can use the commands `npm run docker_build` and `npm run bash` to get a full build or bash as explained above
|
||||
|
||||
## License
|
||||
|
||||
Home Assistant is open-source and Apache 2 licensed. Feel free to browse the repository, learn and reuse parts in your own projects.
|
||||
|
||||
We use [BrowserStack](https://www.browserstack.com) to test Home Assistant on a large variety of devices.
|
||||
We use [BrowserStack](https://www.browserstack.com) to test Home Assistant on a large variation of devices.
|
||||
|
30
azure-pipelines-netlify.yml
Normal file
30
azure-pipelines-netlify.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
# https://dev.azure.com/home-assistant
|
||||
|
||||
trigger: none
|
||||
pr: none
|
||||
schedules:
|
||||
- cron: "0 0 * * *"
|
||||
displayName: "build preview"
|
||||
branches:
|
||||
include:
|
||||
- dev
|
||||
always: true
|
||||
variables:
|
||||
- group: netlify
|
||||
|
||||
jobs:
|
||||
|
||||
- job: 'Netlify_preview'
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
steps:
|
||||
- script: |
|
||||
# Cast
|
||||
curl -X POST -d {} https://api.netlify.com/build_hooks/${NETLIFY_CAST}
|
||||
|
||||
# Demo
|
||||
curl -X POST -d {} https://api.netlify.com/build_hooks/${NETLIFY_DEMO}
|
||||
|
||||
# Gallery
|
||||
curl -X POST -d {} https://api.netlify.com/build_hooks/${NETLIFY_GALLERY}
|
||||
displayName: 'Trigger netlify build preview'
|
59
azure-pipelines-release.yml
Normal file
59
azure-pipelines-release.yml
Normal file
@@ -0,0 +1,59 @@
|
||||
# https://dev.azure.com/home-assistant
|
||||
|
||||
trigger:
|
||||
batch: true
|
||||
tags:
|
||||
include:
|
||||
- "*"
|
||||
pr: none
|
||||
variables:
|
||||
- name: versionWheels
|
||||
value: '1.10.1-3.7-alpine3.11'
|
||||
- name: versionNode
|
||||
value: '12.1'
|
||||
- group: twine
|
||||
resources:
|
||||
repositories:
|
||||
- repository: azure
|
||||
type: github
|
||||
name: 'home-assistant/ci-azure'
|
||||
endpoint: 'home-assistant'
|
||||
|
||||
|
||||
stages:
|
||||
- stage: "Validate"
|
||||
jobs:
|
||||
- template: templates/azp-job-version.yaml@azure
|
||||
|
||||
- stage: "Build"
|
||||
jobs:
|
||||
- job: "ReleasePython"
|
||||
pool:
|
||||
vmImage: "ubuntu-latest"
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
displayName: "Use Python 3.7"
|
||||
inputs:
|
||||
versionSpec: "3.7"
|
||||
- task: NodeTool@0
|
||||
displayName: "Use Node $(versionNode)"
|
||||
inputs:
|
||||
versionSpec: "$(versionNode)"
|
||||
- script: pip install twine wheel
|
||||
displayName: "Install tools"
|
||||
- script: |
|
||||
export TWINE_USERNAME="$(twineUser)"
|
||||
export TWINE_PASSWORD="$(twinePassword)"
|
||||
|
||||
script/release
|
||||
displayName: "Build and release package"
|
||||
- stage: "Wheels"
|
||||
jobs:
|
||||
- template: templates/azp-job-wheels.yaml@azure
|
||||
parameters:
|
||||
builderVersion: '$(versionWheels)'
|
||||
wheelsRequirement: 'requirement.txt'
|
||||
preBuild:
|
||||
- script: |
|
||||
sleep 240
|
||||
echo "home-assistant-frontend==$(Build.SourceBranchName)" > requirement.txt
|
70
azure-pipelines-translation.yml
Normal file
70
azure-pipelines-translation.yml
Normal file
@@ -0,0 +1,70 @@
|
||||
# https://dev.azure.com/home-assistant
|
||||
|
||||
trigger:
|
||||
batch: true
|
||||
branches:
|
||||
include:
|
||||
- dev
|
||||
paths:
|
||||
include:
|
||||
- translations/en.json
|
||||
pr: none
|
||||
schedules:
|
||||
- cron: "30 0 * * *"
|
||||
displayName: "frontend translation update"
|
||||
branches:
|
||||
include:
|
||||
- dev
|
||||
always: true
|
||||
variables:
|
||||
- group: translation
|
||||
resources:
|
||||
repositories:
|
||||
- repository: azure
|
||||
type: github
|
||||
name: 'home-assistant/ci-azure'
|
||||
endpoint: 'home-assistant'
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
- job: 'Upload'
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
displayName: 'Use Node 12.x'
|
||||
inputs:
|
||||
versionSpec: '12.x'
|
||||
- script: |
|
||||
export LOKALISE_TOKEN="$(lokaliseToken)"
|
||||
export AZURE_BRANCH="$(Build.SourceBranchName)"
|
||||
|
||||
./script/translations_upload_base
|
||||
displayName: 'Upload Translation'
|
||||
|
||||
- job: 'Download'
|
||||
dependsOn:
|
||||
- 'Upload'
|
||||
condition: or(eq(variables['Build.Reason'], 'Schedule'), eq(variables['Build.Reason'], 'Manual'))
|
||||
pool:
|
||||
vmImage: 'ubuntu-latest'
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
displayName: 'Use Node 12.x'
|
||||
inputs:
|
||||
versionSpec: '12.x'
|
||||
- template: templates/azp-step-git-init.yaml@azure
|
||||
- script: |
|
||||
export LOKALISE_TOKEN="$(lokaliseToken)"
|
||||
export AZURE_BRANCH="$(Build.SourceBranchName)"
|
||||
|
||||
npm install
|
||||
./script/translations_download
|
||||
displayName: 'Download Translation'
|
||||
- script: |
|
||||
git checkout dev
|
||||
git add translation
|
||||
git commit -am "[ci skip] Translation update"
|
||||
git push
|
||||
displayName: 'Update translation'
|
@@ -1,39 +0,0 @@
|
||||
# Bundling Home Assistant Frontend
|
||||
|
||||
The Home Assistant build pipeline contains various steps to prepare a build.
|
||||
|
||||
- Generating icon files to be included
|
||||
- Generating translation files to be included
|
||||
- Converting TypeScript, CSS and JSON files to JavaScript
|
||||
- Bundling
|
||||
- Minifying the files
|
||||
- Generating the HTML entrypoint files
|
||||
- Generating the service worker
|
||||
- Compressing the files
|
||||
|
||||
## Converting files
|
||||
|
||||
Currently in Home Assistant we use a bundler to convert TypeScript, CSS and JSON files to JavaScript files that the browser understands.
|
||||
|
||||
We currently rely on Webpack but also have experimental Rollup support. Both of these programs bundle the converted files in both production and development.
|
||||
|
||||
For development, bundling is optional. We just want to get the right files in the browser.
|
||||
|
||||
Responsibilities of the converter during development:
|
||||
|
||||
- Convert TypeScript to JavaScript
|
||||
- Convert CSS to JavaScript that sets the content as the default export
|
||||
- Convert JSON to JavaScript that sets the content as the default export
|
||||
- Make sure import, dynamic import and web worker references work
|
||||
- Add extensions where missing
|
||||
- Resolve absolute package imports
|
||||
- Filter out specific imports/packages
|
||||
- Replace constants with values
|
||||
|
||||
In production, the following responsibilities are added:
|
||||
|
||||
- Minify HTML
|
||||
- Bundle multiple imports so that the browser can fetch less files
|
||||
- Generate a second version that is ES5 compatible
|
||||
|
||||
Configuration for all these steps are specified in [bundle.js](bundle.js).
|
50
build-scripts/babel.js
Normal file
50
build-scripts/babel.js
Normal file
@@ -0,0 +1,50 @@
|
||||
module.exports.babelLoaderConfig = ({ latestBuild }) => {
|
||||
if (latestBuild === undefined) {
|
||||
throw Error("latestBuild not defined for babel loader config");
|
||||
}
|
||||
return {
|
||||
test: /\.m?js$|\.tsx?$/,
|
||||
use: {
|
||||
loader: "babel-loader",
|
||||
options: {
|
||||
presets: [
|
||||
!latestBuild && [
|
||||
require("@babel/preset-env").default,
|
||||
{ modules: false },
|
||||
],
|
||||
[
|
||||
require("@babel/preset-typescript").default,
|
||||
{
|
||||
jsxPragma: "h",
|
||||
},
|
||||
],
|
||||
].filter(Boolean),
|
||||
plugins: [
|
||||
// Part of ES2018. Converts {...a, b: 2} to Object.assign({}, a, {b: 2})
|
||||
[
|
||||
"@babel/plugin-proposal-object-rest-spread",
|
||||
{ loose: true, useBuiltIns: true },
|
||||
],
|
||||
// Only support the syntax, Webpack will handle it.
|
||||
"@babel/syntax-dynamic-import",
|
||||
[
|
||||
"@babel/transform-react-jsx",
|
||||
{
|
||||
pragma: "h",
|
||||
},
|
||||
],
|
||||
"@babel/plugin-proposal-optional-chaining",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator",
|
||||
[
|
||||
require("@babel/plugin-proposal-decorators").default,
|
||||
{ decoratorsBeforeExport: true },
|
||||
],
|
||||
[
|
||||
require("@babel/plugin-proposal-class-properties").default,
|
||||
{ loose: true },
|
||||
],
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
};
|
@@ -1,203 +0,0 @@
|
||||
const path = require("path");
|
||||
const env = require("./env.js");
|
||||
const paths = require("./paths.js");
|
||||
|
||||
// Files from NPM Packages that should not be imported
|
||||
module.exports.ignorePackages = ({ latestBuild }) => [
|
||||
// Bloats bundle and it's not used.
|
||||
path.resolve(require.resolve("moment"), "../locale"),
|
||||
// Part of yaml.js and only used for !!js functions that we don't use
|
||||
require.resolve("esprima"),
|
||||
];
|
||||
|
||||
// Files from NPM packages that we should replace with empty file
|
||||
module.exports.emptyPackages = ({ latestBuild }) =>
|
||||
[
|
||||
// Contains all color definitions for all material color sets.
|
||||
// We don't use it
|
||||
require.resolve("@polymer/paper-styles/color.js"),
|
||||
require.resolve("@polymer/paper-styles/default-theme.js"),
|
||||
// Loads stuff from a CDN
|
||||
require.resolve("@polymer/font-roboto/roboto.js"),
|
||||
require.resolve("@vaadin/vaadin-material-styles/font-roboto.js"),
|
||||
// Compatibility not needed for latest builds
|
||||
latestBuild &&
|
||||
// wrapped in require.resolve so it blows up if file no longer exists
|
||||
require.resolve(
|
||||
path.resolve(paths.polymer_dir, "src/resources/compatibility.ts")
|
||||
),
|
||||
// This polyfill is loaded in workers to support ES5, filter it out.
|
||||
latestBuild && require.resolve("proxy-polyfill/src/index.js"),
|
||||
].filter(Boolean);
|
||||
|
||||
module.exports.definedVars = ({ isProdBuild, latestBuild, defineOverlay }) => ({
|
||||
__DEV__: !isProdBuild,
|
||||
__BUILD__: JSON.stringify(latestBuild ? "latest" : "es5"),
|
||||
__VERSION__: JSON.stringify(env.version()),
|
||||
__DEMO__: false,
|
||||
__BACKWARDS_COMPAT__: false,
|
||||
__STATIC_PATH__: "/static/",
|
||||
"process.env.NODE_ENV": JSON.stringify(
|
||||
isProdBuild ? "production" : "development"
|
||||
),
|
||||
...defineOverlay,
|
||||
});
|
||||
|
||||
module.exports.terserOptions = (latestBuild) => ({
|
||||
safari10: !latestBuild,
|
||||
ecma: latestBuild ? undefined : 5,
|
||||
output: { comments: false },
|
||||
});
|
||||
|
||||
module.exports.babelOptions = ({ latestBuild }) => ({
|
||||
babelrc: false,
|
||||
presets: [
|
||||
!latestBuild && [
|
||||
require("@babel/preset-env").default,
|
||||
{
|
||||
useBuiltIns: "entry",
|
||||
corejs: "3.6",
|
||||
},
|
||||
],
|
||||
require("@babel/preset-typescript").default,
|
||||
].filter(Boolean),
|
||||
plugins: [
|
||||
// Part of ES2018. Converts {...a, b: 2} to Object.assign({}, a, {b: 2})
|
||||
!latestBuild && [
|
||||
"@babel/plugin-proposal-object-rest-spread",
|
||||
{ loose: true, useBuiltIns: true },
|
||||
],
|
||||
// Only support the syntax, Webpack will handle it.
|
||||
"@babel/plugin-syntax-import-meta",
|
||||
"@babel/plugin-syntax-dynamic-import",
|
||||
"@babel/plugin-proposal-optional-chaining",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator",
|
||||
[
|
||||
require("@babel/plugin-proposal-decorators").default,
|
||||
{ decoratorsBeforeExport: true },
|
||||
],
|
||||
[
|
||||
require("@babel/plugin-proposal-class-properties").default,
|
||||
{ loose: true },
|
||||
],
|
||||
].filter(Boolean),
|
||||
});
|
||||
|
||||
// Are already ES5, cause warnings when babelified.
|
||||
module.exports.babelExclude = () => [
|
||||
require.resolve("@mdi/js/mdi.js"),
|
||||
require.resolve("hls.js"),
|
||||
];
|
||||
|
||||
const outputPath = (outputRoot, latestBuild) =>
|
||||
path.resolve(outputRoot, latestBuild ? "frontend_latest" : "frontend_es5");
|
||||
|
||||
const publicPath = (latestBuild, root = "") =>
|
||||
latestBuild ? `${root}/frontend_latest/` : `${root}/frontend_es5/`;
|
||||
|
||||
/*
|
||||
BundleConfig {
|
||||
// Object with entrypoints that need to be bundled
|
||||
entry: { [name: string]: pathToFile },
|
||||
// Folder where bundled files need to be written
|
||||
outputPath: string,
|
||||
// absolute url-path where bundled files can be found
|
||||
publicPath: string,
|
||||
// extra definitions that we need to replace in source
|
||||
defineOverlay: {[name: string]: value },
|
||||
// if this is a production build
|
||||
isProdBuild: boolean,
|
||||
// If we're targeting latest browsers
|
||||
latestBuild: boolean,
|
||||
// If we're doing a stats build (create nice chunk names)
|
||||
isStatsBuild: boolean,
|
||||
// Names of entrypoints that should not be hashed
|
||||
dontHash: Set<string>
|
||||
}
|
||||
*/
|
||||
|
||||
module.exports.config = {
|
||||
app({ isProdBuild, latestBuild, isStatsBuild, isWDS }) {
|
||||
return {
|
||||
entry: {
|
||||
service_worker: "./src/entrypoints/service_worker.ts",
|
||||
app: "./src/entrypoints/app.ts",
|
||||
authorize: "./src/entrypoints/authorize.ts",
|
||||
onboarding: "./src/entrypoints/onboarding.ts",
|
||||
core: "./src/entrypoints/core.ts",
|
||||
"custom-panel": "./src/entrypoints/custom-panel.ts",
|
||||
},
|
||||
outputPath: outputPath(paths.app_output_root, latestBuild),
|
||||
publicPath: publicPath(latestBuild),
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
isStatsBuild,
|
||||
isWDS,
|
||||
};
|
||||
},
|
||||
|
||||
demo({ isProdBuild, latestBuild, isStatsBuild }) {
|
||||
return {
|
||||
entry: {
|
||||
main: path.resolve(paths.demo_dir, "src/entrypoint.ts"),
|
||||
},
|
||||
outputPath: outputPath(paths.demo_output_root, latestBuild),
|
||||
publicPath: publicPath(latestBuild),
|
||||
defineOverlay: {
|
||||
__VERSION__: JSON.stringify(`DEMO-${env.version()}`),
|
||||
__DEMO__: true,
|
||||
},
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
isStatsBuild,
|
||||
};
|
||||
},
|
||||
|
||||
cast({ isProdBuild, latestBuild }) {
|
||||
const entry = {
|
||||
launcher: path.resolve(paths.cast_dir, "src/launcher/entrypoint.ts"),
|
||||
};
|
||||
|
||||
if (latestBuild) {
|
||||
entry.receiver = path.resolve(
|
||||
paths.cast_dir,
|
||||
"src/receiver/entrypoint.ts"
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
entry,
|
||||
outputPath: outputPath(paths.cast_output_root, latestBuild),
|
||||
publicPath: publicPath(latestBuild),
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
defineOverlay: {
|
||||
__BACKWARDS_COMPAT__: true,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
hassio({ isProdBuild, latestBuild }) {
|
||||
return {
|
||||
entry: {
|
||||
entrypoint: path.resolve(paths.hassio_dir, "src/entrypoint.ts"),
|
||||
},
|
||||
outputPath: outputPath(paths.hassio_output_root, latestBuild),
|
||||
publicPath: publicPath(latestBuild, paths.hassio_publicPath),
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
};
|
||||
},
|
||||
|
||||
gallery({ isProdBuild, latestBuild }) {
|
||||
return {
|
||||
entry: {
|
||||
entrypoint: path.resolve(paths.gallery_dir, "src/entrypoint.js"),
|
||||
},
|
||||
outputPath: outputPath(paths.gallery_output_root, latestBuild),
|
||||
publicPath: publicPath(latestBuild),
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
};
|
||||
},
|
||||
};
|
@@ -1,35 +1,14 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const paths = require("./paths.js");
|
||||
|
||||
module.exports = {
|
||||
useRollup() {
|
||||
return process.env.ROLLUP === "1";
|
||||
},
|
||||
useWDS() {
|
||||
return process.env.WDS === "1";
|
||||
},
|
||||
isProdBuild() {
|
||||
return (
|
||||
process.env.NODE_ENV === "production" || module.exports.isStatsBuild()
|
||||
);
|
||||
return process.env.NODE_ENV === "production";
|
||||
},
|
||||
isStatsBuild() {
|
||||
return process.env.STATS === "1";
|
||||
},
|
||||
isTest() {
|
||||
return process.env.IS_TEST === "true";
|
||||
isTravis() {
|
||||
return process.env.TRAVIS === "true";
|
||||
},
|
||||
isNetlify() {
|
||||
return process.env.NETLIFY === "true";
|
||||
},
|
||||
version() {
|
||||
const version = fs
|
||||
.readFileSync(path.resolve(paths.polymer_dir, "setup.py"), "utf8")
|
||||
.match(/\d{8}\.\d+/);
|
||||
if (!version) {
|
||||
throw Error("Version not found");
|
||||
}
|
||||
return version[0];
|
||||
},
|
||||
};
|
||||
|
@@ -1,18 +1,16 @@
|
||||
// Run HA develop mode
|
||||
const gulp = require("gulp");
|
||||
|
||||
const env = require("../env");
|
||||
const envVars = require("../env");
|
||||
|
||||
require("./clean.js");
|
||||
require("./translations.js");
|
||||
require("./gen-icons-json.js");
|
||||
require("./gen-icons.js");
|
||||
require("./gather-static.js");
|
||||
require("./compress.js");
|
||||
require("./webpack.js");
|
||||
require("./service-worker.js");
|
||||
require("./entry-html.js");
|
||||
require("./rollup.js");
|
||||
require("./wds.js");
|
||||
|
||||
gulp.task(
|
||||
"develop-app",
|
||||
@@ -22,18 +20,14 @@ gulp.task(
|
||||
},
|
||||
"clean",
|
||||
gulp.parallel(
|
||||
"gen-service-worker-app-dev",
|
||||
"gen-icons-json",
|
||||
"gen-service-worker-dev",
|
||||
gulp.parallel("gen-icons-app", "gen-icons-mdi"),
|
||||
"gen-pages-dev",
|
||||
"gen-index-app-dev",
|
||||
"build-translations"
|
||||
),
|
||||
"copy-static-app",
|
||||
env.useWDS()
|
||||
? "wds-watch-app"
|
||||
: env.useRollup()
|
||||
? "rollup-watch-app"
|
||||
: "webpack-watch-app"
|
||||
"copy-static",
|
||||
"webpack-watch-app"
|
||||
)
|
||||
);
|
||||
|
||||
@@ -44,15 +38,15 @@ gulp.task(
|
||||
process.env.NODE_ENV = "production";
|
||||
},
|
||||
"clean",
|
||||
gulp.parallel("gen-icons-json", "build-translations"),
|
||||
"copy-static-app",
|
||||
env.useRollup() ? "rollup-prod-app" : "webpack-prod-app",
|
||||
gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
|
||||
"copy-static",
|
||||
"webpack-prod-app",
|
||||
...// Don't compress running tests
|
||||
(env.isTest() ? [] : ["compress-app"]),
|
||||
(envVars.isTravis() ? [] : ["compress-app"]),
|
||||
gulp.parallel(
|
||||
"gen-pages-prod",
|
||||
"gen-index-app-prod",
|
||||
"gen-service-worker-app-prod"
|
||||
"gen-service-worker-prod"
|
||||
)
|
||||
)
|
||||
);
|
||||
|
@@ -1,27 +1,30 @@
|
||||
const gulp = require("gulp");
|
||||
|
||||
const env = require("../env");
|
||||
|
||||
require("./clean.js");
|
||||
require("./translations.js");
|
||||
require("./gen-icons.js");
|
||||
require("./gather-static.js");
|
||||
require("./webpack.js");
|
||||
require("./service-worker.js");
|
||||
require("./entry-html.js");
|
||||
require("./rollup.js");
|
||||
|
||||
gulp.task(
|
||||
"develop-cast",
|
||||
gulp.series(
|
||||
async function setEnv() {
|
||||
process.env.NODE_ENV = "development";
|
||||
process.env.IS_CAST = "true";
|
||||
},
|
||||
"clean-cast",
|
||||
"translations-enable-merge-backend",
|
||||
gulp.parallel("gen-icons-json", "build-translations"),
|
||||
gulp.parallel(
|
||||
"gen-icons-app",
|
||||
"gen-icons-mdi",
|
||||
"gen-index-cast-dev",
|
||||
"build-translations"
|
||||
),
|
||||
"copy-static-cast",
|
||||
"gen-index-cast-dev",
|
||||
env.useRollup() ? "rollup-dev-server-cast" : "webpack-dev-server-cast"
|
||||
"webpack-dev-server-cast"
|
||||
)
|
||||
);
|
||||
|
||||
@@ -33,9 +36,9 @@ gulp.task(
|
||||
},
|
||||
"clean-cast",
|
||||
"translations-enable-merge-backend",
|
||||
gulp.parallel("gen-icons-json", "build-translations"),
|
||||
gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
|
||||
"copy-static-cast",
|
||||
env.useRollup() ? "rollup-prod-cast" : "webpack-prod-cast",
|
||||
"webpack-prod-cast",
|
||||
"gen-index-cast-prod"
|
||||
)
|
||||
);
|
||||
|
@@ -1,36 +1,39 @@
|
||||
const del = require("del");
|
||||
const gulp = require("gulp");
|
||||
const paths = require("../paths");
|
||||
const config = require("../paths");
|
||||
require("./translations");
|
||||
|
||||
gulp.task(
|
||||
"clean",
|
||||
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
|
||||
return del([paths.app_output_root, paths.build_dir]);
|
||||
return del([config.root, config.build_dir]);
|
||||
})
|
||||
);
|
||||
|
||||
gulp.task(
|
||||
"clean-demo",
|
||||
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
|
||||
return del([paths.demo_output_root, paths.build_dir]);
|
||||
return del([config.demo_root, config.build_dir]);
|
||||
})
|
||||
);
|
||||
|
||||
gulp.task(
|
||||
"clean-cast",
|
||||
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
|
||||
return del([paths.cast_output_root, paths.build_dir]);
|
||||
return del([config.cast_root, config.build_dir]);
|
||||
})
|
||||
);
|
||||
|
||||
gulp.task("clean-hassio", function cleanOutputAndBuildDir() {
|
||||
return del([paths.hassio_output_root, paths.build_dir]);
|
||||
});
|
||||
gulp.task(
|
||||
"clean-hassio",
|
||||
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
|
||||
return del([config.hassio_root, config.build_dir]);
|
||||
})
|
||||
);
|
||||
|
||||
gulp.task(
|
||||
"clean-gallery",
|
||||
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
|
||||
return del([paths.gallery_output_root, paths.build_dir]);
|
||||
return del([config.gallery_root, config.build_dir]);
|
||||
})
|
||||
);
|
||||
|
@@ -6,40 +6,33 @@ const merge = require("merge-stream");
|
||||
const path = require("path");
|
||||
const paths = require("../paths");
|
||||
|
||||
const zopfliOptions = { threshold: 150 };
|
||||
|
||||
gulp.task("compress-app", function compressApp() {
|
||||
const jsLatest = gulp
|
||||
.src(path.resolve(paths.app_output_latest, "**/*.js"))
|
||||
.pipe(zopfli(zopfliOptions))
|
||||
.pipe(gulp.dest(paths.app_output_latest));
|
||||
.src(path.resolve(paths.output, "**/*.js"))
|
||||
.pipe(zopfli())
|
||||
.pipe(gulp.dest(paths.output));
|
||||
|
||||
const jsEs5 = gulp
|
||||
.src(path.resolve(paths.app_output_es5, "**/*.js"))
|
||||
.pipe(zopfli(zopfliOptions))
|
||||
.pipe(gulp.dest(paths.app_output_es5));
|
||||
.src(path.resolve(paths.output_es5, "**/*.js"))
|
||||
.pipe(zopfli())
|
||||
.pipe(gulp.dest(paths.output_es5));
|
||||
|
||||
const polyfills = gulp
|
||||
.src(path.resolve(paths.app_output_static, "polyfills/*.js"))
|
||||
.pipe(zopfli(zopfliOptions))
|
||||
.pipe(gulp.dest(path.resolve(paths.app_output_static, "polyfills")));
|
||||
.src(path.resolve(paths.static, "polyfills/*.js"))
|
||||
.pipe(zopfli())
|
||||
.pipe(gulp.dest(path.resolve(paths.static, "polyfills")));
|
||||
|
||||
const translations = gulp
|
||||
.src(path.resolve(paths.app_output_static, "translations/**/*.json"))
|
||||
.pipe(zopfli(zopfliOptions))
|
||||
.pipe(gulp.dest(path.resolve(paths.app_output_static, "translations")));
|
||||
.src(path.resolve(paths.static, "translations/*.json"))
|
||||
.pipe(zopfli())
|
||||
.pipe(gulp.dest(path.resolve(paths.static, "translations")));
|
||||
|
||||
const icons = gulp
|
||||
.src(path.resolve(paths.app_output_static, "mdi/*.json"))
|
||||
.pipe(zopfli(zopfliOptions))
|
||||
.pipe(gulp.dest(path.resolve(paths.app_output_static, "mdi")));
|
||||
|
||||
return merge(jsLatest, jsEs5, polyfills, translations, icons);
|
||||
return merge(jsLatest, jsEs5, polyfills, translations);
|
||||
});
|
||||
|
||||
gulp.task("compress-hassio", function compressApp() {
|
||||
return gulp
|
||||
.src(path.resolve(paths.hassio_output_root, "**/*.js"))
|
||||
.pipe(zopfli(zopfliOptions))
|
||||
.pipe(gulp.dest(paths.hassio_output_root));
|
||||
.src(path.resolve(paths.hassio_root, "**/*.js"))
|
||||
.pipe(zopfli())
|
||||
.pipe(gulp.dest(paths.hassio_root));
|
||||
});
|
||||
|
@@ -1,16 +1,13 @@
|
||||
// Run demo develop mode
|
||||
const gulp = require("gulp");
|
||||
|
||||
const env = require("../env");
|
||||
|
||||
require("./clean.js");
|
||||
require("./translations.js");
|
||||
require("./gen-icons-json.js");
|
||||
require("./gen-icons.js");
|
||||
require("./gather-static.js");
|
||||
require("./webpack.js");
|
||||
require("./service-worker.js");
|
||||
require("./entry-html.js");
|
||||
require("./rollup.js");
|
||||
|
||||
gulp.task(
|
||||
"develop-demo",
|
||||
@@ -20,9 +17,15 @@ gulp.task(
|
||||
},
|
||||
"clean-demo",
|
||||
"translations-enable-merge-backend",
|
||||
gulp.parallel("gen-icons-json", "gen-index-demo-dev", "build-translations"),
|
||||
gulp.parallel(
|
||||
"gen-icons-app",
|
||||
"gen-icons-mdi",
|
||||
"gen-icons-demo",
|
||||
"gen-index-demo-dev",
|
||||
"build-translations"
|
||||
),
|
||||
"copy-static-demo",
|
||||
env.useRollup() ? "rollup-dev-server-demo" : "webpack-dev-server-demo"
|
||||
"webpack-dev-server-demo"
|
||||
)
|
||||
);
|
||||
|
||||
@@ -35,9 +38,14 @@ gulp.task(
|
||||
"clean-demo",
|
||||
// Cast needs to be backwards compatible and older HA has no translations
|
||||
"translations-enable-merge-backend",
|
||||
gulp.parallel("gen-icons-json", "build-translations"),
|
||||
gulp.parallel(
|
||||
"gen-icons-app",
|
||||
"gen-icons-mdi",
|
||||
"gen-icons-demo",
|
||||
"build-translations"
|
||||
),
|
||||
"copy-static-demo",
|
||||
env.useRollup() ? "rollup-prod-demo" : "webpack-prod-demo",
|
||||
"webpack-prod-demo",
|
||||
"gen-index-demo-prod"
|
||||
)
|
||||
);
|
||||
|
@@ -1,14 +1,9 @@
|
||||
const del = require("del");
|
||||
const gulp = require("gulp");
|
||||
const fs = require("fs");
|
||||
const mapStream = require("map-stream");
|
||||
|
||||
const inDirFrontend = "translations/frontend";
|
||||
const inDirBackend = "translations/backend";
|
||||
const downloadDir = "translations/downloads";
|
||||
const srcMeta = "src/translations/translationMetadata.json";
|
||||
|
||||
const encoding = "utf8";
|
||||
const inDir = "translations/frontend";
|
||||
const downloadDir = inDir + "/downloads";
|
||||
|
||||
const tasks = [];
|
||||
|
||||
@@ -58,25 +53,9 @@ gulp.task(taskName, function () {
|
||||
});
|
||||
tasks.push(taskName);
|
||||
|
||||
taskName = "check-all-files-exist";
|
||||
gulp.task(taskName, function () {
|
||||
const file = fs.readFileSync(srcMeta, { encoding });
|
||||
const meta = JSON.parse(file);
|
||||
Object.keys(meta).forEach((lang) => {
|
||||
if (!fs.existsSync(`${inDirFrontend}/${lang}.json`)) {
|
||||
fs.writeFileSync(`${inDirFrontend}/${lang}.json`, JSON.stringify({}));
|
||||
}
|
||||
if (!fs.existsSync(`${inDirBackend}/${lang}.json`)) {
|
||||
fs.writeFileSync(`${inDirBackend}/${lang}.json`, JSON.stringify({}));
|
||||
}
|
||||
});
|
||||
return Promise.resolve();
|
||||
});
|
||||
tasks.push(taskName);
|
||||
|
||||
taskName = "move-downloaded-translations";
|
||||
gulp.task(taskName, function () {
|
||||
return gulp.src(`${downloadDir}/*.json`).pipe(gulp.dest(inDirFrontend));
|
||||
return gulp.src(`${downloadDir}/*.json`).pipe(gulp.dest(inDir));
|
||||
});
|
||||
tasks.push(taskName);
|
||||
|
||||
@@ -86,7 +65,6 @@ gulp.task(
|
||||
gulp.series(
|
||||
"check-translations-html",
|
||||
"move-downloaded-translations",
|
||||
"check-all-files-exist",
|
||||
"clean-downloaded-translations"
|
||||
)
|
||||
);
|
||||
|
@@ -6,37 +6,31 @@ const fs = require("fs-extra");
|
||||
const path = require("path");
|
||||
const template = require("lodash.template");
|
||||
const minify = require("html-minifier").minify;
|
||||
const paths = require("../paths.js");
|
||||
const env = require("../env.js");
|
||||
const config = require("../paths.js");
|
||||
|
||||
const templatePath = (tpl) =>
|
||||
path.resolve(paths.polymer_dir, "src/html/", `${tpl}.html.template`);
|
||||
path.resolve(config.polymer_dir, "src/html/", `${tpl}.html.template`);
|
||||
|
||||
const readFile = (pth) => fs.readFileSync(pth).toString();
|
||||
|
||||
const renderTemplate = (pth, data = {}, pathFunc = templatePath) => {
|
||||
const compiled = template(readFile(pathFunc(pth)));
|
||||
return compiled({
|
||||
...data,
|
||||
useRollup: env.useRollup(),
|
||||
useWDS: env.useWDS(),
|
||||
renderTemplate,
|
||||
});
|
||||
return compiled({ ...data, renderTemplate });
|
||||
};
|
||||
|
||||
const renderDemoTemplate = (pth, data = {}) =>
|
||||
renderTemplate(pth, data, (tpl) =>
|
||||
path.resolve(paths.demo_dir, "src/html/", `${tpl}.html.template`)
|
||||
path.resolve(config.demo_dir, "src/html/", `${tpl}.html.template`)
|
||||
);
|
||||
|
||||
const renderCastTemplate = (pth, data = {}) =>
|
||||
renderTemplate(pth, data, (tpl) =>
|
||||
path.resolve(paths.cast_dir, "src/html/", `${tpl}.html.template`)
|
||||
path.resolve(config.cast_dir, "src/html/", `${tpl}.html.template`)
|
||||
);
|
||||
|
||||
const renderGalleryTemplate = (pth, data = {}) =>
|
||||
renderTemplate(pth, data, (tpl) =>
|
||||
path.resolve(paths.gallery_dir, "src/html/", `${tpl}.html.template`)
|
||||
path.resolve(config.gallery_dir, "src/html/", `${tpl}.html.template`)
|
||||
);
|
||||
|
||||
const minifyHtml = (content) =>
|
||||
@@ -53,37 +47,34 @@ gulp.task("gen-pages-dev", (done) => {
|
||||
for (const page of PAGES) {
|
||||
const content = renderTemplate(page, {
|
||||
latestPageJS: `/frontend_latest/${page}.js`,
|
||||
latestHassIconsJS: "/frontend_latest/hass-icons.js",
|
||||
|
||||
es5Compatibility: "/frontend_es5/compatibility.js",
|
||||
es5PageJS: `/frontend_es5/${page}.js`,
|
||||
es5HassIconsJS: "/frontend_es5/hass-icons.js",
|
||||
});
|
||||
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.app_output_root, `${page}.html`),
|
||||
content
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.root, `${page}.html`), content);
|
||||
}
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-pages-prod", (done) => {
|
||||
const latestManifest = require(path.resolve(
|
||||
paths.app_output_latest,
|
||||
"manifest.json"
|
||||
));
|
||||
const es5Manifest = require(path.resolve(
|
||||
paths.app_output_es5,
|
||||
"manifest.json"
|
||||
));
|
||||
const latestManifest = require(path.resolve(config.output, "manifest.json"));
|
||||
const es5Manifest = require(path.resolve(config.output_es5, "manifest.json"));
|
||||
|
||||
for (const page of PAGES) {
|
||||
const content = renderTemplate(page, {
|
||||
latestPageJS: latestManifest[`${page}.js`],
|
||||
latestHassIconsJS: latestManifest["hass-icons.js"],
|
||||
|
||||
es5Compatibility: es5Manifest["compatibility.js"],
|
||||
es5PageJS: es5Manifest[`${page}.js`],
|
||||
es5HassIconsJS: es5Manifest["hass-icons.js"],
|
||||
});
|
||||
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.app_output_root, `${page}.html`),
|
||||
path.resolve(config.root, `${page}.html`),
|
||||
minifyHtml(content)
|
||||
);
|
||||
}
|
||||
@@ -91,57 +82,43 @@ gulp.task("gen-pages-prod", (done) => {
|
||||
});
|
||||
|
||||
gulp.task("gen-index-app-dev", (done) => {
|
||||
let latestAppJS, latestCoreJS, latestCustomPanelJS;
|
||||
|
||||
if (env.useWDS()) {
|
||||
latestAppJS = "http://localhost:8000/src/entrypoints/app.ts";
|
||||
latestCoreJS = "http://localhost:8000/src/entrypoints/core.ts";
|
||||
latestCustomPanelJS =
|
||||
"http://localhost:8000/src/entrypoints/custom-panel.ts";
|
||||
} else {
|
||||
latestAppJS = "/frontend_latest/app.js";
|
||||
latestCoreJS = "/frontend_latest/core.js";
|
||||
latestCustomPanelJS = "/frontend_latest/custom-panel.js";
|
||||
}
|
||||
|
||||
// In dev mode we don't mangle names, so we hardcode urls. That way we can
|
||||
// run webpack as last in watch mode, which blocks output.
|
||||
const content = renderTemplate("index", {
|
||||
latestAppJS,
|
||||
latestCoreJS,
|
||||
latestCustomPanelJS,
|
||||
latestAppJS: "/frontend_latest/app.js",
|
||||
latestCoreJS: "/frontend_latest/core.js",
|
||||
latestCustomPanelJS: "/frontend_latest/custom-panel.js",
|
||||
latestHassIconsJS: "/frontend_latest/hass-icons.js",
|
||||
|
||||
es5Compatibility: "/frontend_es5/compatibility.js",
|
||||
es5AppJS: "/frontend_es5/app.js",
|
||||
es5CoreJS: "/frontend_es5/core.js",
|
||||
es5CustomPanelJS: "/frontend_es5/custom-panel.js",
|
||||
es5HassIconsJS: "/frontend_es5/hass-icons.js",
|
||||
}).replace(/#THEMEC/g, "{{ theme_color }}");
|
||||
|
||||
fs.outputFileSync(path.resolve(paths.app_output_root, "index.html"), content);
|
||||
fs.outputFileSync(path.resolve(config.root, "index.html"), content);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-index-app-prod", (done) => {
|
||||
const latestManifest = require(path.resolve(
|
||||
paths.app_output_latest,
|
||||
"manifest.json"
|
||||
));
|
||||
const es5Manifest = require(path.resolve(
|
||||
paths.app_output_es5,
|
||||
"manifest.json"
|
||||
));
|
||||
const latestManifest = require(path.resolve(config.output, "manifest.json"));
|
||||
const es5Manifest = require(path.resolve(config.output_es5, "manifest.json"));
|
||||
const content = renderTemplate("index", {
|
||||
latestAppJS: latestManifest["app.js"],
|
||||
latestCoreJS: latestManifest["core.js"],
|
||||
latestCustomPanelJS: latestManifest["custom-panel.js"],
|
||||
latestHassIconsJS: latestManifest["hass-icons.js"],
|
||||
|
||||
es5Compatibility: es5Manifest["compatibility.js"],
|
||||
es5AppJS: es5Manifest["app.js"],
|
||||
es5CoreJS: es5Manifest["core.js"],
|
||||
es5CustomPanelJS: es5Manifest["custom-panel.js"],
|
||||
es5HassIconsJS: es5Manifest["hass-icons.js"],
|
||||
});
|
||||
const minified = minifyHtml(content).replace(/#THEMEC/g, "{{ theme_color }}");
|
||||
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.app_output_root, "index.html"),
|
||||
minified
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.root, "index.html"), minified);
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -150,7 +127,7 @@ gulp.task("gen-index-cast-dev", (done) => {
|
||||
latestReceiverJS: "/frontend_latest/receiver.js",
|
||||
});
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.cast_output_root, "receiver.html"),
|
||||
path.resolve(config.cast_root, "receiver.html"),
|
||||
contentReceiver
|
||||
);
|
||||
|
||||
@@ -158,17 +135,14 @@ gulp.task("gen-index-cast-dev", (done) => {
|
||||
latestLauncherJS: "/frontend_latest/launcher.js",
|
||||
es5LauncherJS: "/frontend_es5/launcher.js",
|
||||
});
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.cast_output_root, "faq.html"),
|
||||
contentFAQ
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.cast_root, "faq.html"), contentFAQ);
|
||||
|
||||
const contentLauncher = renderCastTemplate("launcher", {
|
||||
latestLauncherJS: "/frontend_latest/launcher.js",
|
||||
es5LauncherJS: "/frontend_es5/launcher.js",
|
||||
});
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.cast_output_root, "index.html"),
|
||||
path.resolve(config.cast_root, "index.html"),
|
||||
contentLauncher
|
||||
);
|
||||
done();
|
||||
@@ -176,11 +150,11 @@ gulp.task("gen-index-cast-dev", (done) => {
|
||||
|
||||
gulp.task("gen-index-cast-prod", (done) => {
|
||||
const latestManifest = require(path.resolve(
|
||||
paths.cast_output_latest,
|
||||
config.cast_output,
|
||||
"manifest.json"
|
||||
));
|
||||
const es5Manifest = require(path.resolve(
|
||||
paths.cast_output_es5,
|
||||
config.cast_output_es5,
|
||||
"manifest.json"
|
||||
));
|
||||
|
||||
@@ -188,7 +162,7 @@ gulp.task("gen-index-cast-prod", (done) => {
|
||||
latestReceiverJS: latestManifest["receiver.js"],
|
||||
});
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.cast_output_root, "receiver.html"),
|
||||
path.resolve(config.cast_root, "receiver.html"),
|
||||
contentReceiver
|
||||
);
|
||||
|
||||
@@ -196,74 +170,68 @@ gulp.task("gen-index-cast-prod", (done) => {
|
||||
latestLauncherJS: latestManifest["launcher.js"],
|
||||
es5LauncherJS: es5Manifest["launcher.js"],
|
||||
});
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.cast_output_root, "faq.html"),
|
||||
contentFAQ
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.cast_root, "faq.html"), contentFAQ);
|
||||
|
||||
const contentLauncher = renderCastTemplate("launcher", {
|
||||
latestLauncherJS: latestManifest["launcher.js"],
|
||||
es5LauncherJS: es5Manifest["launcher.js"],
|
||||
});
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.cast_output_root, "index.html"),
|
||||
path.resolve(config.cast_root, "index.html"),
|
||||
contentLauncher
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-index-demo-dev", (done) => {
|
||||
// In dev mode we don't mangle names, so we hardcode urls. That way we can
|
||||
// run webpack as last in watch mode, which blocks output.
|
||||
const content = renderDemoTemplate("index", {
|
||||
latestDemoJS: "/frontend_latest/main.js",
|
||||
|
||||
es5Compatibility: "/frontend_es5/compatibility.js",
|
||||
es5DemoJS: "/frontend_es5/main.js",
|
||||
});
|
||||
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.demo_output_root, "index.html"),
|
||||
content
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.demo_root, "index.html"), content);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-index-demo-prod", (done) => {
|
||||
const latestManifest = require(path.resolve(
|
||||
paths.demo_output_latest,
|
||||
config.demo_output,
|
||||
"manifest.json"
|
||||
));
|
||||
const es5Manifest = require(path.resolve(
|
||||
paths.demo_output_es5,
|
||||
config.demo_output_es5,
|
||||
"manifest.json"
|
||||
));
|
||||
const content = renderDemoTemplate("index", {
|
||||
latestDemoJS: latestManifest["main.js"],
|
||||
|
||||
es5Compatibility: es5Manifest["compatibility.js"],
|
||||
es5DemoJS: es5Manifest["main.js"],
|
||||
});
|
||||
const minified = minifyHtml(content);
|
||||
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.demo_output_root, "index.html"),
|
||||
minified
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.demo_root, "index.html"), minified);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-index-gallery-dev", (done) => {
|
||||
// In dev mode we don't mangle names, so we hardcode urls. That way we can
|
||||
// run webpack as last in watch mode, which blocks output.
|
||||
const content = renderGalleryTemplate("index", {
|
||||
latestGalleryJS: "./frontend_latest/entrypoint.js",
|
||||
});
|
||||
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.gallery_output_root, "index.html"),
|
||||
content
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.gallery_root, "index.html"), content);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-index-gallery-prod", (done) => {
|
||||
const latestManifest = require(path.resolve(
|
||||
paths.gallery_output_latest,
|
||||
config.gallery_output,
|
||||
"manifest.json"
|
||||
));
|
||||
const content = renderGalleryTemplate("index", {
|
||||
@@ -271,48 +239,6 @@ gulp.task("gen-index-gallery-prod", (done) => {
|
||||
});
|
||||
const minified = minifyHtml(content);
|
||||
|
||||
fs.outputFileSync(
|
||||
path.resolve(paths.gallery_output_root, "index.html"),
|
||||
minified
|
||||
);
|
||||
fs.outputFileSync(path.resolve(config.gallery_root, "index.html"), minified);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-index-hassio-dev", async () => {
|
||||
writeHassioEntrypoint(
|
||||
`${paths.hassio_publicPath}/frontend_latest/entrypoint.js`,
|
||||
`${paths.hassio_publicPath}/frontend_es5/entrypoint.js`
|
||||
);
|
||||
});
|
||||
|
||||
gulp.task("gen-index-hassio-prod", async () => {
|
||||
const latestManifest = require(path.resolve(
|
||||
paths.hassio_output_latest,
|
||||
"manifest.json"
|
||||
));
|
||||
const es5Manifest = require(path.resolve(
|
||||
paths.hassio_output_es5,
|
||||
"manifest.json"
|
||||
));
|
||||
writeHassioEntrypoint(
|
||||
latestManifest["entrypoint.js"],
|
||||
es5Manifest["entrypoint.js"]
|
||||
);
|
||||
});
|
||||
|
||||
function writeHassioEntrypoint(latestEntrypoint, es5Entrypoint) {
|
||||
fs.mkdirSync(paths.hassio_output_root, { recursive: true });
|
||||
fs.writeFileSync(
|
||||
path.resolve(paths.hassio_output_root, "entrypoint.js"),
|
||||
`
|
||||
try {
|
||||
new Function("import('${latestEntrypoint}')")();
|
||||
} catch (err) {
|
||||
var el = document.createElement('script');
|
||||
el.src = '${es5Entrypoint}';
|
||||
document.body.appendChild(el);
|
||||
}
|
||||
`,
|
||||
{ encoding: "utf-8" }
|
||||
);
|
||||
}
|
||||
|
@@ -1,44 +1,13 @@
|
||||
// Run demo develop mode
|
||||
const gulp = require("gulp");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
const env = require("../env");
|
||||
const paths = require("../paths");
|
||||
|
||||
require("./clean.js");
|
||||
require("./translations.js");
|
||||
require("./gen-icons-json.js");
|
||||
require("./gen-icons.js");
|
||||
require("./gather-static.js");
|
||||
require("./webpack.js");
|
||||
require("./service-worker.js");
|
||||
require("./entry-html.js");
|
||||
require("./rollup.js");
|
||||
|
||||
gulp.task("gather-gallery-demos", async function gatherDemos() {
|
||||
const files = await fs.promises.readdir(
|
||||
path.resolve(paths.gallery_dir, "src/demos")
|
||||
);
|
||||
|
||||
let content = "export const DEMOS = {\n";
|
||||
|
||||
for (const file of files) {
|
||||
const demoId = path.basename(file, ".ts");
|
||||
const demoPath = "../src/demos/" + demoId;
|
||||
content += ` "${demoId}": () => import("${demoPath}"),\n`;
|
||||
}
|
||||
|
||||
content += "};";
|
||||
|
||||
const galleryBuild = path.resolve(paths.gallery_dir, "build");
|
||||
|
||||
fs.mkdirSync(galleryBuild, { recursive: true });
|
||||
fs.writeFileSync(
|
||||
path.resolve(galleryBuild, "import-demos.ts"),
|
||||
content,
|
||||
"utf-8"
|
||||
);
|
||||
});
|
||||
|
||||
gulp.task(
|
||||
"develop-gallery",
|
||||
@@ -48,14 +17,10 @@ gulp.task(
|
||||
},
|
||||
"clean-gallery",
|
||||
"translations-enable-merge-backend",
|
||||
gulp.parallel(
|
||||
"gen-icons-json",
|
||||
"build-translations",
|
||||
"gather-gallery-demos"
|
||||
),
|
||||
gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
|
||||
"copy-static-gallery",
|
||||
"gen-index-gallery-dev",
|
||||
env.useRollup() ? "rollup-dev-server-gallery" : "webpack-dev-server-gallery"
|
||||
"webpack-dev-server-gallery"
|
||||
)
|
||||
);
|
||||
|
||||
@@ -67,13 +32,9 @@ gulp.task(
|
||||
},
|
||||
"clean-gallery",
|
||||
"translations-enable-merge-backend",
|
||||
gulp.parallel(
|
||||
"gen-icons-json",
|
||||
"build-translations",
|
||||
"gather-gallery-demos"
|
||||
),
|
||||
gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
|
||||
"copy-static-gallery",
|
||||
env.useRollup() ? "rollup-prod-gallery" : "webpack-prod-gallery",
|
||||
"webpack-prod-gallery",
|
||||
"gen-index-gallery-prod"
|
||||
)
|
||||
);
|
||||
|
@@ -26,23 +26,14 @@ function copyTranslations(staticDir) {
|
||||
);
|
||||
}
|
||||
|
||||
function copyMdiIcons(staticDir) {
|
||||
const staticPath = genStaticPath(staticDir);
|
||||
|
||||
// MDI icons output
|
||||
fs.copySync(polyPath("build/mdi"), staticPath("mdi"));
|
||||
}
|
||||
|
||||
function copyPolyfills(staticDir) {
|
||||
const staticPath = genStaticPath(staticDir);
|
||||
|
||||
// For custom panels using ES5 builds that don't use Babel 7+
|
||||
// Web Component polyfills and adapters
|
||||
copyFileDir(
|
||||
npmPath("@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js"),
|
||||
staticPath("polyfills/")
|
||||
);
|
||||
|
||||
// Web Component polyfills and adapters
|
||||
copyFileDir(
|
||||
npmPath("@webcomponents/webcomponentsjs/webcomponents-bundle.js"),
|
||||
staticPath("polyfills/")
|
||||
@@ -53,12 +44,6 @@ function copyPolyfills(staticDir) {
|
||||
);
|
||||
}
|
||||
|
||||
function copyLoaderJS(staticDir) {
|
||||
const staticPath = genStaticPath(staticDir);
|
||||
copyFileDir(npmPath("systemjs/dist/s.min.js"), staticPath("js"));
|
||||
copyFileDir(npmPath("systemjs/dist/s.min.js.map"), staticPath("js"));
|
||||
}
|
||||
|
||||
function copyFonts(staticDir) {
|
||||
const staticPath = genStaticPath(staticDir);
|
||||
// Local fonts
|
||||
@@ -80,68 +65,67 @@ function copyMapPanel(staticDir) {
|
||||
);
|
||||
}
|
||||
|
||||
gulp.task("copy-translations-app", async () => {
|
||||
const staticDir = paths.app_output_static;
|
||||
gulp.task("copy-translations", (done) => {
|
||||
const staticDir = paths.static;
|
||||
copyTranslations(staticDir);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("copy-static-app", async () => {
|
||||
const staticDir = paths.app_output_static;
|
||||
gulp.task("copy-static", (done) => {
|
||||
const staticDir = paths.static;
|
||||
const staticPath = genStaticPath(paths.static);
|
||||
// Basic static files
|
||||
fs.copySync(polyPath("public"), paths.app_output_root);
|
||||
fs.copySync(polyPath("public"), paths.root);
|
||||
|
||||
copyLoaderJS(staticDir);
|
||||
copyPolyfills(staticDir);
|
||||
copyFonts(staticDir);
|
||||
copyTranslations(staticDir);
|
||||
copyMdiIcons(staticDir);
|
||||
|
||||
// Panel assets
|
||||
copyFileDir(
|
||||
npmPath("react-big-calendar/lib/css/react-big-calendar.css"),
|
||||
staticPath("panels/calendar/")
|
||||
);
|
||||
copyMapPanel(staticDir);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("copy-static-demo", async () => {
|
||||
gulp.task("copy-static-demo", (done) => {
|
||||
// Copy app static files
|
||||
fs.copySync(
|
||||
polyPath("public/static"),
|
||||
path.resolve(paths.demo_output_root, "static")
|
||||
path.resolve(paths.demo_root, "static")
|
||||
);
|
||||
// Copy demo static files
|
||||
fs.copySync(path.resolve(paths.demo_dir, "public"), paths.demo_output_root);
|
||||
fs.copySync(path.resolve(paths.demo_dir, "public"), paths.demo_root);
|
||||
|
||||
copyLoaderJS(paths.demo_output_static);
|
||||
copyPolyfills(paths.demo_output_static);
|
||||
copyMapPanel(paths.demo_output_static);
|
||||
copyFonts(paths.demo_output_static);
|
||||
copyTranslations(paths.demo_output_static);
|
||||
copyMdiIcons(paths.demo_output_static);
|
||||
copyPolyfills(paths.demo_static);
|
||||
copyMapPanel(paths.demo_static);
|
||||
copyFonts(paths.demo_static);
|
||||
copyTranslations(paths.demo_static);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("copy-static-cast", async () => {
|
||||
gulp.task("copy-static-cast", (done) => {
|
||||
// Copy app static files
|
||||
fs.copySync(polyPath("public/static"), paths.cast_output_static);
|
||||
fs.copySync(polyPath("public/static"), paths.cast_static);
|
||||
// Copy cast static files
|
||||
fs.copySync(path.resolve(paths.cast_dir, "public"), paths.cast_output_root);
|
||||
fs.copySync(path.resolve(paths.cast_dir, "public"), paths.cast_root);
|
||||
|
||||
copyLoaderJS(paths.cast_output_static);
|
||||
copyPolyfills(paths.cast_output_static);
|
||||
copyMapPanel(paths.cast_output_static);
|
||||
copyFonts(paths.cast_output_static);
|
||||
copyTranslations(paths.cast_output_static);
|
||||
copyMdiIcons(paths.cast_output_static);
|
||||
copyMapPanel(paths.cast_static);
|
||||
copyFonts(paths.cast_static);
|
||||
copyTranslations(paths.cast_static);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("copy-static-gallery", async () => {
|
||||
gulp.task("copy-static-gallery", (done) => {
|
||||
// Copy app static files
|
||||
fs.copySync(polyPath("public/static"), paths.gallery_output_static);
|
||||
fs.copySync(polyPath("public/static"), paths.gallery_static);
|
||||
// Copy gallery static files
|
||||
fs.copySync(
|
||||
path.resolve(paths.gallery_dir, "public"),
|
||||
paths.gallery_output_root
|
||||
);
|
||||
fs.copySync(path.resolve(paths.gallery_dir, "public"), paths.gallery_root);
|
||||
|
||||
copyMapPanel(paths.gallery_output_static);
|
||||
copyFonts(paths.gallery_output_static);
|
||||
copyTranslations(paths.gallery_output_static);
|
||||
copyMdiIcons(paths.gallery_output_static);
|
||||
copyMapPanel(paths.gallery_static);
|
||||
copyFonts(paths.gallery_static);
|
||||
copyTranslations(paths.gallery_static);
|
||||
done();
|
||||
});
|
||||
|
@@ -1,120 +0,0 @@
|
||||
const gulp = require("gulp");
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const hash = require("object-hash");
|
||||
|
||||
const ICON_PACKAGE_PATH = path.resolve(
|
||||
__dirname,
|
||||
"../../node_modules/@mdi/svg/"
|
||||
);
|
||||
const META_PATH = path.resolve(ICON_PACKAGE_PATH, "meta.json");
|
||||
const PACKAGE_PATH = path.resolve(ICON_PACKAGE_PATH, "package.json");
|
||||
const ICON_PATH = path.resolve(ICON_PACKAGE_PATH, "svg");
|
||||
const OUTPUT_DIR = path.resolve(__dirname, "../../build/mdi");
|
||||
const REMOVED_ICONS_PATH = path.resolve(__dirname, "../removedIcons.json");
|
||||
|
||||
const encoding = "utf8";
|
||||
|
||||
const getMeta = () => {
|
||||
const file = fs.readFileSync(META_PATH, { encoding });
|
||||
const meta = JSON.parse(file);
|
||||
return meta.map((icon) => {
|
||||
const svg = fs.readFileSync(`${ICON_PATH}/${icon.name}.svg`, {
|
||||
encoding,
|
||||
});
|
||||
return { path: svg.match(/ d="([^"]+)"/)[1], name: icon.name };
|
||||
});
|
||||
};
|
||||
|
||||
const addRemovedMeta = (meta) => {
|
||||
const file = fs.readFileSync(REMOVED_ICONS_PATH, { encoding });
|
||||
const removed = JSON.parse(file);
|
||||
const combinedMeta = [...meta, ...removed];
|
||||
return combinedMeta.sort((a, b) => a.name.localeCompare(b.name));
|
||||
};
|
||||
|
||||
const splitBySize = (meta) => {
|
||||
const chunks = [];
|
||||
const CHUNK_SIZE = 50000;
|
||||
|
||||
let curSize = 0;
|
||||
let startKey;
|
||||
let icons = [];
|
||||
|
||||
Object.values(meta).forEach((icon) => {
|
||||
if (startKey === undefined) {
|
||||
startKey = icon.name;
|
||||
}
|
||||
curSize += icon.path.length;
|
||||
icons.push(icon);
|
||||
if (curSize > CHUNK_SIZE) {
|
||||
chunks.push({
|
||||
startKey,
|
||||
endKey: icon.name,
|
||||
icons,
|
||||
});
|
||||
curSize = 0;
|
||||
startKey = undefined;
|
||||
icons = [];
|
||||
}
|
||||
});
|
||||
|
||||
chunks.push({
|
||||
startKey,
|
||||
icons,
|
||||
});
|
||||
|
||||
return chunks;
|
||||
};
|
||||
|
||||
const findDifferentiator = (curString, prevString) => {
|
||||
for (let i = 0; i < curString.length; i++) {
|
||||
if (curString[i] !== prevString[i]) {
|
||||
return curString.substring(0, i + 1);
|
||||
}
|
||||
}
|
||||
throw new Error("Cannot find differentiator", curString, prevString);
|
||||
};
|
||||
|
||||
gulp.task("gen-icons-json", (done) => {
|
||||
const meta = addRemovedMeta(getMeta());
|
||||
const split = splitBySize(meta);
|
||||
|
||||
if (!fs.existsSync(OUTPUT_DIR)) {
|
||||
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
||||
}
|
||||
const parts = [];
|
||||
|
||||
let lastEnd;
|
||||
split.forEach((chunk) => {
|
||||
let startKey;
|
||||
if (lastEnd === undefined) {
|
||||
chunk.startKey = undefined;
|
||||
startKey = undefined;
|
||||
} else {
|
||||
startKey = findDifferentiator(chunk.startKey, lastEnd);
|
||||
}
|
||||
lastEnd = chunk.endKey;
|
||||
|
||||
const output = {};
|
||||
chunk.icons.forEach((icon) => {
|
||||
output[icon.name] = icon.path;
|
||||
});
|
||||
const filename = hash(output);
|
||||
parts.push({ start: startKey, file: filename });
|
||||
fs.writeFileSync(
|
||||
path.resolve(OUTPUT_DIR, `${filename}.json`),
|
||||
JSON.stringify(output)
|
||||
);
|
||||
});
|
||||
|
||||
const file = fs.readFileSync(PACKAGE_PATH, { encoding });
|
||||
const package = JSON.parse(file);
|
||||
|
||||
fs.writeFileSync(
|
||||
path.resolve(OUTPUT_DIR, "iconMetadata.json"),
|
||||
JSON.stringify({ version: package.version, parts })
|
||||
);
|
||||
|
||||
done();
|
||||
});
|
127
build-scripts/gulp/gen-icons.js
Normal file
127
build-scripts/gulp/gen-icons.js
Normal file
@@ -0,0 +1,127 @@
|
||||
const gulp = require("gulp");
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const paths = require("../paths");
|
||||
const { mapFiles } = require("../util");
|
||||
|
||||
const ICON_PACKAGE_PATH = path.resolve(
|
||||
__dirname,
|
||||
"../../node_modules/@mdi/svg/"
|
||||
);
|
||||
const META_PATH = path.resolve(ICON_PACKAGE_PATH, "meta.json");
|
||||
const ICON_PATH = path.resolve(ICON_PACKAGE_PATH, "svg");
|
||||
const OUTPUT_DIR = path.resolve(__dirname, "../../build");
|
||||
const MDI_OUTPUT_PATH = path.resolve(OUTPUT_DIR, "mdi.html");
|
||||
const HASS_OUTPUT_PATH = path.resolve(OUTPUT_DIR, "hass-icons.html");
|
||||
|
||||
const BUILT_IN_PANEL_ICONS = [
|
||||
"calendar", // Calendar
|
||||
"settings", // Config
|
||||
"home-assistant", // Hass.io
|
||||
"poll-box", // History panel
|
||||
"format-list-bulleted-type", // Logbook
|
||||
"mailbox", // Mailbox
|
||||
"tooltip-account", // Map
|
||||
"cart", // Shopping List
|
||||
"hammer", // developer-tools
|
||||
];
|
||||
|
||||
// Given an icon name, load the SVG file
|
||||
function loadIcon(name) {
|
||||
const iconPath = path.resolve(ICON_PATH, `${name}.svg`);
|
||||
try {
|
||||
return fs.readFileSync(iconPath, "utf-8");
|
||||
} catch (err) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Given an SVG file, convert it to an iron-iconset-svg definition
|
||||
function transformXMLtoPolymer(name, xml) {
|
||||
const start = xml.indexOf("><path") + 1;
|
||||
const end = xml.length - start - 6;
|
||||
const pth = xml.substr(start, end);
|
||||
return `<g id="${name}">${pth}</g>`;
|
||||
}
|
||||
|
||||
// Given an iconset name and icon names, generate a polymer iconset
|
||||
function generateIconset(iconsetName, iconNames) {
|
||||
const iconDefs = Array.from(iconNames)
|
||||
.map((name) => {
|
||||
const iconDef = loadIcon(name);
|
||||
if (!iconDef) {
|
||||
throw new Error(`Unknown icon referenced: ${name}`);
|
||||
}
|
||||
return transformXMLtoPolymer(name, iconDef);
|
||||
})
|
||||
.join("");
|
||||
return `<ha-iconset-svg name="${iconsetName}" size="24"><svg><defs>${iconDefs}</defs></svg></ha-iconset-svg>`;
|
||||
}
|
||||
|
||||
// Find all icons used by the project.
|
||||
function findIcons(searchPath, iconsetName) {
|
||||
const iconRegex = new RegExp(`${iconsetName}:[\\w-]+`, "g");
|
||||
const icons = new Set();
|
||||
function processFile(filename) {
|
||||
const content = fs.readFileSync(filename);
|
||||
let match;
|
||||
// eslint-disable-next-line
|
||||
while ((match = iconRegex.exec(content))) {
|
||||
// strip off "hass:" and add to set
|
||||
icons.add(match[0].substr(iconsetName.length + 1));
|
||||
}
|
||||
}
|
||||
mapFiles(searchPath, ".js", processFile);
|
||||
mapFiles(searchPath, ".ts", processFile);
|
||||
return icons;
|
||||
}
|
||||
|
||||
gulp.task("gen-icons-mdi", (done) => {
|
||||
const meta = JSON.parse(
|
||||
fs.readFileSync(path.resolve(ICON_PACKAGE_PATH, META_PATH), "UTF-8")
|
||||
);
|
||||
const iconNames = meta.map((iconInfo) => iconInfo.name);
|
||||
if (!fs.existsSync(OUTPUT_DIR)) {
|
||||
fs.mkdirSync(OUTPUT_DIR);
|
||||
}
|
||||
fs.writeFileSync(MDI_OUTPUT_PATH, generateIconset("mdi", iconNames));
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-icons-app", (done) => {
|
||||
const iconNames = findIcons("./src", "hass");
|
||||
BUILT_IN_PANEL_ICONS.forEach((name) => iconNames.add(name));
|
||||
if (!fs.existsSync(OUTPUT_DIR)) {
|
||||
fs.mkdirSync(OUTPUT_DIR);
|
||||
}
|
||||
fs.writeFileSync(HASS_OUTPUT_PATH, generateIconset("hass", iconNames));
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-icons-demo", (done) => {
|
||||
const iconNames = findIcons(path.resolve(paths.demo_dir, "./src"), "hademo");
|
||||
fs.writeFileSync(
|
||||
path.resolve(paths.demo_dir, "hademo-icons.html"),
|
||||
generateIconset("hademo", iconNames)
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-icons-hassio", (done) => {
|
||||
const iconNames = findIcons(
|
||||
path.resolve(paths.hassio_dir, "./src"),
|
||||
"hassio"
|
||||
);
|
||||
// Find hassio icons inside HA main repo.
|
||||
for (const item of findIcons(
|
||||
path.resolve(paths.polymer_dir, "./src"),
|
||||
"hassio"
|
||||
)) {
|
||||
iconNames.add(item);
|
||||
}
|
||||
fs.writeFileSync(
|
||||
path.resolve(paths.hassio_dir, "hassio-icons.html"),
|
||||
generateIconset("hassio", iconNames)
|
||||
);
|
||||
done();
|
||||
});
|
@@ -1,15 +1,11 @@
|
||||
const gulp = require("gulp");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
const env = require("../env");
|
||||
const paths = require("../paths");
|
||||
const envVars = require("../env");
|
||||
|
||||
require("./clean.js");
|
||||
require("./gen-icons-json.js");
|
||||
require("./gen-icons.js");
|
||||
require("./webpack.js");
|
||||
require("./compress.js");
|
||||
require("./rollup.js");
|
||||
|
||||
gulp.task(
|
||||
"develop-hassio",
|
||||
@@ -18,9 +14,8 @@ gulp.task(
|
||||
process.env.NODE_ENV = "development";
|
||||
},
|
||||
"clean-hassio",
|
||||
"gen-icons-json",
|
||||
"gen-index-hassio-dev",
|
||||
env.useRollup() ? "rollup-watch-hassio" : "webpack-watch-hassio"
|
||||
gulp.parallel("gen-icons-hassio", "gen-icons-mdi"),
|
||||
"webpack-watch-hassio"
|
||||
)
|
||||
);
|
||||
|
||||
@@ -31,10 +26,9 @@ gulp.task(
|
||||
process.env.NODE_ENV = "production";
|
||||
},
|
||||
"clean-hassio",
|
||||
"gen-icons-json",
|
||||
env.useRollup() ? "rollup-prod-hassio" : "webpack-prod-hassio",
|
||||
"gen-index-hassio-prod",
|
||||
gulp.parallel("gen-icons-hassio", "gen-icons-mdi"),
|
||||
"webpack-prod-hassio",
|
||||
...// Don't compress running tests
|
||||
(env.isTest() ? [] : ["compress-hassio"])
|
||||
(envVars.isTravis() ? [] : ["compress-hassio"])
|
||||
)
|
||||
);
|
||||
|
@@ -1,146 +0,0 @@
|
||||
// Tasks to run Rollup
|
||||
const path = require("path");
|
||||
const gulp = require("gulp");
|
||||
const rollup = require("rollup");
|
||||
const handler = require("serve-handler");
|
||||
const http = require("http");
|
||||
const log = require("fancy-log");
|
||||
const rollupConfig = require("../rollup");
|
||||
const paths = require("../paths");
|
||||
const open = require("open");
|
||||
|
||||
const bothBuilds = (createConfigFunc, params) =>
|
||||
gulp.series(
|
||||
async function buildLatest() {
|
||||
await buildRollup(
|
||||
createConfigFunc({
|
||||
...params,
|
||||
latestBuild: true,
|
||||
})
|
||||
);
|
||||
},
|
||||
async function buildES5() {
|
||||
await buildRollup(
|
||||
createConfigFunc({
|
||||
...params,
|
||||
latestBuild: false,
|
||||
})
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
function createServer(serveOptions) {
|
||||
const server = http.createServer((request, response) => {
|
||||
return handler(request, response, {
|
||||
public: serveOptions.root,
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(
|
||||
serveOptions.port,
|
||||
serveOptions.networkAccess ? "0.0.0.0" : undefined,
|
||||
() => {
|
||||
log.info(`Available at http://localhost:${serveOptions.port}`);
|
||||
open(`http://localhost:${serveOptions.port}`);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function watchRollup(createConfig, extraWatchSrc = [], serveOptions) {
|
||||
const { inputOptions, outputOptions } = createConfig({
|
||||
isProdBuild: false,
|
||||
latestBuild: true,
|
||||
});
|
||||
|
||||
const watcher = rollup.watch({
|
||||
...inputOptions,
|
||||
output: [outputOptions],
|
||||
watch: {
|
||||
include: ["src/**"] + extraWatchSrc,
|
||||
},
|
||||
});
|
||||
|
||||
let startedHttp = false;
|
||||
|
||||
watcher.on("event", (event) => {
|
||||
if (event.code === "BUNDLE_END") {
|
||||
log(`Build done @ ${new Date().toLocaleTimeString()}`);
|
||||
} else if (event.code === "ERROR") {
|
||||
log.error(event.error);
|
||||
} else if (event.code === "END") {
|
||||
if (startedHttp || !serveOptions) {
|
||||
return;
|
||||
}
|
||||
startedHttp = true;
|
||||
createServer(serveOptions);
|
||||
}
|
||||
});
|
||||
|
||||
gulp.watch(
|
||||
path.join(paths.translations_src, "en.json"),
|
||||
gulp.series("build-translations", "copy-translations-app")
|
||||
);
|
||||
}
|
||||
|
||||
async function buildRollup(config) {
|
||||
const bundle = await rollup.rollup(config.inputOptions);
|
||||
await bundle.write(config.outputOptions);
|
||||
}
|
||||
|
||||
gulp.task("rollup-watch-app", () => {
|
||||
watchRollup(rollupConfig.createAppConfig);
|
||||
});
|
||||
|
||||
gulp.task("rollup-watch-hassio", () => {
|
||||
watchRollup(rollupConfig.createHassioConfig, ["hassio/src/**"]);
|
||||
});
|
||||
|
||||
gulp.task("rollup-dev-server-demo", () => {
|
||||
watchRollup(rollupConfig.createDemoConfig, ["demo/src/**"], {
|
||||
root: paths.demo_output_root,
|
||||
port: 8090,
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task("rollup-dev-server-cast", () => {
|
||||
watchRollup(rollupConfig.createCastConfig, ["cast/src/**"], {
|
||||
root: paths.cast_output_root,
|
||||
port: 8080,
|
||||
networkAccess: true,
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task("rollup-dev-server-gallery", () => {
|
||||
watchRollup(rollupConfig.createGalleryConfig, ["gallery/src/**"], {
|
||||
root: paths.gallery_output_root,
|
||||
port: 8100,
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task(
|
||||
"rollup-prod-app",
|
||||
bothBuilds(rollupConfig.createAppConfig, { isProdBuild: true })
|
||||
);
|
||||
|
||||
gulp.task(
|
||||
"rollup-prod-demo",
|
||||
bothBuilds(rollupConfig.createDemoConfig, { isProdBuild: true })
|
||||
);
|
||||
|
||||
gulp.task(
|
||||
"rollup-prod-cast",
|
||||
bothBuilds(rollupConfig.createCastConfig, { isProdBuild: true })
|
||||
);
|
||||
|
||||
gulp.task("rollup-prod-hassio", () =>
|
||||
bothBuilds(rollupConfig.createHassioConfig, { isProdBuild: true })
|
||||
);
|
||||
|
||||
gulp.task("rollup-prod-gallery", () =>
|
||||
buildRollup(
|
||||
rollupConfig.createGalleryConfig({
|
||||
isProdBuild: true,
|
||||
latestBuild: true,
|
||||
})
|
||||
)
|
||||
);
|
@@ -5,22 +5,18 @@
|
||||
const gulp = require("gulp");
|
||||
const path = require("path");
|
||||
const fs = require("fs-extra");
|
||||
const workboxBuild = require("workbox-build");
|
||||
const sourceMapUrl = require("source-map-url");
|
||||
const paths = require("../paths.js");
|
||||
const config = require("../paths.js");
|
||||
|
||||
const swDest = path.resolve(paths.app_output_root, "service_worker.js");
|
||||
const swPath = path.resolve(config.root, "service_worker.js");
|
||||
|
||||
const writeSW = (content) => fs.outputFileSync(swDest, content.trim() + "\n");
|
||||
const writeSW = (content) => fs.outputFileSync(swPath, content.trim() + "\n");
|
||||
|
||||
gulp.task("gen-service-worker-app-dev", (done) => {
|
||||
gulp.task("gen-service-worker-dev", (done) => {
|
||||
writeSW(
|
||||
`
|
||||
console.debug('Service worker disabled in development');
|
||||
|
||||
self.addEventListener('install', (event) => {
|
||||
// This will activate the dev service worker,
|
||||
// removing any prod service worker the dev might have running
|
||||
self.skipWaiting();
|
||||
});
|
||||
`
|
||||
@@ -28,69 +24,10 @@ self.addEventListener('install', (event) => {
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-service-worker-app-prod", async () => {
|
||||
// Read bundled source file
|
||||
const bundleManifestLatest = require(path.resolve(
|
||||
paths.app_output_latest,
|
||||
"manifest.json"
|
||||
));
|
||||
let serviceWorkerContent = fs.readFileSync(
|
||||
paths.app_output_root + bundleManifestLatest["service_worker.js"],
|
||||
"utf-8"
|
||||
gulp.task("gen-service-worker-prod", (done) => {
|
||||
fs.copySync(
|
||||
path.resolve(config.output, "service_worker.js"),
|
||||
path.resolve(config.root, "service_worker.js")
|
||||
);
|
||||
|
||||
// Delete old file from frontend_latest so manifest won't pick it up
|
||||
fs.removeSync(
|
||||
paths.app_output_root + bundleManifestLatest["service_worker.js"]
|
||||
);
|
||||
fs.removeSync(
|
||||
paths.app_output_root + bundleManifestLatest["service_worker.js.map"]
|
||||
);
|
||||
|
||||
// Remove ES5
|
||||
const bundleManifestES5 = require(path.resolve(
|
||||
paths.app_output_es5,
|
||||
"manifest.json"
|
||||
));
|
||||
fs.removeSync(paths.app_output_root + bundleManifestES5["service_worker.js"]);
|
||||
fs.removeSync(
|
||||
paths.app_output_root + bundleManifestES5["service_worker.js.map"]
|
||||
);
|
||||
|
||||
const workboxManifest = await workboxBuild.getManifest({
|
||||
// Files that mach this pattern will be considered unique and skip revision check
|
||||
// ignore JS files + translation files
|
||||
dontCacheBustURLsMatching: /(frontend_latest\/.+|static\/translations\/.+)/,
|
||||
|
||||
globDirectory: paths.app_output_root,
|
||||
globPatterns: [
|
||||
"frontend_latest/*.js",
|
||||
// Cache all English translations because we catch them as fallback
|
||||
// Using pattern to match hash instead of * to avoid caching en-GB
|
||||
// 'v' added as valid hash letter because in dev we hash with 'dev'
|
||||
"static/translations/**/en-+([a-fv0-9]).json",
|
||||
// Icon shown on splash screen
|
||||
"static/icons/favicon-192x192.png",
|
||||
"static/icons/favicon.ico",
|
||||
// Common fonts
|
||||
"static/fonts/roboto/Roboto-Light.woff2",
|
||||
"static/fonts/roboto/Roboto-Medium.woff2",
|
||||
"static/fonts/roboto/Roboto-Regular.woff2",
|
||||
"static/fonts/roboto/Roboto-Bold.woff2",
|
||||
],
|
||||
});
|
||||
|
||||
for (const warning of workboxManifest.warnings) {
|
||||
console.warn(warning);
|
||||
}
|
||||
|
||||
// remove source map and add WB manifest
|
||||
serviceWorkerContent = sourceMapUrl.removeFrom(serviceWorkerContent);
|
||||
serviceWorkerContent = serviceWorkerContent.replace(
|
||||
"WB_MANIFEST",
|
||||
JSON.stringify(workboxManifest.manifestEntries)
|
||||
);
|
||||
|
||||
// Write new file to root
|
||||
fs.writeFileSync(swDest, serviceWorkerContent);
|
||||
done();
|
||||
});
|
||||
|
@@ -7,6 +7,7 @@ const gulp = require("gulp");
|
||||
const fs = require("fs");
|
||||
const foreach = require("gulp-foreach");
|
||||
const merge = require("gulp-merge-json");
|
||||
const minify = require("gulp-jsonminify");
|
||||
const rename = require("gulp-rename");
|
||||
const transform = require("gulp-json-transform");
|
||||
const { mapFiles } = require("../util");
|
||||
@@ -33,10 +34,21 @@ String.prototype.rsplit = function (sep, maxsplit) {
|
||||
: split;
|
||||
};
|
||||
|
||||
// Panel translations which should be split from the core translations.
|
||||
const TRANSLATION_FRAGMENTS = Object.keys(
|
||||
require("../../src/translations/en.json").ui.panel
|
||||
);
|
||||
// Panel translations which should be split from the core translations. These
|
||||
// should mirror the fragment definitions in polymer.json, so that we load
|
||||
// additional resources at equivalent points.
|
||||
const TRANSLATION_FRAGMENTS = [
|
||||
"config",
|
||||
"history",
|
||||
"logbook",
|
||||
"mailbox",
|
||||
"profile",
|
||||
"shopping-list",
|
||||
"page-authorize",
|
||||
"page-demo",
|
||||
"page-onboarding",
|
||||
"developer-tools",
|
||||
];
|
||||
|
||||
function recursiveFlatten(prefix, data) {
|
||||
let output = {};
|
||||
@@ -263,6 +275,25 @@ gulp.task(taskName, function () {
|
||||
.src(fullDir + "/*.json")
|
||||
.pipe(
|
||||
transform((data, file) => {
|
||||
// HACK to pull in old state translations for cast
|
||||
if (process.env.IS_CAST) {
|
||||
const legacyTranslationsPath = path.join(
|
||||
"cast/src/translations",
|
||||
file.relative
|
||||
);
|
||||
if (fs.existsSync(legacyTranslationsPath)) {
|
||||
const legacyStrings = JSON.parse(
|
||||
fs.readFileSync(legacyTranslationsPath, "utf-8")
|
||||
);
|
||||
// These 2 translations still exist today.
|
||||
if (legacyStrings.state && "default" in legacyStrings.state) {
|
||||
legacyStrings.default.unknown = data.state.default.unknown;
|
||||
legacyStrings.default.unavailable =
|
||||
data.state.default.unavailable;
|
||||
}
|
||||
data.state = legacyStrings.state;
|
||||
}
|
||||
}
|
||||
TRANSLATION_FRAGMENTS.forEach((fragment) => {
|
||||
delete data.ui.panel[fragment];
|
||||
});
|
||||
@@ -289,6 +320,7 @@ gulp.task("build-flattened-translations", function () {
|
||||
return flatten(data);
|
||||
})
|
||||
)
|
||||
.pipe(minify())
|
||||
.pipe(
|
||||
rename((filePath) => {
|
||||
if (filePath.dirname === "core") {
|
||||
|
@@ -1,11 +0,0 @@
|
||||
// Tasks to run Rollup
|
||||
const gulp = require("gulp");
|
||||
const { startDevServer } = require("@web/dev-server");
|
||||
|
||||
gulp.task("wds-watch-app", () => {
|
||||
startDevServer({
|
||||
config: {
|
||||
watch: true,
|
||||
},
|
||||
});
|
||||
});
|
@@ -18,14 +18,6 @@ const bothBuilds = (createConfigFunc, params) => [
|
||||
createConfigFunc({ ...params, latestBuild: false }),
|
||||
];
|
||||
|
||||
/**
|
||||
* @param {{
|
||||
* compiler: import("webpack").Compiler,
|
||||
* contentBase: string,
|
||||
* port: number,
|
||||
* listenHost?: string
|
||||
* }}
|
||||
*/
|
||||
const runDevServer = ({
|
||||
compiler,
|
||||
contentBase,
|
||||
@@ -41,127 +33,141 @@ const runDevServer = ({
|
||||
throw err;
|
||||
}
|
||||
// Server listening
|
||||
log(
|
||||
"[webpack-dev-server]",
|
||||
`Project is running at http://localhost:${port}`
|
||||
);
|
||||
log("[webpack-dev-server]", `http://localhost:${port}`);
|
||||
});
|
||||
|
||||
const doneHandler = (done) => (err, stats) => {
|
||||
const handler = (done) => (err, stats) => {
|
||||
if (err) {
|
||||
log.error(err.stack || err);
|
||||
console.log(err.stack || err);
|
||||
if (err.details) {
|
||||
log.error(err.details);
|
||||
console.log(err.details);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
log(`Build done @ ${new Date().toLocaleTimeString()}`);
|
||||
|
||||
if (stats.hasErrors() || stats.hasWarnings()) {
|
||||
console.log(stats.toString("minimal"));
|
||||
}
|
||||
|
||||
log(`Build done @ ${new Date().toLocaleTimeString()}`);
|
||||
|
||||
if (done) {
|
||||
done();
|
||||
}
|
||||
};
|
||||
|
||||
const prodBuild = (conf) =>
|
||||
new Promise((resolve) => {
|
||||
webpack(
|
||||
conf,
|
||||
// Resolve promise when done. Because we pass a callback, webpack closes itself
|
||||
doneHandler(resolve)
|
||||
);
|
||||
});
|
||||
|
||||
gulp.task("webpack-watch-app", () => {
|
||||
// This command will run forever because we don't close compiler
|
||||
// we are not calling done, so this command will run forever
|
||||
webpack(createAppConfig({ isProdBuild: false, latestBuild: true })).watch(
|
||||
{ ignored: /build-translations/ },
|
||||
doneHandler()
|
||||
handler()
|
||||
);
|
||||
gulp.watch(
|
||||
path.join(paths.translations_src, "en.json"),
|
||||
gulp.series("build-translations", "copy-translations-app")
|
||||
gulp.series("build-translations", "copy-translations")
|
||||
);
|
||||
});
|
||||
|
||||
gulp.task("webpack-prod-app", () =>
|
||||
prodBuild(
|
||||
bothBuilds(createAppConfig, {
|
||||
isProdBuild: true,
|
||||
})
|
||||
)
|
||||
gulp.task(
|
||||
"webpack-prod-app",
|
||||
() =>
|
||||
new Promise((resolve) =>
|
||||
webpack(
|
||||
bothBuilds(createAppConfig, { isProdBuild: true }),
|
||||
handler(resolve)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
gulp.task("webpack-dev-server-demo", () => {
|
||||
runDevServer({
|
||||
compiler: webpack(bothBuilds(createDemoConfig, { isProdBuild: false })),
|
||||
contentBase: paths.demo_output_root,
|
||||
contentBase: paths.demo_root,
|
||||
port: 8090,
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task("webpack-prod-demo", () =>
|
||||
prodBuild(
|
||||
bothBuilds(createDemoConfig, {
|
||||
isProdBuild: true,
|
||||
})
|
||||
)
|
||||
gulp.task(
|
||||
"webpack-prod-demo",
|
||||
() =>
|
||||
new Promise((resolve) =>
|
||||
webpack(
|
||||
bothBuilds(createDemoConfig, {
|
||||
isProdBuild: true,
|
||||
}),
|
||||
handler(resolve)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
gulp.task("webpack-dev-server-cast", () => {
|
||||
runDevServer({
|
||||
compiler: webpack(bothBuilds(createCastConfig, { isProdBuild: false })),
|
||||
contentBase: paths.cast_output_root,
|
||||
contentBase: paths.cast_root,
|
||||
port: 8080,
|
||||
// Accessible from the network, because that's how Cast hits it.
|
||||
listenHost: "0.0.0.0",
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task("webpack-prod-cast", () =>
|
||||
prodBuild(
|
||||
bothBuilds(createCastConfig, {
|
||||
isProdBuild: true,
|
||||
})
|
||||
)
|
||||
gulp.task(
|
||||
"webpack-prod-cast",
|
||||
() =>
|
||||
new Promise((resolve) =>
|
||||
webpack(
|
||||
bothBuilds(createCastConfig, {
|
||||
isProdBuild: true,
|
||||
}),
|
||||
|
||||
handler(resolve)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
gulp.task("webpack-watch-hassio", () => {
|
||||
// This command will run forever because we don't close compiler
|
||||
// we are not calling done, so this command will run forever
|
||||
webpack(
|
||||
createHassioConfig({
|
||||
isProdBuild: false,
|
||||
latestBuild: true,
|
||||
latestBuild: false,
|
||||
})
|
||||
).watch({}, doneHandler());
|
||||
).watch({}, handler());
|
||||
});
|
||||
|
||||
gulp.task("webpack-prod-hassio", () =>
|
||||
prodBuild(
|
||||
bothBuilds(createHassioConfig, {
|
||||
isProdBuild: true,
|
||||
})
|
||||
)
|
||||
gulp.task(
|
||||
"webpack-prod-hassio",
|
||||
() =>
|
||||
new Promise((resolve) =>
|
||||
webpack(
|
||||
createHassioConfig({
|
||||
isProdBuild: true,
|
||||
latestBuild: false,
|
||||
}),
|
||||
handler(resolve)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
gulp.task("webpack-dev-server-gallery", () => {
|
||||
runDevServer({
|
||||
// We don't use the es5 build, but the dev server will fuck up the publicPath if we don't
|
||||
compiler: webpack(bothBuilds(createGalleryConfig, { isProdBuild: false })),
|
||||
contentBase: paths.gallery_output_root,
|
||||
contentBase: paths.gallery_root,
|
||||
port: 8100,
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task("webpack-prod-gallery", () =>
|
||||
prodBuild(
|
||||
createGalleryConfig({
|
||||
isProdBuild: true,
|
||||
latestBuild: true,
|
||||
})
|
||||
)
|
||||
gulp.task(
|
||||
"webpack-prod-gallery",
|
||||
() =>
|
||||
new Promise((resolve) =>
|
||||
webpack(
|
||||
createGalleryConfig({
|
||||
isProdBuild: true,
|
||||
latestBuild: true,
|
||||
}),
|
||||
|
||||
handler(resolve)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
@@ -1,45 +1,34 @@
|
||||
const path = require("path");
|
||||
var path = require("path");
|
||||
|
||||
module.exports = {
|
||||
polymer_dir: path.resolve(__dirname, ".."),
|
||||
|
||||
build_dir: path.resolve(__dirname, "../build"),
|
||||
app_output_root: path.resolve(__dirname, "../hass_frontend"),
|
||||
app_output_static: path.resolve(__dirname, "../hass_frontend/static"),
|
||||
app_output_latest: path.resolve(
|
||||
__dirname,
|
||||
"../hass_frontend/frontend_latest"
|
||||
),
|
||||
app_output_es5: path.resolve(__dirname, "../hass_frontend/frontend_es5"),
|
||||
root: path.resolve(__dirname, "../hass_frontend"),
|
||||
static: path.resolve(__dirname, "../hass_frontend/static"),
|
||||
output: path.resolve(__dirname, "../hass_frontend/frontend_latest"),
|
||||
output_es5: path.resolve(__dirname, "../hass_frontend/frontend_es5"),
|
||||
|
||||
demo_dir: path.resolve(__dirname, "../demo"),
|
||||
demo_output_root: path.resolve(__dirname, "../demo/dist"),
|
||||
demo_output_static: path.resolve(__dirname, "../demo/dist/static"),
|
||||
demo_output_latest: path.resolve(__dirname, "../demo/dist/frontend_latest"),
|
||||
demo_root: path.resolve(__dirname, "../demo/dist"),
|
||||
demo_static: path.resolve(__dirname, "../demo/dist/static"),
|
||||
demo_output: path.resolve(__dirname, "../demo/dist/frontend_latest"),
|
||||
demo_output_es5: path.resolve(__dirname, "../demo/dist/frontend_es5"),
|
||||
|
||||
cast_dir: path.resolve(__dirname, "../cast"),
|
||||
cast_output_root: path.resolve(__dirname, "../cast/dist"),
|
||||
cast_output_static: path.resolve(__dirname, "../cast/dist/static"),
|
||||
cast_output_latest: path.resolve(__dirname, "../cast/dist/frontend_latest"),
|
||||
cast_root: path.resolve(__dirname, "../cast/dist"),
|
||||
cast_static: path.resolve(__dirname, "../cast/dist/static"),
|
||||
cast_output: path.resolve(__dirname, "../cast/dist/frontend_latest"),
|
||||
cast_output_es5: path.resolve(__dirname, "../cast/dist/frontend_es5"),
|
||||
|
||||
gallery_dir: path.resolve(__dirname, "../gallery"),
|
||||
gallery_output_root: path.resolve(__dirname, "../gallery/dist"),
|
||||
gallery_output_latest: path.resolve(
|
||||
__dirname,
|
||||
"../gallery/dist/frontend_latest"
|
||||
),
|
||||
gallery_output_static: path.resolve(__dirname, "../gallery/dist/static"),
|
||||
gallery_root: path.resolve(__dirname, "../gallery/dist"),
|
||||
gallery_output: path.resolve(__dirname, "../gallery/dist/frontend_latest"),
|
||||
gallery_static: path.resolve(__dirname, "../gallery/dist/static"),
|
||||
|
||||
hassio_dir: path.resolve(__dirname, "../hassio"),
|
||||
hassio_output_root: path.resolve(__dirname, "../hassio/build"),
|
||||
hassio_output_latest: path.resolve(
|
||||
__dirname,
|
||||
"../hassio/build/frontend_latest"
|
||||
),
|
||||
hassio_output_es5: path.resolve(__dirname, "../hassio/build/frontend_es5"),
|
||||
hassio_publicPath: "/api/hassio/app",
|
||||
hassio_root: path.resolve(__dirname, "../hassio/build"),
|
||||
hassio_publicPath: "/api/hassio/app/",
|
||||
|
||||
translations_src: path.resolve(__dirname, "../src/translations"),
|
||||
};
|
||||
|
@@ -1 +0,0 @@
|
||||
[]
|
@@ -1,14 +0,0 @@
|
||||
module.exports = function (opts = {}) {
|
||||
const dontHash = opts.dontHash || new Set();
|
||||
|
||||
return {
|
||||
name: "dont-hash",
|
||||
renderChunk(_code, chunk, _options) {
|
||||
if (!chunk.isEntry || !dontHash.has(chunk.name)) {
|
||||
return null;
|
||||
}
|
||||
chunk.fileName = `${chunk.name}.js`;
|
||||
return null;
|
||||
},
|
||||
};
|
||||
};
|
@@ -1,24 +0,0 @@
|
||||
module.exports = function (userOptions = {}) {
|
||||
// Files need to be absolute paths.
|
||||
// This only works if the file has no exports
|
||||
// and only is imported for its side effects
|
||||
const files = userOptions.files || [];
|
||||
|
||||
if (files.length === 0) {
|
||||
return {
|
||||
name: "ignore",
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
name: "ignore",
|
||||
|
||||
load(id) {
|
||||
return files.some((toIgnorePath) => id.startsWith(toIgnorePath))
|
||||
? {
|
||||
code: "",
|
||||
}
|
||||
: null;
|
||||
},
|
||||
};
|
||||
};
|
@@ -1,34 +0,0 @@
|
||||
const url = require("url");
|
||||
|
||||
const defaultOptions = {
|
||||
publicPath: "",
|
||||
};
|
||||
|
||||
module.exports = function (userOptions = {}) {
|
||||
const options = { ...defaultOptions, ...userOptions };
|
||||
|
||||
return {
|
||||
name: "manifest",
|
||||
generateBundle(outputOptions, bundle) {
|
||||
const manifest = {};
|
||||
|
||||
for (const chunk of Object.values(bundle)) {
|
||||
if (!chunk.isEntry) {
|
||||
continue;
|
||||
}
|
||||
// Add js extension to mimic Webpack manifest.
|
||||
manifest[`${chunk.name}.js`] = url.resolve(
|
||||
options.publicPath,
|
||||
chunk.fileName
|
||||
);
|
||||
}
|
||||
|
||||
this.emitFile({
|
||||
type: "asset",
|
||||
source: JSON.stringify(manifest, undefined, 2),
|
||||
name: "manifest.json",
|
||||
fileName: "manifest.json",
|
||||
});
|
||||
},
|
||||
};
|
||||
};
|
@@ -1,149 +0,0 @@
|
||||
// Worker plugin
|
||||
// Each worker will include all of its dependencies
|
||||
// instead of relying on an importer.
|
||||
|
||||
// Forked from v.1.4.1
|
||||
// https://github.com/surma/rollup-plugin-off-main-thread
|
||||
/**
|
||||
* Copyright 2018 Google Inc. All Rights Reserved.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
const rollup = require("rollup");
|
||||
const path = require("path");
|
||||
const MagicString = require("magic-string");
|
||||
|
||||
const defaultOpts = {
|
||||
// A RegExp to find `new Workers()` calls. The second capture group _must_
|
||||
// capture the provided file name without the quotes.
|
||||
workerRegexp: /new Worker\((["'])(.+?)\1(,[^)]+)?\)/g,
|
||||
plugins: ["node-resolve", "commonjs", "babel", "terser", "ignore"],
|
||||
};
|
||||
|
||||
async function getBundledWorker(workerPath, rollupOptions) {
|
||||
const bundle = await rollup.rollup({
|
||||
...rollupOptions,
|
||||
input: {
|
||||
worker: workerPath,
|
||||
},
|
||||
});
|
||||
const { output } = await bundle.generate({
|
||||
// Generates cleanest output, we shouldn't have any imports/exports
|
||||
// that would be incompatible with ES5.
|
||||
format: "es",
|
||||
// We should not export anything. This will fail build if we are.
|
||||
exports: "none",
|
||||
});
|
||||
|
||||
let code;
|
||||
|
||||
for (const chunkOrAsset of output) {
|
||||
if (chunkOrAsset.name === "worker") {
|
||||
code = chunkOrAsset.code;
|
||||
} else if (chunkOrAsset.type !== "asset") {
|
||||
throw new Error("Unexpected extra output");
|
||||
}
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
module.exports = function (opts = {}) {
|
||||
opts = { ...defaultOpts, ...opts };
|
||||
|
||||
let rollupOptions;
|
||||
let refIds;
|
||||
|
||||
return {
|
||||
name: "hass-worker",
|
||||
|
||||
async buildStart(options) {
|
||||
refIds = {};
|
||||
rollupOptions = {
|
||||
plugins: options.plugins.filter((plugin) =>
|
||||
opts.plugins.includes(plugin.name)
|
||||
),
|
||||
};
|
||||
},
|
||||
|
||||
async transform(code, id) {
|
||||
// Copy the regexp as they are stateful and this hook is async.
|
||||
const workerRegexp = new RegExp(
|
||||
opts.workerRegexp.source,
|
||||
opts.workerRegexp.flags
|
||||
);
|
||||
if (!workerRegexp.test(code)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ms = new MagicString(code);
|
||||
// Reset the regexp
|
||||
workerRegexp.lastIndex = 0;
|
||||
while (true) {
|
||||
const match = workerRegexp.exec(code);
|
||||
if (!match) {
|
||||
break;
|
||||
}
|
||||
|
||||
const workerFile = match[2];
|
||||
let optionsObject = {};
|
||||
// Parse the optional options object
|
||||
if (match[3] && match[3].length > 0) {
|
||||
// FIXME: ooooof!
|
||||
optionsObject = new Function(`return ${match[3].slice(1)};`)();
|
||||
}
|
||||
delete optionsObject.type;
|
||||
|
||||
if (!new RegExp("^.*/").test(workerFile)) {
|
||||
this.warn(
|
||||
`Paths passed to the Worker constructor must be relative or absolute, i.e. start with /, ./ or ../ (just like dynamic import!). Ignoring "${workerFile}".`
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Find worker file and store it as a chunk with ID prefixed for our loader
|
||||
const resolvedWorkerFile = (await this.resolve(workerFile, id)).id;
|
||||
let chunkRefId;
|
||||
if (resolvedWorkerFile in refIds) {
|
||||
chunkRefId = refIds[resolvedWorkerFile];
|
||||
} else {
|
||||
this.addWatchFile(resolvedWorkerFile);
|
||||
const source = await getBundledWorker(
|
||||
resolvedWorkerFile,
|
||||
rollupOptions
|
||||
);
|
||||
chunkRefId = refIds[resolvedWorkerFile] = this.emitFile({
|
||||
name: path.basename(resolvedWorkerFile),
|
||||
source,
|
||||
type: "asset",
|
||||
});
|
||||
}
|
||||
|
||||
const workerParametersStartIndex = match.index + "new Worker(".length;
|
||||
const workerParametersEndIndex =
|
||||
match.index + match[0].length - ")".length;
|
||||
|
||||
ms.overwrite(
|
||||
workerParametersStartIndex,
|
||||
workerParametersEndIndex,
|
||||
`import.meta.ROLLUP_FILE_URL_${chunkRefId}, ${JSON.stringify(
|
||||
optionsObject
|
||||
)}`
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
code: ms.toString(),
|
||||
map: ms.generateMap({ hires: true }),
|
||||
};
|
||||
},
|
||||
};
|
||||
};
|
@@ -1,156 +0,0 @@
|
||||
const path = require("path");
|
||||
|
||||
const commonjs = require("@rollup/plugin-commonjs");
|
||||
const resolve = require("@rollup/plugin-node-resolve");
|
||||
const json = require("@rollup/plugin-json");
|
||||
const babel = require("@rollup/plugin-babel").babel;
|
||||
const replace = require("@rollup/plugin-replace");
|
||||
const visualizer = require("rollup-plugin-visualizer");
|
||||
const { string } = require("rollup-plugin-string");
|
||||
const { terser } = require("rollup-plugin-terser");
|
||||
const manifest = require("./rollup-plugins/manifest-plugin");
|
||||
const worker = require("./rollup-plugins/worker-plugin");
|
||||
const dontHashPlugin = require("./rollup-plugins/dont-hash-plugin");
|
||||
const ignore = require("./rollup-plugins/ignore-plugin");
|
||||
|
||||
const bundle = require("./bundle");
|
||||
const paths = require("./paths");
|
||||
|
||||
const extensions = [".js", ".ts"];
|
||||
|
||||
/**
|
||||
* @param {Object} arg
|
||||
* @param { import("rollup").InputOption } arg.input
|
||||
*/
|
||||
const createRollupConfig = ({
|
||||
entry,
|
||||
outputPath,
|
||||
defineOverlay,
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
isStatsBuild,
|
||||
publicPath,
|
||||
dontHash,
|
||||
isWDS,
|
||||
}) => {
|
||||
return {
|
||||
/**
|
||||
* @type { import("rollup").InputOptions }
|
||||
*/
|
||||
inputOptions: {
|
||||
input: entry,
|
||||
// Some entry points contain no JavaScript. This setting silences a warning about that.
|
||||
// https://rollupjs.org/guide/en/#preserveentrysignatures
|
||||
preserveEntrySignatures: false,
|
||||
plugins: [
|
||||
ignore({
|
||||
files: bundle.emptyPackages({ latestBuild }),
|
||||
}),
|
||||
resolve({
|
||||
extensions,
|
||||
preferBuiltins: false,
|
||||
browser: true,
|
||||
rootDir: paths.polymer_dir,
|
||||
}),
|
||||
commonjs({
|
||||
namedExports: {
|
||||
"js-yaml": ["safeDump", "safeLoad"],
|
||||
},
|
||||
}),
|
||||
json(),
|
||||
babel({
|
||||
...bundle.babelOptions({ latestBuild }),
|
||||
extensions,
|
||||
exclude: bundle.babelExclude(),
|
||||
babelHelpers: isWDS ? "inline" : "bundled",
|
||||
}),
|
||||
string({
|
||||
// Import certain extensions as strings
|
||||
include: [path.join(paths.polymer_dir, "node_modules/**/*.css")],
|
||||
}),
|
||||
replace(
|
||||
bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })
|
||||
),
|
||||
!isWDS &&
|
||||
manifest({
|
||||
publicPath,
|
||||
}),
|
||||
!isWDS && worker(),
|
||||
!isWDS && dontHashPlugin({ dontHash }),
|
||||
!isWDS && isProdBuild && terser(bundle.terserOptions(latestBuild)),
|
||||
!isWDS &&
|
||||
isStatsBuild &&
|
||||
visualizer({
|
||||
// https://github.com/btd/rollup-plugin-visualizer#options
|
||||
open: true,
|
||||
sourcemap: true,
|
||||
}),
|
||||
].filter(Boolean),
|
||||
},
|
||||
/**
|
||||
* @type { import("rollup").OutputOptions }
|
||||
*/
|
||||
outputOptions: {
|
||||
// https://rollupjs.org/guide/en/#outputdir
|
||||
dir: outputPath,
|
||||
// https://rollupjs.org/guide/en/#outputformat
|
||||
format: latestBuild ? "es" : "systemjs",
|
||||
// https://rollupjs.org/guide/en/#outputexternallivebindings
|
||||
externalLiveBindings: false,
|
||||
// https://rollupjs.org/guide/en/#outputentryfilenames
|
||||
// https://rollupjs.org/guide/en/#outputchunkfilenames
|
||||
// https://rollupjs.org/guide/en/#outputassetfilenames
|
||||
entryFileNames:
|
||||
isProdBuild && !isStatsBuild ? "[name]-[hash].js" : "[name].js",
|
||||
chunkFileNames:
|
||||
isProdBuild && !isStatsBuild ? "c.[hash].js" : "[name].js",
|
||||
assetFileNames:
|
||||
isProdBuild && !isStatsBuild ? "a.[hash].js" : "[name].js",
|
||||
// https://rollupjs.org/guide/en/#outputsourcemap
|
||||
sourcemap: isProdBuild ? true : "inline",
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild, isWDS }) => {
|
||||
return createRollupConfig(
|
||||
bundle.config.app({
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
isStatsBuild,
|
||||
isWDS,
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
|
||||
return createRollupConfig(
|
||||
bundle.config.demo({
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
isStatsBuild,
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
const createCastConfig = ({ isProdBuild, latestBuild }) => {
|
||||
return createRollupConfig(bundle.config.cast({ isProdBuild, latestBuild }));
|
||||
};
|
||||
|
||||
const createHassioConfig = ({ isProdBuild, latestBuild }) => {
|
||||
return createRollupConfig(bundle.config.hassio({ isProdBuild, latestBuild }));
|
||||
};
|
||||
|
||||
const createGalleryConfig = ({ isProdBuild, latestBuild }) => {
|
||||
return createRollupConfig(
|
||||
bundle.config.gallery({ isProdBuild, latestBuild })
|
||||
);
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
createAppConfig,
|
||||
createDemoConfig,
|
||||
createCastConfig,
|
||||
createHassioConfig,
|
||||
createGalleryConfig,
|
||||
};
|
@@ -1,29 +1,23 @@
|
||||
const webpack = require("webpack");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const TerserPlugin = require("terser-webpack-plugin");
|
||||
const WorkboxPlugin = require("workbox-webpack-plugin");
|
||||
const ManifestPlugin = require("webpack-manifest-plugin");
|
||||
const paths = require("./paths.js");
|
||||
const bundle = require("./bundle");
|
||||
const log = require("fancy-log");
|
||||
const { babelLoaderConfig } = require("./babel.js");
|
||||
|
||||
class LogStartCompilePlugin {
|
||||
ignoredFirst = false;
|
||||
|
||||
apply(compiler) {
|
||||
compiler.hooks.beforeCompile.tap("LogStartCompilePlugin", () => {
|
||||
if (!this.ignoredFirst) {
|
||||
this.ignoredFirst = true;
|
||||
return;
|
||||
}
|
||||
log("Changes detected. Starting compilation");
|
||||
});
|
||||
}
|
||||
let version = fs
|
||||
.readFileSync(path.resolve(paths.polymer_dir, "setup.py"), "utf8")
|
||||
.match(/\d{8}\.\d+/);
|
||||
if (!version) {
|
||||
throw Error("Version not found");
|
||||
}
|
||||
version = version[0];
|
||||
|
||||
const createWebpackConfig = ({
|
||||
entry,
|
||||
outputPath,
|
||||
publicPath,
|
||||
outputRoot,
|
||||
defineOverlay,
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
@@ -33,97 +27,87 @@ const createWebpackConfig = ({
|
||||
if (!dontHash) {
|
||||
dontHash = new Set();
|
||||
}
|
||||
const ignorePackages = bundle.ignorePackages({ latestBuild });
|
||||
return {
|
||||
mode: isProdBuild ? "production" : "development",
|
||||
target: ["web", latestBuild ? "es2017" : "es5"],
|
||||
devtool: isProdBuild
|
||||
? "cheap-module-source-map"
|
||||
: "eval-cheap-module-source-map",
|
||||
devtool: isProdBuild ? "source-map" : "inline-cheap-module-source-map",
|
||||
entry,
|
||||
node: false,
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.m?js$|\.ts$/,
|
||||
exclude: bundle.babelExclude(),
|
||||
use: {
|
||||
loader: "babel-loader",
|
||||
options: bundle.babelOptions({ latestBuild }),
|
||||
},
|
||||
},
|
||||
babelLoaderConfig({ latestBuild }),
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: "raw-loader",
|
||||
},
|
||||
{
|
||||
test: /\.(html)$/,
|
||||
use: {
|
||||
loader: "html-loader",
|
||||
options: {
|
||||
exportAsEs6Default: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
externals: {
|
||||
esprima: "esprima",
|
||||
},
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new TerserPlugin({
|
||||
cache: true,
|
||||
parallel: true,
|
||||
extractComments: true,
|
||||
terserOptions: bundle.terserOptions(latestBuild),
|
||||
sourceMap: true,
|
||||
terserOptions: {
|
||||
safari10: true,
|
||||
ecma: latestBuild ? undefined : 5,
|
||||
},
|
||||
}),
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
new ManifestPlugin({
|
||||
// Only include the JS of entrypoints
|
||||
filter: (file) => file.isInitial && !file.name.endsWith(".map"),
|
||||
}),
|
||||
new webpack.DefinePlugin(
|
||||
bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })
|
||||
),
|
||||
new webpack.IgnorePlugin({
|
||||
checkResource(resource, context) {
|
||||
// Only use ignore to intercept imports that we don't control
|
||||
// inside node_module dependencies.
|
||||
if (
|
||||
!context.includes("/node_modules/") ||
|
||||
// calling define.amd will call require("!!webpack amd options")
|
||||
resource.startsWith("!!webpack") ||
|
||||
// loaded by webpack dev server but doesn't exist.
|
||||
resource === "webpack/hot"
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
let fullPath;
|
||||
try {
|
||||
fullPath = resource.startsWith(".")
|
||||
? path.resolve(context, resource)
|
||||
: require.resolve(resource);
|
||||
} catch (err) {
|
||||
console.error(
|
||||
"Error in Home Assistant ignore plugin",
|
||||
resource,
|
||||
context
|
||||
);
|
||||
throw err;
|
||||
}
|
||||
|
||||
return ignorePackages.some((toIgnorePath) =>
|
||||
fullPath.startsWith(toIgnorePath)
|
||||
);
|
||||
},
|
||||
new ManifestPlugin(),
|
||||
new webpack.DefinePlugin({
|
||||
__DEV__: !isProdBuild,
|
||||
__BUILD__: JSON.stringify(latestBuild ? "latest" : "es5"),
|
||||
__VERSION__: JSON.stringify(version),
|
||||
__DEMO__: false,
|
||||
__BACKWARDS_COMPAT__: false,
|
||||
__STATIC_PATH__: "/static/",
|
||||
"process.env.NODE_ENV": JSON.stringify(
|
||||
isProdBuild ? "production" : "development"
|
||||
),
|
||||
...defineOverlay,
|
||||
}),
|
||||
// Ignore moment.js locales
|
||||
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
||||
// Color.js is bloated, it contains all color definitions for all material color sets.
|
||||
new webpack.NormalModuleReplacementPlugin(
|
||||
new RegExp(bundle.emptyPackages({ latestBuild }).join("|")),
|
||||
/@polymer\/paper-styles\/color\.js$/,
|
||||
path.resolve(paths.polymer_dir, "src/util/empty.js")
|
||||
),
|
||||
// We need to change the import of the polyfill for EventTarget, so we replace the polyfill file with our customized one
|
||||
// Ignore roboto pointing at CDN. We use local font-roboto-local.
|
||||
new webpack.NormalModuleReplacementPlugin(
|
||||
new RegExp(
|
||||
require.resolve(
|
||||
"lit-virtualizer/lib/uni-virtualizer/lib/polyfillLoaders/EventTarget.js"
|
||||
)
|
||||
),
|
||||
path.resolve(paths.polymer_dir, "src/resources/EventTarget-ponyfill.js")
|
||||
/@polymer\/font-roboto\/roboto\.js$/,
|
||||
path.resolve(paths.polymer_dir, "src/util/empty.js")
|
||||
),
|
||||
// Ignore mwc icons pointing at CDN.
|
||||
new webpack.NormalModuleReplacementPlugin(
|
||||
/@material\/mwc-icon\/mwc-icon-font\.js$/,
|
||||
path.resolve(paths.polymer_dir, "src/util/empty.js")
|
||||
),
|
||||
!isProdBuild && new LogStartCompilePlugin(),
|
||||
].filter(Boolean),
|
||||
resolve: {
|
||||
extensions: [".ts", ".js", ".json"],
|
||||
alias: {
|
||||
react: "preact-compat",
|
||||
"react-dom": "preact-compat",
|
||||
// Not necessary unless you consume a module using `createClass`
|
||||
"create-react-class": "preact-compat/lib/create-react-class",
|
||||
// Not necessary unless you consume a module requiring `react-dom-factories`
|
||||
"react-dom-factories": "preact-compat/lib/react-dom-factories",
|
||||
},
|
||||
},
|
||||
output: {
|
||||
filename: ({ chunk }) => {
|
||||
@@ -136,40 +120,148 @@ const createWebpackConfig = ({
|
||||
isProdBuild && !isStatsBuild
|
||||
? "chunk.[chunkhash].js"
|
||||
: "[name].chunk.js",
|
||||
path: outputPath,
|
||||
publicPath,
|
||||
// To silence warning in worker plugin
|
||||
path: path.resolve(
|
||||
outputRoot,
|
||||
latestBuild ? "frontend_latest" : "frontend_es5"
|
||||
),
|
||||
publicPath: latestBuild ? "/frontend_latest/" : "/frontend_es5/",
|
||||
// For workerize loader
|
||||
globalObject: "self",
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
|
||||
return createWebpackConfig(
|
||||
bundle.config.app({ isProdBuild, latestBuild, isStatsBuild })
|
||||
);
|
||||
const config = createWebpackConfig({
|
||||
entry: {
|
||||
app: "./src/entrypoints/app.ts",
|
||||
authorize: "./src/entrypoints/authorize.ts",
|
||||
onboarding: "./src/entrypoints/onboarding.ts",
|
||||
core: "./src/entrypoints/core.ts",
|
||||
compatibility: "./src/entrypoints/compatibility.ts",
|
||||
"custom-panel": "./src/entrypoints/custom-panel.ts",
|
||||
"hass-icons": "./src/entrypoints/hass-icons.ts",
|
||||
},
|
||||
outputRoot: paths.root,
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
isStatsBuild,
|
||||
});
|
||||
|
||||
if (latestBuild) {
|
||||
// Create an object mapping browser urls to their paths during build
|
||||
const translationMetadata = require("../build-translations/translationMetadata.json");
|
||||
const workBoxTranslationsTemplatedURLs = {};
|
||||
const englishFilename = `en-${translationMetadata.translations.en.hash}.json`;
|
||||
|
||||
// core
|
||||
workBoxTranslationsTemplatedURLs[
|
||||
`/static/translations/${englishFilename}`
|
||||
] = `build-translations/output/${englishFilename}`;
|
||||
|
||||
translationMetadata.fragments.forEach((fragment) => {
|
||||
workBoxTranslationsTemplatedURLs[
|
||||
`/static/translations/${fragment}/${englishFilename}`
|
||||
] = `build-translations/output/${fragment}/${englishFilename}`;
|
||||
});
|
||||
|
||||
config.plugins.push(
|
||||
new WorkboxPlugin.InjectManifest({
|
||||
swSrc: "./src/entrypoints/service-worker-hass.js",
|
||||
swDest: "service_worker.js",
|
||||
importWorkboxFrom: "local",
|
||||
include: [/\.js$/],
|
||||
templatedURLs: {
|
||||
...workBoxTranslationsTemplatedURLs,
|
||||
"/static/icons/favicon-192x192.png":
|
||||
"public/icons/favicon-192x192.png",
|
||||
"/static/fonts/roboto/Roboto-Light.woff2":
|
||||
"node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff2",
|
||||
"/static/fonts/roboto/Roboto-Medium.woff2":
|
||||
"node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff2",
|
||||
"/static/fonts/roboto/Roboto-Regular.woff2":
|
||||
"node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff2",
|
||||
"/static/fonts/roboto/Roboto-Bold.woff2":
|
||||
"node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff2",
|
||||
},
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
return config;
|
||||
};
|
||||
|
||||
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
|
||||
return createWebpackConfig(
|
||||
bundle.config.demo({ isProdBuild, latestBuild, isStatsBuild })
|
||||
);
|
||||
return createWebpackConfig({
|
||||
entry: {
|
||||
main: path.resolve(paths.demo_dir, "src/entrypoint.ts"),
|
||||
compatibility: path.resolve(
|
||||
paths.polymer_dir,
|
||||
"src/entrypoints/compatibility.ts"
|
||||
),
|
||||
},
|
||||
outputRoot: paths.demo_root,
|
||||
defineOverlay: {
|
||||
__VERSION__: JSON.stringify(`DEMO-${version}`),
|
||||
__DEMO__: true,
|
||||
},
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
isStatsBuild,
|
||||
});
|
||||
};
|
||||
|
||||
const createCastConfig = ({ isProdBuild, latestBuild }) => {
|
||||
return createWebpackConfig(bundle.config.cast({ isProdBuild, latestBuild }));
|
||||
const entry = {
|
||||
launcher: path.resolve(paths.cast_dir, "src/launcher/entrypoint.ts"),
|
||||
};
|
||||
|
||||
if (latestBuild) {
|
||||
entry.receiver = path.resolve(paths.cast_dir, "src/receiver/entrypoint.ts");
|
||||
}
|
||||
|
||||
return createWebpackConfig({
|
||||
entry,
|
||||
outputRoot: paths.cast_root,
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
defineOverlay: {
|
||||
__BACKWARDS_COMPAT__: true,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const createHassioConfig = ({ isProdBuild, latestBuild }) => {
|
||||
return createWebpackConfig(
|
||||
bundle.config.hassio({ isProdBuild, latestBuild })
|
||||
);
|
||||
if (latestBuild) {
|
||||
throw new Error("Hass.io does not support latest build!");
|
||||
}
|
||||
const config = createWebpackConfig({
|
||||
entry: {
|
||||
entrypoint: path.resolve(paths.hassio_dir, "src/entrypoint.ts"),
|
||||
},
|
||||
outputRoot: "",
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
dontHash: new Set(["entrypoint"]),
|
||||
});
|
||||
|
||||
config.output.path = paths.hassio_root;
|
||||
config.output.publicPath = paths.hassio_publicPath;
|
||||
|
||||
return config;
|
||||
};
|
||||
|
||||
const createGalleryConfig = ({ isProdBuild, latestBuild }) => {
|
||||
return createWebpackConfig(
|
||||
bundle.config.gallery({ isProdBuild, latestBuild })
|
||||
);
|
||||
const config = createWebpackConfig({
|
||||
entry: {
|
||||
entrypoint: path.resolve(paths.gallery_dir, "src/entrypoint.js"),
|
||||
},
|
||||
outputRoot: paths.gallery_root,
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB |
Binary file not shown.
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
Binary file not shown.
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
@@ -1,10 +0,0 @@
|
||||
const rollup = require("../build-scripts/rollup.js");
|
||||
const env = require("../build-scripts/env.js");
|
||||
|
||||
const config = rollup.createCastConfig({
|
||||
isProdBuild: env.isProdBuild(),
|
||||
latestBuild: true,
|
||||
isStatsBuild: env.isStatsBuild(),
|
||||
});
|
||||
|
||||
module.exports = { ...config.inputOptions, output: config.outputOptions };
|
@@ -37,21 +37,18 @@
|
||||
<body>
|
||||
<%= renderTemplate('_js_base') %>
|
||||
|
||||
<script>
|
||||
import("<%= latestLauncherJS %>");
|
||||
window.latestJS = true;
|
||||
<script type="module" crossorigin="use-credentials">
|
||||
import "<%= latestLauncherJS %>";
|
||||
</script>
|
||||
|
||||
<script>
|
||||
if (!window.latestJS) {
|
||||
<% if (useRollup) { %>
|
||||
_ls("/static/js/s.min.js").onload = function() {
|
||||
System.import("<%= es5LauncherJS %>");
|
||||
};
|
||||
<% } else { %>
|
||||
<script nomodule>
|
||||
(function() {
|
||||
// // Safari 10.1 supports type=module but ignores nomodule, so we add this check.
|
||||
if (!isS101) {
|
||||
_ls("/static/polyfills/custom-elements-es5-adapter.js");
|
||||
_ls("<%= es5LauncherJS %>");
|
||||
<% } %>
|
||||
}
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
<hc-layout subtitle="FAQ">
|
||||
@@ -212,8 +209,13 @@
|
||||
Chromecast is a technology developed by Google, and is available on:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Google Chrome (all platforms except iOS)</li>
|
||||
<li>Microsoft Edge (all platforms)</li>
|
||||
<li>Google Chrome (all platforms except on iOS)</li>
|
||||
<li>
|
||||
Microsoft Edge (all platforms,
|
||||
<a href="https://www.microsoftedgeinsider.com" target="_blank"
|
||||
>dev and canary builds only</a
|
||||
>)
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -246,7 +248,7 @@ http:
|
||||
|
||||
<script>
|
||||
var _gaq = [["_setAccount", "UA-57927901-9"], ["_trackPageview"]];
|
||||
(function (d, t) {
|
||||
(function(d, t) {
|
||||
var g = d.createElement(t),
|
||||
s = d.getElementsByTagName(t)[0];
|
||||
g.src =
|
||||
|
@@ -28,21 +28,18 @@
|
||||
|
||||
<hc-connect></hc-connect>
|
||||
|
||||
<script>
|
||||
import("<%= latestLauncherJS %>");
|
||||
window.latestJS = true;
|
||||
<script type="module" crossorigin="use-credentials">
|
||||
import "<%= latestLauncherJS %>";
|
||||
</script>
|
||||
|
||||
<script>
|
||||
if (!window.latestJS) {
|
||||
<% if (useRollup) { %>
|
||||
_ls("/static/js/s.min.js").onload = function() {
|
||||
System.import("<%= es5LauncherJS %>");
|
||||
};
|
||||
<% } else { %>
|
||||
<script nomodule>
|
||||
(function() {
|
||||
// // Safari 10.1 supports type=module but ignores nomodule, so we add this check.
|
||||
if (!isS101) {
|
||||
_ls("/static/polyfills/custom-elements-es5-adapter.js");
|
||||
_ls("<%= es5LauncherJS %>");
|
||||
<% } %>
|
||||
}
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import "../../../src/resources/safari-14-attachshadow-patch";
|
||||
import "../../../src/components/ha-iconset-svg";
|
||||
import "../../../src/resources/ha-style";
|
||||
import "../../../src/resources/hass-icons";
|
||||
import "../../../src/resources/roboto";
|
||||
import "./layout/hc-connect";
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import "@polymer/iron-icon";
|
||||
import "@polymer/paper-item/paper-icon-item";
|
||||
import "@polymer/paper-listbox/paper-listbox";
|
||||
import { Auth, Connection } from "home-assistant-js-websocket";
|
||||
@@ -8,7 +9,6 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { CastManager } from "../../../../src/cast/cast_manager";
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
getLovelaceCollection,
|
||||
LovelaceConfig,
|
||||
} from "../../../../src/data/lovelace";
|
||||
import "../../../../src/layouts/hass-loading-screen";
|
||||
import "../../../../src/layouts/loading-screen";
|
||||
import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config";
|
||||
import "./hc-layout";
|
||||
import "@material/mwc-button/mwc-button";
|
||||
@@ -42,13 +42,13 @@ class HcCast extends LitElement {
|
||||
|
||||
@property() public castManager!: CastManager;
|
||||
|
||||
@internalProperty() private askWrite = false;
|
||||
@property() private askWrite = false;
|
||||
|
||||
@internalProperty() private lovelaceConfig?: LovelaceConfig | null;
|
||||
@property() private lovelaceConfig?: LovelaceConfig | null;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (this.lovelaceConfig === undefined) {
|
||||
return html`<hass-loading-screen no-toolbar></hass-loading-screen>`;
|
||||
return html` <loading-screen></loading-screen>> `;
|
||||
}
|
||||
|
||||
const error =
|
||||
@@ -83,7 +83,7 @@ class HcCast extends LitElement {
|
||||
? html`
|
||||
<p class="center-item">
|
||||
<mwc-button raised @click=${this._handleLaunch}>
|
||||
<ha-icon icon="hass:cast"></ha-icon>
|
||||
<iron-icon icon="hass:cast"></iron-icon>
|
||||
Start Casting
|
||||
</mwc-button>
|
||||
</p>
|
||||
@@ -121,7 +121,7 @@ class HcCast extends LitElement {
|
||||
${this.castManager.status
|
||||
? html`
|
||||
<mwc-button @click=${this._handleLaunch}>
|
||||
<ha-icon icon="hass:cast-connected"></ha-icon>
|
||||
<iron-icon icon="hass:cast-connected"></iron-icon>
|
||||
Manage
|
||||
</mwc-button>
|
||||
`
|
||||
@@ -243,7 +243,7 @@ class HcCast extends LitElement {
|
||||
color: var(--secondary-text-color);
|
||||
}
|
||||
|
||||
mwc-button ha-icon {
|
||||
mwc-button iron-icon {
|
||||
margin-right: 8px;
|
||||
height: 18px;
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import "@material/mwc-button";
|
||||
import "@polymer/iron-icon";
|
||||
import "@polymer/paper-input/paper-input";
|
||||
import {
|
||||
Auth,
|
||||
@@ -17,8 +18,8 @@ import {
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
TemplateResult,
|
||||
internalProperty,
|
||||
} from "lit-element";
|
||||
import { CastManager, getCastManager } from "../../../../src/cast/cast_manager";
|
||||
import { castSendShowDemo } from "../../../../src/cast/receiver_messages";
|
||||
@@ -26,8 +27,7 @@ import {
|
||||
loadTokens,
|
||||
saveTokens,
|
||||
} from "../../../../src/common/auth/token_storage";
|
||||
import "../../../../src/components/ha-icon";
|
||||
import "../../../../src/layouts/hass-loading-screen";
|
||||
import "../../../../src/layouts/loading-screen";
|
||||
import { registerServiceWorker } from "../../../../src/util/register-service-worker";
|
||||
import "./hc-layout";
|
||||
|
||||
@@ -60,19 +60,19 @@ const INTRO = html`
|
||||
|
||||
@customElement("hc-connect")
|
||||
export class HcConnect extends LitElement {
|
||||
@internalProperty() private loading = false;
|
||||
@property() private loading = false;
|
||||
|
||||
// If we had stored credentials but we cannot connect,
|
||||
// show a screen asking retry or logout.
|
||||
@internalProperty() private cannotConnect = false;
|
||||
@property() private cannotConnect = false;
|
||||
|
||||
@internalProperty() private error?: string | TemplateResult;
|
||||
@property() private error?: string | TemplateResult;
|
||||
|
||||
@internalProperty() private auth?: Auth;
|
||||
@property() private auth?: Auth;
|
||||
|
||||
@internalProperty() private connection?: Connection;
|
||||
@property() private connection?: Connection;
|
||||
|
||||
@internalProperty() private castManager?: CastManager | null;
|
||||
@property() private castManager?: CastManager | null;
|
||||
|
||||
private openDemo = false;
|
||||
|
||||
@@ -98,7 +98,7 @@ export class HcConnect extends LitElement {
|
||||
}
|
||||
|
||||
if (this.castManager === undefined || this.loading) {
|
||||
return html` <hass-loading-screen no-toolbar></hass-loading-screen> `;
|
||||
return html` <loading-screen></loading-screen> `;
|
||||
}
|
||||
|
||||
if (this.castManager === null) {
|
||||
@@ -136,11 +136,11 @@ export class HcConnect extends LitElement {
|
||||
<div class="card-actions">
|
||||
<mwc-button @click=${this._handleDemo}>
|
||||
Show Demo
|
||||
<ha-icon
|
||||
<iron-icon
|
||||
.icon=${this.castManager.castState === "CONNECTED"
|
||||
? "hass:cast-connected"
|
||||
: "hass:cast"}
|
||||
></ha-icon>
|
||||
></iron-icon>
|
||||
</mwc-button>
|
||||
<div class="spacer"></div>
|
||||
<mwc-button @click=${this._handleConnect}>Authorize</mwc-button>
|
||||
@@ -184,7 +184,7 @@ export class HcConnect extends LitElement {
|
||||
this.castManager = null;
|
||||
}
|
||||
);
|
||||
registerServiceWorker(this, false);
|
||||
registerServiceWorker(false);
|
||||
}
|
||||
|
||||
private async _handleDemo() {
|
||||
@@ -316,7 +316,7 @@ export class HcConnect extends LitElement {
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
mwc-button ha-icon {
|
||||
mwc-button iron-icon {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
|
@@ -30,7 +30,7 @@ class HcLayout extends LitElement {
|
||||
<ha-card>
|
||||
<div class="layout">
|
||||
<img class="hero" src="/images/google-nest-hub.png" />
|
||||
<h1 class="card-header">
|
||||
<div class="card-header">
|
||||
Home Assistant Cast${this.subtitle ? ` – ${this.subtitle}` : ""}
|
||||
${this.auth
|
||||
? html`
|
||||
@@ -44,7 +44,7 @@ class HcLayout extends LitElement {
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
</h1>
|
||||
</div>
|
||||
<slot></slot>
|
||||
</div>
|
||||
</ha-card>
|
||||
@@ -98,12 +98,8 @@ class HcLayout extends LitElement {
|
||||
line-height: 32px;
|
||||
padding: 24px 16px 16px;
|
||||
display: block;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.hero {
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 14px;
|
||||
color: var(--secondary-text-color);
|
||||
|
@@ -6,60 +6,13 @@ import { castContext } from "./cast_context";
|
||||
import { HcMain } from "./layout/hc-main";
|
||||
import { ReceivedMessage } from "./types";
|
||||
|
||||
const lovelaceController = new HcMain();
|
||||
document.body.append(lovelaceController);
|
||||
|
||||
const mediaPlayer = document.createElement("cast-media-player");
|
||||
mediaPlayer.style.display = "none";
|
||||
document.body.append(mediaPlayer);
|
||||
const playerStylesAdded = false;
|
||||
|
||||
let controls: HTMLElement | null;
|
||||
|
||||
const setTouchControlsVisibility = (visible: boolean) => {
|
||||
if (!castContext.getDeviceCapabilities().touch_input_supported) {
|
||||
return;
|
||||
}
|
||||
controls =
|
||||
controls ||
|
||||
(document.body.querySelector("touch-controls") as HTMLElement | null);
|
||||
if (controls) {
|
||||
controls.style.display = visible ? "initial" : "none";
|
||||
}
|
||||
};
|
||||
|
||||
const showLovelaceController = () => {
|
||||
mediaPlayer.style.display = "none";
|
||||
lovelaceController.style.display = "initial";
|
||||
document.body.setAttribute("style", "overflow-y: auto !important");
|
||||
setTouchControlsVisibility(false);
|
||||
};
|
||||
|
||||
const showMediaPlayer = () => {
|
||||
lovelaceController.style.display = "none";
|
||||
mediaPlayer.style.display = "initial";
|
||||
document.body.removeAttribute("style");
|
||||
setTouchControlsVisibility(true);
|
||||
if (!playerStylesAdded) {
|
||||
const style = document.createElement("style");
|
||||
style.innerHTML = `
|
||||
body {
|
||||
--logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
|
||||
--logo-repeat: no-repeat;
|
||||
--playback-logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
|
||||
--theme-hue: 200;
|
||||
--progress-color: #03a9f4;
|
||||
--splash-image: url('https://home-assistant.io/images/cast/splash.png');
|
||||
--splash-size: cover;
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
};
|
||||
const controller = new HcMain();
|
||||
document.body.append(controller);
|
||||
|
||||
const options = new cast.framework.CastReceiverOptions();
|
||||
options.disableIdleTimeout = true;
|
||||
options.customNamespaces = {
|
||||
// @ts-ignore
|
||||
[CAST_NS]: cast.framework.system.MessageType.JSON,
|
||||
};
|
||||
|
||||
@@ -77,61 +30,13 @@ options.uiConfig = new cast.framework.ui.UiConfig();
|
||||
// @ts-ignore
|
||||
options.uiConfig.touchScreenOptimizedApp = true;
|
||||
|
||||
castContext.setInactivityTimeout(86400); // 1 day
|
||||
|
||||
castContext.addCustomMessageListener(
|
||||
CAST_NS,
|
||||
// @ts-ignore
|
||||
(ev: ReceivedMessage<HassMessage>) => {
|
||||
// We received a show Lovelace command, stop media from playing, hide media player and show Lovelace controller
|
||||
if (
|
||||
playerManager.getPlayerState() !==
|
||||
cast.framework.messages.PlayerState.IDLE
|
||||
) {
|
||||
playerManager.stop();
|
||||
} else {
|
||||
showLovelaceController();
|
||||
}
|
||||
const msg = ev.data;
|
||||
msg.senderId = ev.senderId;
|
||||
lovelaceController.processIncomingMessage(msg);
|
||||
}
|
||||
);
|
||||
|
||||
const playerManager = castContext.getPlayerManager();
|
||||
|
||||
playerManager.setMessageInterceptor(
|
||||
cast.framework.messages.MessageType.LOAD,
|
||||
(loadRequestData) => {
|
||||
// We received a play media command, hide Lovelace and show media player
|
||||
showMediaPlayer();
|
||||
const media = loadRequestData.media;
|
||||
// Special handling if it came from Google Assistant
|
||||
if (media.entity) {
|
||||
media.contentId = media.entity;
|
||||
media.streamType = cast.framework.messages.StreamType.LIVE;
|
||||
media.contentType = "application/vnd.apple.mpegurl";
|
||||
// @ts-ignore
|
||||
media.hlsVideoSegmentFormat =
|
||||
cast.framework.messages.HlsVideoSegmentFormat.FMP4;
|
||||
}
|
||||
return loadRequestData;
|
||||
}
|
||||
);
|
||||
|
||||
playerManager.addEventListener(
|
||||
cast.framework.events.EventType.MEDIA_STATUS,
|
||||
(event) => {
|
||||
if (
|
||||
event.mediaStatus?.playerState ===
|
||||
cast.framework.messages.PlayerState.IDLE &&
|
||||
event.mediaStatus?.idleReason &&
|
||||
event.mediaStatus?.idleReason !==
|
||||
cast.framework.messages.IdleReason.INTERRUPTED
|
||||
) {
|
||||
// media finished or stopped, return to default Lovelace
|
||||
showLovelaceController();
|
||||
}
|
||||
controller.processIncomingMessage(msg);
|
||||
}
|
||||
);
|
||||
|
||||
|
@@ -1,10 +1,4 @@
|
||||
import {
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
property,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { customElement, html, property, TemplateResult } from "lit-element";
|
||||
import { mockHistory } from "../../../../demo/src/stubs/history";
|
||||
import { LovelaceConfig } from "../../../../src/data/lovelace";
|
||||
import {
|
||||
@@ -19,9 +13,9 @@ import "./hc-lovelace";
|
||||
|
||||
@customElement("hc-demo")
|
||||
class HcDemo extends HassElement {
|
||||
@property({ attribute: false }) public lovelacePath!: string;
|
||||
@property() public lovelacePath!: string;
|
||||
|
||||
@internalProperty() private _lovelaceConfig?: LovelaceConfig;
|
||||
@property() private _lovelaceConfig?: LovelaceConfig;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this._lovelaceConfig) {
|
||||
|
@@ -11,7 +11,7 @@ import { HomeAssistant } from "../../../../src/types";
|
||||
|
||||
@customElement("hc-launch-screen")
|
||||
class HcLaunchScreen extends LitElement {
|
||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||
@property() public hass?: HomeAssistant;
|
||||
|
||||
@property() public error?: string;
|
||||
|
||||
|
@@ -9,20 +9,19 @@ import {
|
||||
} from "lit-element";
|
||||
import { LovelaceConfig } from "../../../../src/data/lovelace";
|
||||
import { Lovelace } from "../../../../src/panels/lovelace/types";
|
||||
import "../../../../src/panels/lovelace/views/hui-panel-view";
|
||||
import "../../../../src/panels/lovelace/views/hui-view";
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import "./hc-launch-screen";
|
||||
|
||||
@customElement("hc-lovelace")
|
||||
class HcLovelace extends LitElement {
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
@property() public hass!: HomeAssistant;
|
||||
|
||||
@property({ attribute: false }) public lovelaceConfig!: LovelaceConfig;
|
||||
@property() public lovelaceConfig!: LovelaceConfig;
|
||||
|
||||
@property() public viewPath?: string | number;
|
||||
|
||||
public urlPath?: string | null;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
const index = this._viewIndex;
|
||||
if (index === undefined) {
|
||||
@@ -36,7 +35,6 @@ class HcLovelace extends LitElement {
|
||||
const lovelace: Lovelace = {
|
||||
config: this.lovelaceConfig,
|
||||
editMode: false,
|
||||
urlPath: this.urlPath!,
|
||||
enableFullEditMode: () => undefined,
|
||||
mode: "storage",
|
||||
language: "en",
|
||||
@@ -44,13 +42,22 @@ class HcLovelace extends LitElement {
|
||||
deleteConfig: async () => undefined,
|
||||
setEditMode: () => undefined,
|
||||
};
|
||||
return html`
|
||||
<hui-view
|
||||
.hass=${this.hass}
|
||||
.lovelace=${lovelace}
|
||||
.index=${index}
|
||||
></hui-view>
|
||||
`;
|
||||
return this.lovelaceConfig.views[index].panel
|
||||
? html`
|
||||
<hui-panel-view
|
||||
.hass=${this.hass}
|
||||
.lovelace=${lovelace}
|
||||
.config=${this.lovelaceConfig.views[index]}
|
||||
></hui-panel-view>
|
||||
`
|
||||
: html`
|
||||
<hui-view
|
||||
.hass=${this.hass}
|
||||
.lovelace=${lovelace}
|
||||
.index=${index}
|
||||
columns="2"
|
||||
></hui-view>
|
||||
`;
|
||||
}
|
||||
|
||||
protected updated(changedProps) {
|
||||
@@ -66,7 +73,7 @@ class HcLovelace extends LitElement {
|
||||
|
||||
if (configBackground) {
|
||||
(this.shadowRoot!.querySelector(
|
||||
"hui-view"
|
||||
"hui-view, hui-panel-view"
|
||||
) as HTMLElement)!.style.setProperty(
|
||||
"--lovelace-background",
|
||||
configBackground
|
||||
|
@@ -3,12 +3,7 @@ import {
|
||||
getAuth,
|
||||
UnsubscribeFunc,
|
||||
} from "home-assistant-js-websocket";
|
||||
import {
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { customElement, html, property, TemplateResult } from "lit-element";
|
||||
import { CAST_NS } from "../../../../src/cast/const";
|
||||
import {
|
||||
ConnectMessage,
|
||||
@@ -36,13 +31,13 @@ let resourcesLoaded = false;
|
||||
|
||||
@customElement("hc-main")
|
||||
export class HcMain extends HassElement {
|
||||
@internalProperty() private _showDemo = false;
|
||||
@property() private _showDemo = false;
|
||||
|
||||
@internalProperty() private _lovelaceConfig?: LovelaceConfig;
|
||||
@property() private _lovelaceConfig?: LovelaceConfig;
|
||||
|
||||
@internalProperty() private _lovelacePath: string | number | null = null;
|
||||
@property() private _lovelacePath: string | number | null = null;
|
||||
|
||||
@internalProperty() private _error?: string;
|
||||
@property() private _error?: string;
|
||||
|
||||
private _unsubLovelace?: UnsubscribeFunc;
|
||||
|
||||
@@ -87,8 +82,6 @@ export class HcMain extends HassElement {
|
||||
.hass=${this.hass}
|
||||
.lovelaceConfig=${this._lovelaceConfig}
|
||||
.viewPath=${this._lovelacePath}
|
||||
.urlPath=${this._urlPath}
|
||||
@config-refresh=${this._generateLovelaceConfig}
|
||||
></hc-lovelace>
|
||||
`;
|
||||
}
|
||||
@@ -97,17 +90,15 @@ export class HcMain extends HassElement {
|
||||
super.firstUpdated(changedProps);
|
||||
import("../second-load");
|
||||
window.addEventListener("location-changed", () => {
|
||||
const panelPath = `/${this._urlPath || "lovelace"}/`;
|
||||
if (location.pathname.startsWith(panelPath)) {
|
||||
this._lovelacePath = location.pathname.substr(panelPath.length);
|
||||
if (location.pathname.startsWith("/lovelace/")) {
|
||||
this._lovelacePath = location.pathname.substr(10);
|
||||
this._sendStatus();
|
||||
}
|
||||
});
|
||||
document.body.addEventListener("click", (ev) => {
|
||||
const panelPath = `/${this._urlPath || "lovelace"}/`;
|
||||
const href = isNavigationClick(ev);
|
||||
if (href && href.startsWith(panelPath)) {
|
||||
this._lovelacePath = href.substr(panelPath.length);
|
||||
if (href && href.startsWith("/lovelace/")) {
|
||||
this._lovelacePath = href.substr(10);
|
||||
this._sendStatus();
|
||||
}
|
||||
});
|
||||
@@ -179,10 +170,10 @@ export class HcMain extends HassElement {
|
||||
this._error = "Cannot show Lovelace because we're not connected.";
|
||||
return;
|
||||
}
|
||||
if (msg.urlPath === "lovelace") {
|
||||
msg.urlPath = null;
|
||||
}
|
||||
if (!this._unsubLovelace || this._urlPath !== msg.urlPath) {
|
||||
if (msg.urlPath === "lovelace") {
|
||||
msg.urlPath = null;
|
||||
}
|
||||
this._urlPath = msg.urlPath;
|
||||
if (this._unsubLovelace) {
|
||||
this._unsubLovelace();
|
||||
@@ -198,11 +189,14 @@ export class HcMain extends HassElement {
|
||||
this._handleNewLovelaceConfig(lovelaceConfig)
|
||||
);
|
||||
} catch (err) {
|
||||
// eslint-disable-next-line
|
||||
console.log("Error fetching Lovelace configuration", err, msg);
|
||||
// Generate a Lovelace config.
|
||||
this._unsubLovelace = () => undefined;
|
||||
await this._generateLovelaceConfig();
|
||||
const { generateLovelaceConfigFromHass } = await import(
|
||||
"../../../../src/panels/lovelace/common/generate-lovelace-config"
|
||||
);
|
||||
this._handleNewLovelaceConfig(
|
||||
await generateLovelaceConfigFromHass(this.hass!)
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!resourcesLoaded) {
|
||||
@@ -216,19 +210,12 @@ export class HcMain extends HassElement {
|
||||
}
|
||||
this._showDemo = false;
|
||||
this._lovelacePath = msg.viewPath;
|
||||
|
||||
if (castContext.getDeviceCapabilities().touch_input_supported) {
|
||||
this._breakFree();
|
||||
}
|
||||
this._sendStatus();
|
||||
}
|
||||
|
||||
private async _generateLovelaceConfig() {
|
||||
const { generateLovelaceConfigFromHass } = await import(
|
||||
"../../../../src/panels/lovelace/common/generate-lovelace-config"
|
||||
);
|
||||
this._handleNewLovelaceConfig(
|
||||
await generateLovelaceConfigFromHass(this.hass!)
|
||||
);
|
||||
}
|
||||
|
||||
private _handleNewLovelaceConfig(lovelaceConfig: LovelaceConfig) {
|
||||
castContext.setApplicationState(lovelaceConfig.title!);
|
||||
this._lovelaceConfig = lovelaceConfig;
|
||||
@@ -239,6 +226,9 @@ export class HcMain extends HassElement {
|
||||
this._showDemo = true;
|
||||
this._lovelacePath = "overview";
|
||||
this._sendStatus();
|
||||
if (castContext.getDeviceCapabilities().touch_input_supported) {
|
||||
this._breakFree();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -259,6 +249,14 @@ export class HcMain extends HassElement {
|
||||
}
|
||||
}
|
||||
|
||||
private _breakFree() {
|
||||
const controls = document.body.querySelector("touch-controls");
|
||||
if (controls) {
|
||||
controls.remove();
|
||||
}
|
||||
document.body.setAttribute("style", "overflow-y: auto !important");
|
||||
}
|
||||
|
||||
private sendMessage(senderId: string, response: any) {
|
||||
castContext.sendCustomMessage(CAST_NS, senderId, response);
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import "web-animations-js/web-animations-next-lite.min";
|
||||
import "../../../src/resources/ha-style";
|
||||
import "../../../src/components/ha-iconset-svg";
|
||||
import "../../../src/resources/hass-icons";
|
||||
import "../../../src/resources/roboto";
|
||||
import "./layout/hc-lovelace";
|
||||
|
254
cast/src/translations/af.json
Normal file
254
cast/src/translations/af.json
Normal file
@@ -0,0 +1,254 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Gewapen",
|
||||
"armed_away": "Gewapend weg",
|
||||
"armed_custom_bypass": "Gewapende pasgemaakte omseil",
|
||||
"armed_home": "Gewapend tuis",
|
||||
"armed_night": "Gewapend nag",
|
||||
"arming": "Bewapen Tans",
|
||||
"disarmed": "Ontwapen",
|
||||
"disarming": "Ontwapen Tans",
|
||||
"pending": "Hangende",
|
||||
"triggered": "Geaktiveer"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normaal",
|
||||
"on": "Laag"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normaal",
|
||||
"on": "Koud"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Ontkoppel",
|
||||
"on": "Gekoppel"
|
||||
},
|
||||
"default": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"door": {
|
||||
"off": "Toe",
|
||||
"on": "Oop"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Toe",
|
||||
"on": "Oop"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Ongemerk",
|
||||
"on": "Bespeur"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normaal",
|
||||
"on": "Warm"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Gesluit",
|
||||
"on": "Oopgesluit"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Droog",
|
||||
"on": "Nat"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Ongemerk",
|
||||
"on": "Bespeur"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Ongemerk",
|
||||
"on": "Bespeur"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Toe",
|
||||
"on": "Oop"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Elders",
|
||||
"on": "Tuis"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Probleem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Veilige",
|
||||
"on": "Onveilige"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Ongemerk",
|
||||
"on": "Bespeur"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Ongemerk",
|
||||
"on": "Bespeur"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Ongemerk",
|
||||
"on": "Bespeur"
|
||||
},
|
||||
"window": {
|
||||
"off": "Toe",
|
||||
"on": "Oop"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Onaktief",
|
||||
"recording": "Opname",
|
||||
"streaming": "Stroming"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Outo",
|
||||
"cool": "Koel",
|
||||
"dry": "Droog",
|
||||
"fan_only": "Slegs waaier",
|
||||
"heat": "Hitte",
|
||||
"heat_cool": "Verhit/Verkoel",
|
||||
"off": "Af"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Stel op",
|
||||
"configured": "Opgestel"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Toe",
|
||||
"closing": "Sluiting",
|
||||
"open": "Oop",
|
||||
"opening": "Opening",
|
||||
"stopped": "Gestop"
|
||||
},
|
||||
"default": {
|
||||
"off": "Af",
|
||||
"on": "Aan",
|
||||
"unavailable": "Nie beskikbaar nie",
|
||||
"unknown": "Onbekend"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Tuis",
|
||||
"not_home": "Elders"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Toe",
|
||||
"closing": "Sluiting",
|
||||
"home": "Tuis",
|
||||
"locked": "Gesluit",
|
||||
"not_home": "Elders",
|
||||
"off": "Af",
|
||||
"ok": "OK",
|
||||
"on": "Aan",
|
||||
"open": "Oop",
|
||||
"opening": "Opening",
|
||||
"problem": "Probleem",
|
||||
"stopped": "Gestop",
|
||||
"unlocked": "Oopgesluit"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"light": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Gesluit",
|
||||
"unlocked": "Oopgesluit"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Onaktief",
|
||||
"off": "Af",
|
||||
"on": "Aan",
|
||||
"paused": "Onderbreek",
|
||||
"playing": "Speel Tans",
|
||||
"standby": "Gereed"
|
||||
},
|
||||
"person": {
|
||||
"home": "Tuis",
|
||||
"not_home": "Elders"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Probleem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Toneeling"
|
||||
},
|
||||
"script": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Bo horison",
|
||||
"below_horizon": "Onder horison"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Af",
|
||||
"on": "Aan"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktief",
|
||||
"idle": "onaktief",
|
||||
"paused": "Onderbreek"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Skoonmaak",
|
||||
"docked": "Vasgemeer by hawe",
|
||||
"error": "Fout",
|
||||
"idle": "Onaktief",
|
||||
"off": "Af",
|
||||
"on": "Aan",
|
||||
"paused": "Onderbreek",
|
||||
"returning": "Oppad terug hawe toe"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Helder, nag",
|
||||
"cloudy": "Bewolk",
|
||||
"fog": "Mis",
|
||||
"hail": "Hael",
|
||||
"lightning": "Weerlig",
|
||||
"lightning-rainy": "Weerlig, Re\u00ebnagtig",
|
||||
"partlycloudy": "Gedeeltelik bewolk",
|
||||
"pouring": "Stort",
|
||||
"rainy": "Re\u00ebnagtig",
|
||||
"snowy": "Sneeuagtig",
|
||||
"snowy-rainy": "Ysre\u00ebn",
|
||||
"sunny": "Sonnig",
|
||||
"windy": "Winderig",
|
||||
"windy-variant": "Winderig"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Dood",
|
||||
"initializing": "Inisialiseer",
|
||||
"ready": "Gereed",
|
||||
"sleeping": "Aan die slaap"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Dood ({query_stage})",
|
||||
"initializing": "Inisialiseer ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
240
cast/src/translations/ar.json
Normal file
240
cast/src/translations/ar.json
Normal file
@@ -0,0 +1,240 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u0645\u0633\u0644\u062d",
|
||||
"armed_away": "\u0645\u0641\u0639\u0651\u0644 \u0641\u064a \u0627\u0644\u062e\u0627\u0631\u062c",
|
||||
"armed_custom_bypass": "\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u062a\u0641\u0639\u064a\u0644",
|
||||
"armed_home": "\u0645\u0641\u0639\u0651\u0644 \u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
|
||||
"armed_night": "\u0645\u0641\u0639\u0651\u0644 \u0644\u064a\u0644",
|
||||
"arming": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0641\u0639\u064a\u0644",
|
||||
"disarmed": "\u063a\u064a\u0631 \u0645\u0641\u0639\u0651\u0644",
|
||||
"disarming": "\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0625\u0646\u0630\u0627\u0631",
|
||||
"pending": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u062a\u0638\u0627\u0631",
|
||||
"triggered": "\u0645\u0641\u0639\u0651\u0644"
|
||||
},
|
||||
"automation": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "\u0637\u0628\u064a\u0639\u064a",
|
||||
"on": "\u0645\u0646\u062e\u0641\u0636"
|
||||
},
|
||||
"cold": {
|
||||
"off": "\u0637\u0628\u064a\u0639\u064a",
|
||||
"on": "\u0628\u0627\u0631\u062f"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "\u0645\u0641\u0635\u0648\u0644",
|
||||
"on": "\u0645\u062a\u0635\u0644"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"door": {
|
||||
"off": "\u0645\u063a\u0644\u0642",
|
||||
"on": "\u0645\u0641\u062a\u0648\u062d"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "\u0645\u063a\u0644\u0642",
|
||||
"on": "\u0645\u0641\u062a\u0648\u062d"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
|
||||
"on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
|
||||
},
|
||||
"heat": {
|
||||
"off": "\u0637\u0628\u064a\u0639\u064a",
|
||||
"on": "\u062d\u0627\u0631"
|
||||
},
|
||||
"lock": {
|
||||
"off": "\u0645\u0642\u0641\u0644",
|
||||
"on": "\u063a\u064a\u0631 \u0645\u0642\u0641\u0644"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "\u062c\u0627\u0641",
|
||||
"on": "\u0645\u0628\u0644\u0644"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
|
||||
"on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
|
||||
"on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
|
||||
},
|
||||
"opening": {
|
||||
"off": "\u0645\u0642\u0641\u0644",
|
||||
"on": "\u0645\u0641\u062a\u0648\u062d"
|
||||
},
|
||||
"presence": {
|
||||
"off": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644",
|
||||
"on": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644"
|
||||
},
|
||||
"problem": {
|
||||
"off": "\u0645\u0648\u0627\u0641\u0642",
|
||||
"on": "\u0639\u0637\u0644"
|
||||
},
|
||||
"safety": {
|
||||
"off": "\u0623\u0645\u0646",
|
||||
"on": "\u063a\u064a\u0631 \u0623\u0645\u0646"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
|
||||
"on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
|
||||
"on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
|
||||
"on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
|
||||
},
|
||||
"window": {
|
||||
"off": "\u0645\u063a\u0644\u0642",
|
||||
"on": "\u0645\u0641\u062a\u0648\u062d"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "\u062e\u0627\u0645\u0644",
|
||||
"recording": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0633\u062c\u064a\u0644",
|
||||
"streaming": "\u062c\u0627\u0631\u064a \u0627\u0644\u0628\u062b"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "\u062a\u0644\u0642\u0627\u0626\u064a",
|
||||
"cool": "\u062a\u0628\u0631\u064a\u062f",
|
||||
"dry": "\u062c\u0627\u0641",
|
||||
"fan_only": "\u0627\u0644\u0645\u0631\u0648\u062d\u0629 \u0641\u0642\u0637",
|
||||
"heat": "\u062a\u062f\u0641\u0626\u0629",
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "\u0625\u0639\u062f\u0627\u062f",
|
||||
"configured": "\u062a\u0645 \u0627\u0644\u0625\u0639\u062f\u0627\u062f"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "\u0645\u063a\u0644\u0642",
|
||||
"closing": "\u062c\u0627\u0631\u064a \u0627\u0644\u0627\u063a\u0644\u0627\u0642",
|
||||
"open": "\u0645\u0641\u062a\u0648\u062d",
|
||||
"opening": "\u062c\u0627\u0631\u064a \u0627\u0644\u0641\u062a\u062d",
|
||||
"stopped": "\u0645\u0648\u0642\u0641"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u062a\u0634\u063a\u064a\u0644",
|
||||
"unavailable": "\u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631",
|
||||
"unknown": "\u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
|
||||
"not_home": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"group": {
|
||||
"closed": "\u0645\u063a\u0644\u0642 ",
|
||||
"closing": "\u062c\u0627\u0631\u064a \u0627\u0644\u0627\u063a\u0644\u0627\u0642 ",
|
||||
"home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
|
||||
"locked": "\u0645\u0642\u0641\u0644 ",
|
||||
"not_home": "\u0641\u064a \u0627\u0644\u062e\u0627\u0631\u062c",
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"ok": "\u0623\u0648\u0643\u064a",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644",
|
||||
"open": "\u0645\u0641\u062a\u0648\u062d ",
|
||||
"opening": "\u062c\u0627\u0631\u064a \u0627\u0644\u0641\u062a\u062d ",
|
||||
"problem": "\u0645\u0634\u0643\u0644\u0629",
|
||||
"stopped": "\u0645\u0648\u0642\u0641 ",
|
||||
"unlocked": "\u063a\u064a\u0631 \u0645\u0642\u0641\u0644 "
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "\u0645\u0642\u0641\u0644",
|
||||
"unlocked": "\u0645\u0641\u062a\u0648\u062d"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "\u062e\u0627\u0645\u0644",
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644",
|
||||
"paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627",
|
||||
"playing": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0634\u063a\u064a\u0644",
|
||||
"standby": "\u0648\u0636\u0639 \u0627\u0644\u0625\u0646\u062a\u0638\u0627\u0631"
|
||||
},
|
||||
"person": {
|
||||
"home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
|
||||
"not_home": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u0623\u0648\u0643\u064a",
|
||||
"problem": "\u0645\u0634\u0643\u0644\u0629"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "\u0642\u0628\u062f \u0627\u0644\u0628\u062d\u062b"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u0641\u0648\u0642 \u0627\u0644\u0623\u0641\u0642",
|
||||
"below_horizon": "\u062a\u062d\u062a \u0627\u0644\u0623\u0641\u0642"
|
||||
},
|
||||
"switch": {
|
||||
"off": "\u0625\u064a\u0642\u0627\u0641",
|
||||
"on": "\u0645\u064f\u0634\u064e\u063a\u0651\u0644"
|
||||
},
|
||||
"timer": {
|
||||
"active": "\u0645\u0641\u0639\u0644",
|
||||
"idle": "\u062e\u0627\u0645\u0644",
|
||||
"paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u062a\u0646\u0638\u064a\u0641",
|
||||
"error": "\u062e\u0637\u0623",
|
||||
"off": "\u0645\u0637\u0641\u0626",
|
||||
"on": "\u0645\u0634\u063a\u0644",
|
||||
"paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627",
|
||||
"returning": "\u0627\u0644\u0639\u0648\u062f\u0629"
|
||||
},
|
||||
"weather": {
|
||||
"cloudy": "Bewolkt",
|
||||
"fog": "Mist",
|
||||
"sunny": "\u0645\u0634\u0645\u0633"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "\u0645\u0641\u0635\u0648\u0644",
|
||||
"initializing": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621",
|
||||
"ready": "\u062c\u0627\u0647\u0632",
|
||||
"sleeping": "\u0646\u0627\u0626\u0645"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "\u0645\u0641\u0635\u0648\u0644 ({query_stage})",
|
||||
"initializing": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621 ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/bg.json
Normal file
255
cast/src/translations/bg.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430",
|
||||
"armed_away": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430",
|
||||
"armed_custom_bypass": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430",
|
||||
"armed_home": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u0432\u043a\u044a\u0449\u0438",
|
||||
"armed_night": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u043d\u043e\u0449",
|
||||
"arming": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435",
|
||||
"disarmed": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0430",
|
||||
"disarming": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435",
|
||||
"pending": "\u0412 \u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0435",
|
||||
"triggered": "\u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d"
|
||||
},
|
||||
"automation": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u0430",
|
||||
"on": "\u0418\u0437\u0442\u043e\u0449\u0435\u043d\u0430"
|
||||
},
|
||||
"cold": {
|
||||
"off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e",
|
||||
"on": "\u0421\u0442\u0443\u0434\u0435\u043d\u043e"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0421\u0432\u044a\u0440\u0437\u0430\u043d"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"door": {
|
||||
"off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
|
||||
"on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
|
||||
"on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u0427\u0438\u0441\u0442\u043e",
|
||||
"on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
|
||||
},
|
||||
"heat": {
|
||||
"off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e",
|
||||
"on": "\u0413\u043e\u0440\u0435\u0449\u043e"
|
||||
},
|
||||
"lock": {
|
||||
"off": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
|
||||
"on": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "\u0421\u0443\u0445",
|
||||
"on": "\u041c\u043e\u043a\u044a\u0440"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u0411\u0435\u0437 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435",
|
||||
"on": "\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u0427\u0438\u0441\u0442\u043e",
|
||||
"on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
|
||||
},
|
||||
"opening": {
|
||||
"off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d",
|
||||
"on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d"
|
||||
},
|
||||
"presence": {
|
||||
"off": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430",
|
||||
"on": "\u0412\u043a\u044a\u0449\u0438"
|
||||
},
|
||||
"problem": {
|
||||
"off": "\u041e\u041a",
|
||||
"on": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c"
|
||||
},
|
||||
"safety": {
|
||||
"off": "\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d",
|
||||
"on": "\u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u0427\u0438\u0441\u0442\u043e",
|
||||
"on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u0427\u0438\u0441\u0442\u043e",
|
||||
"on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u0427\u0438\u0441\u0442\u043e",
|
||||
"on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0430"
|
||||
},
|
||||
"window": {
|
||||
"off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d",
|
||||
"on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "\u041d\u0435 \u0437\u0430\u043f\u0438\u0441\u0432\u0430",
|
||||
"recording": "\u0417\u0430\u043f\u0438\u0441\u0432\u0430\u043d\u0435",
|
||||
"streaming": "\u041f\u0440\u0435\u0434\u0430\u0432\u0430"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043d",
|
||||
"cool": "\u041e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435",
|
||||
"dry": "\u0421\u0443\u0445",
|
||||
"fan_only": "\u0421\u0430\u043c\u043e \u0432\u0435\u043d\u0442\u0438\u043b\u0430\u0442\u043e\u0440",
|
||||
"heat": "\u041e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435",
|
||||
"heat_cool": "\u041e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435/\u041e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435",
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435",
|
||||
"configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
|
||||
"closing": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
|
||||
"open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
|
||||
"opening": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
|
||||
"stopped": "\u0421\u043f\u0440\u044f\u043d\u0430"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"unavailable": "\u041d\u0435\u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d",
|
||||
"unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "\u0412\u043a\u044a\u0449\u0438",
|
||||
"not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"group": {
|
||||
"closed": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
|
||||
"closing": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
|
||||
"home": "\u0412\u043a\u044a\u0449\u0438",
|
||||
"locked": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430",
|
||||
"not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430",
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"ok": "\u041e\u041a",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0430",
|
||||
"open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
|
||||
"opening": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
|
||||
"problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c",
|
||||
"stopped": "\u0421\u043f\u0440\u044f\u043d\u0430",
|
||||
"unlocked": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"unlocked": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "\u041d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449",
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"paused": "\u0412 \u043f\u0430\u0443\u0437\u0430",
|
||||
"playing": "\u0412\u044a\u0437\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435",
|
||||
"standby": "\u0420\u0435\u0436\u0438\u043c \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442"
|
||||
},
|
||||
"person": {
|
||||
"home": "\u0412\u043a\u044a\u0449\u0438",
|
||||
"not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u041e\u041a",
|
||||
"problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "\u041f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u0441\u0446\u0435\u043d\u0430"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u041d\u0430\u0434 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430",
|
||||
"below_horizon": "\u041f\u043e\u0434 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430"
|
||||
},
|
||||
"switch": {
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
|
||||
},
|
||||
"timer": {
|
||||
"active": "\u0430\u043a\u0442\u0438\u0432\u0435\u043d",
|
||||
"idle": "\u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449",
|
||||
"paused": "\u0432 \u043f\u0430\u0443\u0437\u0430"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u041f\u043e\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435",
|
||||
"docked": "\u0412 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f",
|
||||
"error": "\u0413\u0440\u0435\u0448\u043a\u0430",
|
||||
"idle": "\u041d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449",
|
||||
"off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d",
|
||||
"paused": "\u041f\u0430\u0443\u0437\u0430",
|
||||
"returning": "\u0412\u0440\u044a\u0449\u0430\u043d\u0435 \u0432 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "\u042f\u0441\u043d\u043e, \u043d\u043e\u0449",
|
||||
"cloudy": "\u041e\u0431\u043b\u0430\u0447\u043d\u043e",
|
||||
"exceptional": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u043d\u043e",
|
||||
"fog": "\u041c\u044a\u0433\u043b\u0430",
|
||||
"hail": "\u0413\u0440\u0430\u0434\u0443\u0448\u043a\u0430",
|
||||
"lightning": "\u0421\u0432\u0435\u0442\u043a\u0430\u0432\u0438\u0446\u0430",
|
||||
"lightning-rainy": "\u0421\u0432\u0435\u0442\u043a\u0430\u0432\u0438\u0446\u0430, \u0434\u044a\u0436\u0434\u043e\u0432\u043d\u043e",
|
||||
"partlycloudy": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0441\u0442",
|
||||
"pouring": "\u041e\u0431\u0438\u043b\u0435\u043d \u0434\u044a\u0436\u0434",
|
||||
"rainy": "\u0414\u044a\u0436\u0434\u043e\u0432\u043d\u043e",
|
||||
"snowy": "\u0421\u043d\u0435\u0436\u043d\u043e",
|
||||
"snowy-rainy": "\u0421\u043d\u0435\u0436\u043d\u043e, \u0434\u044a\u0436\u0434\u043e\u0432\u043d\u043e",
|
||||
"sunny": "\u0421\u043b\u044a\u043d\u0447\u0435\u0432\u043e",
|
||||
"windy": "\u0412\u0435\u0442\u0440\u043e\u0432\u0438\u0442\u043e",
|
||||
"windy-variant": "\u0412\u0435\u0442\u0440\u043e\u0432\u0438\u0442\u043e"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "\u041c\u044a\u0440\u0442\u044a\u0432",
|
||||
"initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f",
|
||||
"ready": "\u0413\u043e\u0442\u043e\u0432",
|
||||
"sleeping": "\u0421\u043f\u044f\u0449"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "\u041c\u044a\u0440\u0442\u044a\u0432 ({query_stage})",
|
||||
"initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
194
cast/src/translations/bs.json
Normal file
194
cast/src/translations/bs.json
Normal file
@@ -0,0 +1,194 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Aktiviran",
|
||||
"armed_away": "Aktiviran izvan ku\u0107e",
|
||||
"armed_custom_bypass": "Aktiviran pod specijalnim rezimom",
|
||||
"armed_home": "Aktiviran kod ku\u0107e",
|
||||
"armed_night": "Aktiviran no\u0107u",
|
||||
"arming": "Aktivacija",
|
||||
"disarmed": "Deaktiviran",
|
||||
"disarming": "Deaktivacija",
|
||||
"pending": "U is\u010dekivanju",
|
||||
"triggered": "Pokrenut"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normalno",
|
||||
"on": "Nisko"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Nepovezan",
|
||||
"on": "Povezan"
|
||||
},
|
||||
"default": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u010cist",
|
||||
"on": "Otkriven"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Suho",
|
||||
"on": "Mokar"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u010cist",
|
||||
"on": "Otkriven"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u010cist",
|
||||
"on": "Otkriven"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Zatvoren",
|
||||
"on": "Otvoren"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Odsutan",
|
||||
"on": "Kod ku\u0107e"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Problem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Siguran",
|
||||
"on": "Nesiguran"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u010cist",
|
||||
"on": "Otkriven"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u010cist",
|
||||
"on": "Otkriven"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u010cist",
|
||||
"on": "Otkriven"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Besposlen",
|
||||
"recording": "Snimanje",
|
||||
"streaming": "Predaja slike"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Auto",
|
||||
"cool": "Hladno",
|
||||
"dry": "Suh",
|
||||
"fan_only": "Samo ventilator",
|
||||
"heat": "Toplota",
|
||||
"off": "Isklju\u010den"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Podesite",
|
||||
"configured": "Konfigurirano"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Zatvoren",
|
||||
"closing": "Zatvoreno",
|
||||
"open": "Otvoren",
|
||||
"opening": "Otvoreno",
|
||||
"stopped": "Zaustavljen"
|
||||
},
|
||||
"default": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den",
|
||||
"unavailable": "Nedostupan",
|
||||
"unknown": "Nepoznat"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Kod ku\u0107e",
|
||||
"not_home": "Odsutan"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Zatvoren",
|
||||
"closing": "Zatvoreno",
|
||||
"home": "Kod ku\u0107e",
|
||||
"locked": "Zaklju\u010dan",
|
||||
"not_home": "Odsutan",
|
||||
"off": "Isklju\u010den",
|
||||
"ok": "OK",
|
||||
"on": "Uklju\u010den",
|
||||
"open": "Otvoren",
|
||||
"opening": "Otvoreno",
|
||||
"problem": "Problem",
|
||||
"stopped": "Zaustavljen",
|
||||
"unlocked": "Otklju\u010dan"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"light": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Zaklju\u010dan",
|
||||
"unlocked": "Otklju\u010dan"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Besposlen",
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den",
|
||||
"paused": "Pauziran",
|
||||
"playing": "Prikazuje",
|
||||
"standby": "U stanju \u010dekanja"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Problem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Scena"
|
||||
},
|
||||
"script": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Iznad horizonta",
|
||||
"below_horizon": "Ispod horizonta"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Mrtav",
|
||||
"initializing": "Inicijalizacija",
|
||||
"ready": "Spreman",
|
||||
"sleeping": "Spava"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Mrtav ({query_stage})",
|
||||
"initializing": "Inicijalizacija ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/ca.json
Normal file
255
cast/src/translations/ca.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Activada",
|
||||
"armed_away": "Activada, mode fora",
|
||||
"armed_custom_bypass": "Activada, bypass personalitzat",
|
||||
"armed_home": "Activada, mode a casa",
|
||||
"armed_night": "Activada, mode nocturn",
|
||||
"arming": "Activant",
|
||||
"disarmed": "Desactivada",
|
||||
"disarming": "Desactivant",
|
||||
"pending": "Pendent",
|
||||
"triggered": "Disparada"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Desactivat",
|
||||
"on": "Activat"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
"on": "Baixa"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normal",
|
||||
"on": "Fred"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Desconnectat",
|
||||
"on": "Connectat"
|
||||
},
|
||||
"default": {
|
||||
"off": "Desactivat",
|
||||
"on": "Activat"
|
||||
},
|
||||
"door": {
|
||||
"off": "Tancada",
|
||||
"on": "Oberta"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Tancada",
|
||||
"on": "Oberta"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Lliure",
|
||||
"on": "Detectat"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normal",
|
||||
"on": "Calent"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Bloquejat",
|
||||
"on": "Desbloquejat"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Sec",
|
||||
"on": "Humit"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Lliure",
|
||||
"on": "Detectat"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Lliure",
|
||||
"on": "Detectat"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Tancat",
|
||||
"on": "Obert"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Lliure",
|
||||
"on": "Detectat"
|
||||
},
|
||||
"problem": {
|
||||
"off": "Correcte",
|
||||
"on": "Problema"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Segur",
|
||||
"on": "No segur"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Lliure",
|
||||
"on": "Detectat"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Lliure",
|
||||
"on": "Detectat"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Lliure",
|
||||
"on": "Detectat"
|
||||
},
|
||||
"window": {
|
||||
"off": "Tancada",
|
||||
"on": "Oberta"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Desactivat",
|
||||
"on": "Activat"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Inactiu",
|
||||
"recording": "Enregistrant",
|
||||
"streaming": "Transmetent v\u00eddeo"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Autom\u00e0tic",
|
||||
"cool": "Refredar",
|
||||
"dry": "Assecar",
|
||||
"fan_only": "Nom\u00e9s ventilador",
|
||||
"heat": "Escalfar",
|
||||
"heat_cool": "Escalfar/Refredar",
|
||||
"off": "Apagat"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurat"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Tancada",
|
||||
"closing": "Tancant",
|
||||
"open": "Oberta",
|
||||
"opening": "Obrint",
|
||||
"stopped": "Aturat"
|
||||
},
|
||||
"default": {
|
||||
"off": "Desactivat",
|
||||
"on": "Activat",
|
||||
"unavailable": "No disponible",
|
||||
"unknown": "Desconegut"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "A casa",
|
||||
"not_home": "Fora"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Apagat",
|
||||
"on": "Enc\u00e8s"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Tancat",
|
||||
"closing": "Tancant",
|
||||
"home": "A casa",
|
||||
"locked": "Bloquejat",
|
||||
"not_home": "Fora",
|
||||
"off": "Desactivat",
|
||||
"ok": "Correcte",
|
||||
"on": "Activat",
|
||||
"open": "Obert",
|
||||
"opening": "Obrint",
|
||||
"problem": "Problema",
|
||||
"stopped": "Aturat",
|
||||
"unlocked": "Desbloquejat"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Desactivat",
|
||||
"on": "Activat"
|
||||
},
|
||||
"light": {
|
||||
"off": "Apagada",
|
||||
"on": "Encesa"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Bloquejat",
|
||||
"unlocked": "Desbloquejat"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Inactiu",
|
||||
"off": "Apagat",
|
||||
"on": "Enc\u00e8s",
|
||||
"paused": "Pausat",
|
||||
"playing": "Reproduint",
|
||||
"standby": "En espera"
|
||||
},
|
||||
"person": {
|
||||
"home": "A casa",
|
||||
"not_home": "Fora"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "Correcte",
|
||||
"problem": "Problema"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Apagat",
|
||||
"on": "Enc\u00e8s"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Escena activa"
|
||||
},
|
||||
"script": {
|
||||
"off": "Desactivat",
|
||||
"on": "Activat"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Desactivat",
|
||||
"on": "Activat"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Sobre l'horitz\u00f3",
|
||||
"below_horizon": "Sota l'horitz\u00f3"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Apagat",
|
||||
"on": "Enc\u00e8s"
|
||||
},
|
||||
"timer": {
|
||||
"active": "actiu",
|
||||
"idle": "inactiu",
|
||||
"paused": "en pausa"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Netejant",
|
||||
"docked": "Aparcat",
|
||||
"error": "Error",
|
||||
"idle": "Inactiu",
|
||||
"off": "Apagat",
|
||||
"on": "Enc\u00e8s",
|
||||
"paused": "Pausat",
|
||||
"returning": "Retornant a la base"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Ser\u00e8, nit",
|
||||
"cloudy": "Ennuvolat",
|
||||
"exceptional": "Excepcional",
|
||||
"fog": "Boira",
|
||||
"hail": "Calamarsa",
|
||||
"lightning": "Llamps",
|
||||
"lightning-rainy": "Tempesta",
|
||||
"partlycloudy": "Parcialment ennuvolat",
|
||||
"pouring": "Pluja",
|
||||
"rainy": "Pluj\u00f3s",
|
||||
"snowy": "Neu",
|
||||
"snowy-rainy": "Aiguaneu",
|
||||
"sunny": "Assolellat",
|
||||
"windy": "Vent\u00f3s",
|
||||
"windy-variant": "Vent\u00f3s"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "No disponible",
|
||||
"initializing": "Inicialitzant",
|
||||
"ready": "A punt",
|
||||
"sleeping": "Dormint"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "No disponible ({query_stage})",
|
||||
"initializing": "Inicialitzant ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/cs.json
Normal file
255
cast/src/translations/cs.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Aktivn\u00ed",
|
||||
"armed_away": "Aktivn\u00ed re\u017eim mimo domov",
|
||||
"armed_custom_bypass": "Aktivn\u00ed u\u017eivatelsk\u00fdm obejit\u00edm",
|
||||
"armed_home": "Aktivn\u00ed re\u017eim doma",
|
||||
"armed_night": "Aktivn\u00ed no\u010dn\u00ed re\u017eim",
|
||||
"arming": "Aktivov\u00e1n\u00ed",
|
||||
"disarmed": "Neaktivn\u00ed",
|
||||
"disarming": "Deaktivov\u00e1n\u00ed",
|
||||
"pending": "Nadch\u00e1zej\u00edc\u00ed",
|
||||
"triggered": "Spu\u0161t\u011bno"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Norm\u00e1ln\u00ed",
|
||||
"on": "N\u00edzk\u00fd stav"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Norm\u00e1ln\u00ed",
|
||||
"on": "Chladn\u00e9"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Odpojeno",
|
||||
"on": "P\u0159ipojeno"
|
||||
},
|
||||
"default": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"door": {
|
||||
"off": "Zav\u0159eno",
|
||||
"on": "Otev\u0159eno"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Zav\u0159eno",
|
||||
"on": "Otev\u0159eno"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u017d\u00e1dn\u00fd plyn",
|
||||
"on": "Zji\u0161t\u011bn plyn"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Norm\u00e1ln\u00ed",
|
||||
"on": "Hork\u00e9"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Zam\u010deno",
|
||||
"on": "Odem\u010deno"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Sucho",
|
||||
"on": "Vlhko"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Bez pohybu",
|
||||
"on": "Zaznamen\u00e1n pohyb"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Volno",
|
||||
"on": "Obsazeno"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Zav\u0159eno",
|
||||
"on": "Otev\u0159eno"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Pry\u010d",
|
||||
"on": "Doma"
|
||||
},
|
||||
"problem": {
|
||||
"off": "V po\u0159\u00e1dku",
|
||||
"on": "Probl\u00e9m"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Zaji\u0161t\u011bno",
|
||||
"on": "Nezaji\u0161t\u011bno"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u017d\u00e1dn\u00fd d\u00fdm",
|
||||
"on": "Zji\u0161t\u011bn d\u00fdm"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Ticho",
|
||||
"on": "Zachycen zvuk"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Klid",
|
||||
"on": "Zji\u0161t\u011bny vibrace"
|
||||
},
|
||||
"window": {
|
||||
"off": "Zav\u0159eno",
|
||||
"on": "Otev\u0159eno"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Ne\u010dinn\u00fd",
|
||||
"recording": "Z\u00e1znam",
|
||||
"streaming": "Streamov\u00e1n\u00ed"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automatika",
|
||||
"cool": "Chlazen\u00ed",
|
||||
"dry": "Vysou\u0161en\u00ed",
|
||||
"fan_only": "Pouze ventil\u00e1tor",
|
||||
"heat": "Topen\u00ed",
|
||||
"heat_cool": "Vyt\u00e1p\u011bn\u00ed/Chlazen\u00ed",
|
||||
"off": "Neaktivn\u00ed"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Nakonfigurovat",
|
||||
"configured": "Nakonfigurov\u00e1no"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Zav\u0159eno",
|
||||
"closing": "Zav\u00edr\u00e1n\u00ed",
|
||||
"open": "Otev\u0159eno",
|
||||
"opening": "Otev\u00edr\u00e1n\u00ed",
|
||||
"stopped": "Zastaveno"
|
||||
},
|
||||
"default": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed",
|
||||
"unavailable": "Nen\u00ed k dispozici",
|
||||
"unknown": "Nezji\u0161t\u011bno"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Doma",
|
||||
"not_home": "Pry\u010d"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Zav\u0159eno",
|
||||
"closing": "Zav\u00edr\u00e1n\u00ed",
|
||||
"home": "Doma",
|
||||
"locked": "Zam\u010deno",
|
||||
"not_home": "Pry\u010d",
|
||||
"off": "Neaktivn\u00ed",
|
||||
"ok": "V po\u0159\u00e1dku",
|
||||
"on": "Aktivn\u00ed",
|
||||
"open": "Otev\u0159eno",
|
||||
"opening": "Otev\u00edr\u00e1n\u00ed",
|
||||
"problem": "Probl\u00e9m",
|
||||
"stopped": "Zastaveno",
|
||||
"unlocked": "Odem\u010deno"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"light": {
|
||||
"off": "Nesv\u00edt\u00ed",
|
||||
"on": "Sv\u00edt\u00ed"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Zam\u010deno",
|
||||
"unlocked": "Odem\u010deno"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Ne\u010dinn\u00fd",
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed",
|
||||
"paused": "Pozastaveno",
|
||||
"playing": "P\u0159ehr\u00e1v\u00e1n\u00ed",
|
||||
"standby": "Pohotovostn\u00ed re\u017eim"
|
||||
},
|
||||
"person": {
|
||||
"home": "Doma",
|
||||
"not_home": "Pry\u010d"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "V po\u0159\u00e1dku",
|
||||
"problem": "Probl\u00e9m"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Scen\u00e9rie"
|
||||
},
|
||||
"script": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Nad horizontem",
|
||||
"below_horizon": "Za horizontem"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Neaktivn\u00ed",
|
||||
"on": "Aktivn\u00ed"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktivn\u00ed",
|
||||
"idle": "ne\u010dinn\u00e9",
|
||||
"paused": "pozastaveno"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u010cist\u00ed",
|
||||
"docked": "V stanici",
|
||||
"error": "Chyba",
|
||||
"idle": "Ne\u010dinn\u00fd",
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"paused": "Pozastaveno",
|
||||
"returning": "N\u00e1vrat do stanice"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Jasn\u00e1 noc",
|
||||
"cloudy": "Zata\u017eeno",
|
||||
"exceptional": "Vyj\u00edme\u010dn\u00e9",
|
||||
"fog": "Mlha",
|
||||
"hail": "Krupobit\u00ed",
|
||||
"lightning": "Bou\u0159e",
|
||||
"lightning-rainy": "Bou\u0159e a d\u00e9\u0161\u0165",
|
||||
"partlycloudy": "Polojasno",
|
||||
"pouring": "Lij\u00e1k",
|
||||
"rainy": "D\u00e9\u0161\u0165",
|
||||
"snowy": "Sn\u00edh",
|
||||
"snowy-rainy": "D\u00e9\u0161\u0165 se sn\u011bhem",
|
||||
"sunny": "Slune\u010dno",
|
||||
"windy": "V\u011btrno",
|
||||
"windy-variant": "V\u011btrno"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Nereaguje",
|
||||
"initializing": "Inicializace",
|
||||
"ready": "P\u0159ipraveno",
|
||||
"sleeping": "\u00dasporn\u00fd re\u017eim"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Nereaguje ({query_stage})",
|
||||
"initializing": "Inicializace ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
243
cast/src/translations/cy.json
Normal file
243
cast/src/translations/cy.json
Normal file
@@ -0,0 +1,243 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Arfogi",
|
||||
"armed_away": "Arfog i ffwrdd",
|
||||
"armed_custom_bypass": "Ffordd osgoi larwm personol",
|
||||
"armed_home": "Arfogi gartref",
|
||||
"armed_night": "Arfog nos",
|
||||
"arming": "Arfogi",
|
||||
"disarmed": "Diarfogi",
|
||||
"disarming": "Ddiarfogi",
|
||||
"pending": "Yn yr arfaeth",
|
||||
"triggered": "Sbarduno"
|
||||
},
|
||||
"automation": {
|
||||
"off": "I ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Arferol",
|
||||
"on": "Isel"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Arferol",
|
||||
"on": "Oer"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Wedi datgysylltu",
|
||||
"on": "Cysylltiedig"
|
||||
},
|
||||
"default": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"door": {
|
||||
"off": "Cau",
|
||||
"on": "Agor"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Cau",
|
||||
"on": "Agor"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Clir",
|
||||
"on": "Wedi'i ganfod"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Arferol",
|
||||
"on": "Poeth"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Cloi",
|
||||
"on": "Dad-gloi"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Sych",
|
||||
"on": "Gwlyb"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Clir",
|
||||
"on": "Wedi'i ganfod"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Clir",
|
||||
"on": "Wedi'i ganfod"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Cau",
|
||||
"on": "Agor"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Allan",
|
||||
"on": "Gartref"
|
||||
},
|
||||
"problem": {
|
||||
"off": "iawn",
|
||||
"on": "Problem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Diogel",
|
||||
"on": "Anniogel"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Clir",
|
||||
"on": "Wedi'i ganfod"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Clir",
|
||||
"on": "Wedi'i ganfod"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Clir",
|
||||
"on": "Wedi'i ganfod"
|
||||
},
|
||||
"window": {
|
||||
"off": "Cau",
|
||||
"on": "Agored"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Segur",
|
||||
"recording": "Recordio",
|
||||
"streaming": "Ffrydio"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Awto",
|
||||
"cool": "Sefydlog",
|
||||
"dry": "Sych",
|
||||
"fan_only": "Fan yn unig",
|
||||
"heat": "Gwres",
|
||||
"off": "i ffwrdd"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Ffurfweddu",
|
||||
"configured": "Wedi'i ffurfweddu"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Ar gau",
|
||||
"closing": "Cau",
|
||||
"open": "Agor",
|
||||
"opening": "Yn agor",
|
||||
"stopped": "Stopio"
|
||||
},
|
||||
"default": {
|
||||
"off": "I ffwrdd",
|
||||
"on": "Ar",
|
||||
"unavailable": "Ddim ar gael",
|
||||
"unknown": "Anhysbys"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Gartref",
|
||||
"not_home": "Diim gartref"
|
||||
},
|
||||
"fan": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Wedi cau",
|
||||
"closing": "Yn cau",
|
||||
"home": "Gartref",
|
||||
"locked": " Cloi",
|
||||
"not_home": "Dim gartref",
|
||||
"off": "i ffwrdd",
|
||||
"ok": "Iawn",
|
||||
"on": "Ar",
|
||||
"open": "Agored",
|
||||
"opening": "Agor",
|
||||
"problem": "Problem",
|
||||
"stopped": "Stopio",
|
||||
"unlocked": "Dadgloi"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"light": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Wedi cloi",
|
||||
"unlocked": "Datgloi"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Segur",
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar",
|
||||
"paused": "Wedi rhewi",
|
||||
"playing": "Chwarae",
|
||||
"standby": "Gorffwys"
|
||||
},
|
||||
"person": {
|
||||
"home": "Gartref",
|
||||
"not_home": "I ffwrdd"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "Iawn",
|
||||
"problem": "Problem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Sefyllfa"
|
||||
},
|
||||
"script": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Dros y gorwel",
|
||||
"below_horizon": "Islaw'r gorwel"
|
||||
},
|
||||
"switch": {
|
||||
"off": "i ffwrdd",
|
||||
"on": "Ar"
|
||||
},
|
||||
"timer": {
|
||||
"active": "gweithredol",
|
||||
"idle": "segur",
|
||||
"paused": "wedi rhewi"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Clir, nos",
|
||||
"cloudy": "Cymylog",
|
||||
"fog": "Niwl",
|
||||
"hail": "Cenllysg",
|
||||
"lightning": "Mellt",
|
||||
"lightning-rainy": "Mellt, glawog",
|
||||
"partlycloudy": "Cymharol gymylog",
|
||||
"pouring": "Arllwys",
|
||||
"rainy": "Glawog",
|
||||
"snowy": "Eira",
|
||||
"snowy-rainy": "Eira, gwlyb",
|
||||
"sunny": "Heulog",
|
||||
"windy": "Gwyntog",
|
||||
"windy-variant": "Gwyntog"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Marw",
|
||||
"initializing": "Ymgychwyn",
|
||||
"ready": "Barod",
|
||||
"sleeping": "Cysgu"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Marw ({query_stage})",
|
||||
"initializing": "Ymgychwyn ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/da.json
Normal file
255
cast/src/translations/da.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Tilkoblet",
|
||||
"armed_away": "Tilkoblet ude",
|
||||
"armed_custom_bypass": "Tilkoblet brugerdefineret bypass",
|
||||
"armed_home": "Tilkoblet hjemme",
|
||||
"armed_night": "Tilkoblet nat",
|
||||
"arming": "Tilkobler",
|
||||
"disarmed": "Frakoblet",
|
||||
"disarming": "Frakobler",
|
||||
"pending": "Afventer",
|
||||
"triggered": "Udl\u00f8st"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
"on": "Lav"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normal",
|
||||
"on": "Kold"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Afbrudt",
|
||||
"on": "Forbundet"
|
||||
},
|
||||
"default": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"door": {
|
||||
"off": "Lukket",
|
||||
"on": "\u00c5ben"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Lukket",
|
||||
"on": "\u00c5ben"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Ikke registreret",
|
||||
"on": "Registreret"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normal",
|
||||
"on": "Varm"
|
||||
},
|
||||
"lock": {
|
||||
"off": "L\u00e5st",
|
||||
"on": "Ul\u00e5st"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "T\u00f8r",
|
||||
"on": "Fugtig"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Ikke registreret",
|
||||
"on": "Registreret"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Ikke registreret",
|
||||
"on": "Registreret"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Lukket",
|
||||
"on": "\u00c5ben"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Ude",
|
||||
"on": "Hjemme"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Problem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Sikret",
|
||||
"on": "Usikret"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Ikke registreret",
|
||||
"on": "Registreret"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Ikke registreret",
|
||||
"on": "Registreret"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Ikke registreret",
|
||||
"on": "Registreret"
|
||||
},
|
||||
"window": {
|
||||
"off": "Lukket",
|
||||
"on": "\u00c5ben"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Inaktiv",
|
||||
"recording": "Optager",
|
||||
"streaming": "Streamer"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Auto",
|
||||
"cool": "K\u00f8l",
|
||||
"dry": "T\u00f8r",
|
||||
"fan_only": "Kun bl\u00e6ser",
|
||||
"heat": "Varme",
|
||||
"heat_cool": "Opvarm/k\u00f8l",
|
||||
"off": "Fra"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Konfigurer",
|
||||
"configured": "Konfigureret"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Lukket",
|
||||
"closing": "Lukker",
|
||||
"open": "\u00c5ben",
|
||||
"opening": "\u00c5bner",
|
||||
"stopped": "Stoppet"
|
||||
},
|
||||
"default": {
|
||||
"off": "Fra",
|
||||
"on": "Til",
|
||||
"unavailable": "Utilg\u00e6ngelig",
|
||||
"unknown": "Ukendt"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Hjemme",
|
||||
"not_home": "Ude"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Lukket",
|
||||
"closing": "Lukker",
|
||||
"home": "Hjemme",
|
||||
"locked": "L\u00e5st",
|
||||
"not_home": "Ude",
|
||||
"off": "Fra",
|
||||
"ok": "OK",
|
||||
"on": "Til",
|
||||
"open": "\u00c5ben",
|
||||
"opening": "\u00c5bner",
|
||||
"problem": "Problem",
|
||||
"stopped": "Stoppet",
|
||||
"unlocked": "Ul\u00e5st"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"light": {
|
||||
"off": "Slukket",
|
||||
"on": "T\u00e6ndt"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "L\u00e5st",
|
||||
"unlocked": "Ul\u00e5st"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Inaktiv",
|
||||
"off": "Slukket",
|
||||
"on": "T\u00e6ndt",
|
||||
"paused": "Sat p\u00e5 pause",
|
||||
"playing": "Afspiller",
|
||||
"standby": "Standby"
|
||||
},
|
||||
"person": {
|
||||
"home": "Hjemme",
|
||||
"not_home": "Ude"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Problem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Slukket",
|
||||
"on": "T\u00e6ndt"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Skifter scene"
|
||||
},
|
||||
"script": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Over horisonten",
|
||||
"below_horizon": "Under horisonten"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Fra",
|
||||
"on": "Til"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktiv",
|
||||
"idle": "inaktiv",
|
||||
"paused": "pause"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "G\u00f8r rent",
|
||||
"docked": "I dock",
|
||||
"error": "Fejl",
|
||||
"idle": "Inaktiv",
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"paused": "Sat p\u00e5 pause",
|
||||
"returning": "Vender tilbage til dock"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Klart, nat",
|
||||
"cloudy": "Overskyet",
|
||||
"exceptional": "Enest\u00e5ende",
|
||||
"fog": "T\u00e5ge",
|
||||
"hail": "Hagl",
|
||||
"lightning": "Lyn",
|
||||
"lightning-rainy": "Lyn, regnvejr",
|
||||
"partlycloudy": "Delvist overskyet",
|
||||
"pouring": "Regnvejr",
|
||||
"rainy": "Regnfuldt",
|
||||
"snowy": "Sne",
|
||||
"snowy-rainy": "Sne, regn",
|
||||
"sunny": "Solrig",
|
||||
"windy": "Bl\u00e6sende",
|
||||
"windy-variant": "Bl\u00e6sende"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "D\u00f8d",
|
||||
"initializing": "Initialiserer",
|
||||
"ready": "Klar",
|
||||
"sleeping": "Sover"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "D\u00f8d ({query_stage})",
|
||||
"initializing": "Initialiserer ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/de.json
Normal file
255
cast/src/translations/de.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Aktiv",
|
||||
"armed_away": "Aktiv, abwesend",
|
||||
"armed_custom_bypass": "Aktiv, benutzerdefiniert",
|
||||
"armed_home": "Aktiv, zu Hause",
|
||||
"armed_night": "Aktiv, Nacht",
|
||||
"arming": "Aktiviere",
|
||||
"disarmed": "Inaktiv",
|
||||
"disarming": "Deaktiviere",
|
||||
"pending": "Ausstehend",
|
||||
"triggered": "Ausgel\u00f6st"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
"on": "Schwach"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normal",
|
||||
"on": "Kalt"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Getrennt",
|
||||
"on": "Verbunden"
|
||||
},
|
||||
"default": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"door": {
|
||||
"off": "Geschlossen",
|
||||
"on": "Offen"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Geschlossen",
|
||||
"on": "Offen"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Normal",
|
||||
"on": "Erkannt"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normal",
|
||||
"on": "Hei\u00df"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Verriegelt",
|
||||
"on": "Entriegelt"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Trocken",
|
||||
"on": "Nass"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Ruhig",
|
||||
"on": "Bewegung erkannt"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Frei",
|
||||
"on": "Belegt"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Geschlossen",
|
||||
"on": "Offen"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Abwesend",
|
||||
"on": "Zu Hause"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Problem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Sicher",
|
||||
"on": "Unsicher"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "OK",
|
||||
"on": "Rauch erkannt"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Stille",
|
||||
"on": "Ger\u00e4usch erkannt"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Normal",
|
||||
"on": "Vibration"
|
||||
},
|
||||
"window": {
|
||||
"off": "Geschlossen",
|
||||
"on": "Offen"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Unt\u00e4tig",
|
||||
"recording": "Aufnehmen",
|
||||
"streaming": "\u00dcbertr\u00e4gt"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automatisch",
|
||||
"cool": "K\u00fchlen",
|
||||
"dry": "Entfeuchten",
|
||||
"fan_only": "Nur Ventilator",
|
||||
"heat": "Heizen",
|
||||
"heat_cool": "Heizen/K\u00fchlen",
|
||||
"off": "Aus"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Konfigurieren",
|
||||
"configured": "Konfiguriert"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Geschlossen",
|
||||
"closing": "Schlie\u00dft",
|
||||
"open": "Offen",
|
||||
"opening": "\u00d6ffnet",
|
||||
"stopped": "Angehalten"
|
||||
},
|
||||
"default": {
|
||||
"off": "Aus",
|
||||
"on": "An",
|
||||
"unavailable": "Nicht verf\u00fcgbar",
|
||||
"unknown": "Unbekannt"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Zu Hause",
|
||||
"not_home": "Abwesend"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Geschlossen",
|
||||
"closing": "Schlie\u00dft",
|
||||
"home": "Zu Hause",
|
||||
"locked": "Verriegelt",
|
||||
"not_home": "Abwesend",
|
||||
"off": "Aus",
|
||||
"ok": "OK",
|
||||
"on": "An",
|
||||
"open": "Offen",
|
||||
"opening": "\u00d6ffnet",
|
||||
"problem": "Problem",
|
||||
"stopped": "Angehalten",
|
||||
"unlocked": "Entriegelt"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"light": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Verriegelt",
|
||||
"unlocked": "Entriegelt"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Unt\u00e4tig",
|
||||
"off": "Aus",
|
||||
"on": "An",
|
||||
"paused": "Pausiert",
|
||||
"playing": "Spielt",
|
||||
"standby": "Standby"
|
||||
},
|
||||
"person": {
|
||||
"home": "Zu Hause",
|
||||
"not_home": "Abwesend"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Problem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Szene"
|
||||
},
|
||||
"script": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u00dcber dem Horizont",
|
||||
"below_horizon": "Unter dem Horizont"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Aus",
|
||||
"on": "An"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktiv",
|
||||
"idle": "Leerlauf",
|
||||
"paused": "pausiert"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Reinigen",
|
||||
"docked": "Angedockt",
|
||||
"error": "Fehler",
|
||||
"idle": "Standby",
|
||||
"off": "Aus",
|
||||
"on": "An",
|
||||
"paused": "Pausiert",
|
||||
"returning": "R\u00fcckkehr zur Dockingstation"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Klare Nacht",
|
||||
"cloudy": "Bew\u00f6lkt",
|
||||
"exceptional": "Au\u00dfergew\u00f6hnlich",
|
||||
"fog": "Nebel",
|
||||
"hail": "Hagel",
|
||||
"lightning": "Gewitter",
|
||||
"lightning-rainy": "Gewitter, regnerisch",
|
||||
"partlycloudy": "Teilweise bew\u00f6lkt",
|
||||
"pouring": "Str\u00f6mend",
|
||||
"rainy": "Regnerisch",
|
||||
"snowy": "Verschneit",
|
||||
"snowy-rainy": "Verschneit, regnerisch",
|
||||
"sunny": "Sonnig",
|
||||
"windy": "Windig",
|
||||
"windy-variant": "Windig"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Nicht erreichbar",
|
||||
"initializing": "Initialisierend",
|
||||
"ready": "Bereit",
|
||||
"sleeping": "Schlafend"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Nicht erreichbar ({query_stage})",
|
||||
"initializing": "Initialisiere ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/el.json
Normal file
255
cast/src/translations/el.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2",
|
||||
"armed_away": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2 \u03bc\u03b1\u03ba\u03c1\u03b9\u03ac",
|
||||
"armed_custom_bypass": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03b7 \u03c0\u03b1\u03c1\u03ac\u03ba\u03b1\u03bc\u03c8\u03b7 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae",
|
||||
"armed_home": "\u03a3\u03c0\u03af\u03c4\u03b9 \u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf",
|
||||
"armed_night": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03b2\u03c1\u03ac\u03b4\u03c5",
|
||||
"arming": "\u038c\u03c0\u03bb\u03b9\u03c3\u03b7",
|
||||
"disarmed": "\u0391\u03c6\u03bf\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2",
|
||||
"disarming": "\u0391\u03c6\u03cc\u03c0\u03bb\u03b9\u03c3\u03b7",
|
||||
"pending": "\u0395\u03ba\u03ba\u03c1\u03b5\u03bc\u03ae\u03c2",
|
||||
"triggered": "\u03a0\u03b1\u03c1\u03b1\u03b2\u03af\u03b1\u03c3\u03b7"
|
||||
},
|
||||
"automation": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2 "
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "\u039a\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03cc\u03c2",
|
||||
"on": "\u03a7\u03b1\u03bc\u03b7\u03bb\u03cc\u03c2"
|
||||
},
|
||||
"cold": {
|
||||
"off": "\u03a6\u03c5\u03c3\u03b9\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03cc",
|
||||
"on": "\u039a\u03c1\u03cd\u03bf"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7",
|
||||
"on": "\u03a3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2",
|
||||
"on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2"
|
||||
},
|
||||
"door": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03ae",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03ae"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
|
||||
"on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
|
||||
},
|
||||
"heat": {
|
||||
"off": "\u03a6\u03c5\u03c3\u03b9\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03cc",
|
||||
"on": "\u039a\u03b1\u03c5\u03c4\u03cc"
|
||||
},
|
||||
"lock": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03bf",
|
||||
"on": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03bf"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "\u039e\u03b7\u03c1\u03cc",
|
||||
"on": "\u03a5\u03b3\u03c1\u03cc"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
|
||||
"on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
|
||||
"on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
|
||||
},
|
||||
"opening": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
},
|
||||
"presence": {
|
||||
"off": "\u0395\u03ba\u03c4\u03cc\u03c2",
|
||||
"on": "\u03a3\u03c0\u03af\u03c4\u03b9"
|
||||
},
|
||||
"problem": {
|
||||
"off": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
|
||||
"on": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1"
|
||||
},
|
||||
"safety": {
|
||||
"off": "\u0391\u03c3\u03c6\u03b1\u03bb\u03ae\u03c2",
|
||||
"on": "\u0391\u03bd\u03b1\u03c3\u03c6\u03b1\u03bb\u03ae\u03c2"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
|
||||
"on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
|
||||
"on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
|
||||
"on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
|
||||
},
|
||||
"window": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf",
|
||||
"on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "\u0391\u03b4\u03c1\u03b1\u03bd\u03ad\u03c2",
|
||||
"recording": "\u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03ac\u03c6\u03b5\u03b9",
|
||||
"streaming": "\u039c\u03b5\u03c4\u03ac\u03b4\u03bf\u03c3\u03b7 \u03a1\u03bf\u03ae\u03c2"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03bf",
|
||||
"cool": "\u0394\u03c1\u03bf\u03c3\u03b5\u03c1\u03cc",
|
||||
"dry": "\u039e\u03b7\u03c1\u03cc",
|
||||
"fan_only": "\u0391\u03bd\u03b5\u03bc\u03b9\u03c3\u03c4\u03ae\u03c1\u03b1\u03c2 \u03bc\u03cc\u03bd\u03bf",
|
||||
"heat": "\u0398\u03b5\u03c1\u03bc\u03cc",
|
||||
"heat_cool": "\u0398\u03ad\u03c1\u03bc\u03b1\u03bd\u03c3\u03b7 / \u03a8\u03cd\u03be\u03b7",
|
||||
"off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "\u0394\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03ce\u03c3\u03c4\u03b5",
|
||||
"configured": "\u0394\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03ce\u03b8\u03b7\u03ba\u03b5"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"closing": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf",
|
||||
"open": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc",
|
||||
"opening": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1",
|
||||
"stopped": "\u03a3\u03c4\u03b1\u03bc\u03ac\u03c4\u03b7\u03c3\u03b5"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc",
|
||||
"unavailable": "\u039c\u03b7 \u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf",
|
||||
"unknown": "\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03b7"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "\u03a3\u03c0\u03af\u03c4\u03b9",
|
||||
"not_home": "\u0395\u03ba\u03c4\u03cc\u03c2 \u03a3\u03c0\u03b9\u03c4\u03b9\u03bf\u03cd"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
},
|
||||
"group": {
|
||||
"closed": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"closing": "\u039a\u03bb\u03b5\u03af\u03bd\u03b5\u03b9",
|
||||
"home": "\u03a3\u03c0\u03af\u03c4\u03b9",
|
||||
"locked": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03bf",
|
||||
"not_home": "\u0395\u03ba\u03c4\u03cc\u03c2 \u03a3\u03c0\u03b9\u03c4\u03b9\u03bf\u03cd",
|
||||
"off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc",
|
||||
"ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
|
||||
"on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
|
||||
"open": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc",
|
||||
"opening": "\u0391\u03bd\u03bf\u03af\u03b3\u03b5\u03b9",
|
||||
"problem": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1",
|
||||
"stopped": "\u03a3\u03c4\u03b1\u03bc\u03b1\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf",
|
||||
"unlocked": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03bf"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03b7",
|
||||
"unlocked": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03b7"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1",
|
||||
"off": "\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
|
||||
"on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
|
||||
"paused": "\u03a3\u03b5 \u03a0\u03b1\u03cd\u03c3\u03b7",
|
||||
"playing": "\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2",
|
||||
"standby": "\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bc\u03bf\u03bd\u03ae\u03c2"
|
||||
},
|
||||
"person": {
|
||||
"home": "\u03a3\u03c0\u03af\u03c4\u03b9",
|
||||
"not_home": "\u0395\u03ba\u03c4\u03cc\u03c2"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
|
||||
"problem": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "\u03a3\u03ba\u03af\u03c4\u03c3\u03bf"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc",
|
||||
"on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u03a0\u03ac\u03bd\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03bf\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1",
|
||||
"below_horizon": "\u039a\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03bf\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1"
|
||||
},
|
||||
"switch": {
|
||||
"off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
|
||||
"on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
|
||||
},
|
||||
"timer": {
|
||||
"active": "\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc",
|
||||
"idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1",
|
||||
"paused": "\u03c3\u03b5 \u03c0\u03b1\u03cd\u03c3\u03b7"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",
|
||||
"docked": "\u039a\u03b1\u03c1\u03c6\u03b9\u03c4\u03c3\u03c9\u03bc\u03ad\u03bd\u03bf",
|
||||
"error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1",
|
||||
"idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1",
|
||||
"off": "\u039c\u03b7 \u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
|
||||
"on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
|
||||
"paused": "\u03a0\u03b1\u03cd\u03c3\u03b7",
|
||||
"returning": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03bf dock"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "\u039e\u03b1\u03c3\u03c4\u03b5\u03c1\u03b9\u03ac, \u03bd\u03cd\u03c7\u03c4\u03b1",
|
||||
"cloudy": "\u039d\u03b5\u03c6\u03b5\u03bb\u03ce\u03b4\u03b7\u03c2",
|
||||
"exceptional": "\u0395\u03be\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc",
|
||||
"fog": "\u039f\u03bc\u03af\u03c7\u03bb\u03b7",
|
||||
"hail": "\u03a7\u03b1\u03bb\u03ac\u03b6\u03b9",
|
||||
"lightning": "\u0391\u03c3\u03c4\u03c1\u03b1\u03c0\u03ae",
|
||||
"lightning-rainy": "\u039a\u03b1\u03c4\u03b1\u03b9\u03b3\u03af\u03b4\u03b1, \u03b2\u03c1\u03bf\u03c7\u03b5\u03c1\u03cc",
|
||||
"partlycloudy": "\u039c\u03b5\u03c1\u03b9\u03ba\u03ce\u03c2 \u03bd\u03b5\u03c6\u03b5\u03bb\u03ce\u03b4\u03b7\u03c2",
|
||||
"pouring": "\u03a8\u03b9\u03c7\u03b1\u03bb\u03af\u03b6\u03b5\u03b9",
|
||||
"rainy": "\u0392\u03c1\u03bf\u03c7\u03b5\u03c1\u03ae",
|
||||
"snowy": "\u03a7\u03b9\u03bf\u03bd\u03ce\u03b4\u03b7\u03c2",
|
||||
"snowy-rainy": "\u03a7\u03b9\u03bf\u03bd\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf, \u03b2\u03c1\u03bf\u03c7\u03b5\u03c1\u03cc",
|
||||
"sunny": "\u0397\u03bb\u03b9\u03cc\u03bb\u03bf\u03c5\u03c3\u03c4\u03bf",
|
||||
"windy": "\u0398\u03c5\u03b5\u03bb\u03bb\u03ce\u03b4\u03b5\u03b9\u03c2",
|
||||
"windy-variant": "\u0398\u03c5\u03b5\u03bb\u03bb\u03ce\u03b4\u03b5\u03b9\u03c2"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "\u039d\u03b5\u03ba\u03c1\u03cc",
|
||||
"initializing": "\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
|
||||
"ready": "\u0388\u03c4\u03bf\u03b9\u03bc\u03bf",
|
||||
"sleeping": "\u039a\u03bf\u03b9\u03bc\u03ac\u03c4\u03b1\u03b9"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "\u039d\u03b5\u03ba\u03c1\u03cc ( {query_stage} )",
|
||||
"initializing": "\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/es-419.json
Normal file
255
cast/src/translations/es-419.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Armado",
|
||||
"armed_away": "Armado Fuera de Casa",
|
||||
"armed_custom_bypass": "Armada zona espec\u00edfica",
|
||||
"armed_home": "Armado en Casa",
|
||||
"armed_night": "Armado Nocturno",
|
||||
"arming": "Armando",
|
||||
"disarmed": "Desarmado",
|
||||
"disarming": "Desarmando",
|
||||
"pending": "Pendiente",
|
||||
"triggered": "Activado"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Desactivado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
"on": "Baja"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normal",
|
||||
"on": "Fr\u00edo"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Desconectado",
|
||||
"on": "Conectado"
|
||||
},
|
||||
"default": {
|
||||
"off": "Desactivado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"door": {
|
||||
"off": "Cerrada",
|
||||
"on": "Abierta"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Cerrada",
|
||||
"on": "Abierta"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Despejado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normal",
|
||||
"on": "Caliente"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Bloqueado",
|
||||
"on": "Desbloqueado"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Seco",
|
||||
"on": "Humedo"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Despejado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Despejado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Cerrado",
|
||||
"on": "Abierto"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Fuera de casa",
|
||||
"on": "En Casa"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Problema"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Seguro",
|
||||
"on": "Inseguro"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Despejado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Despejado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Despejado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"window": {
|
||||
"off": "Cerrada",
|
||||
"on": "Abierta"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Desactivado",
|
||||
"on": "Activado"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Inactivo",
|
||||
"recording": "Grabando",
|
||||
"streaming": "Streaming"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automatico",
|
||||
"cool": "Enfriar",
|
||||
"dry": "Seco",
|
||||
"fan_only": "S\u00f3lo ventilador",
|
||||
"heat": "Calentar",
|
||||
"heat_cool": "Calentar/Enfriar",
|
||||
"off": "Desactivar"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurado"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Cerrado",
|
||||
"closing": "Cerrando",
|
||||
"open": "Abierto",
|
||||
"opening": "Abriendo",
|
||||
"stopped": "Detenido"
|
||||
},
|
||||
"default": {
|
||||
"off": "Desactivado",
|
||||
"on": "Encendido",
|
||||
"unavailable": "No disponible",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "En Casa",
|
||||
"not_home": "Fuera de Casa"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Desactivado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Cerrado",
|
||||
"closing": "Cerrando",
|
||||
"home": "En casa",
|
||||
"locked": "Cerrado",
|
||||
"not_home": "Fuera de Casa",
|
||||
"off": "Apagado",
|
||||
"ok": "OK",
|
||||
"on": "Encendido",
|
||||
"open": "Abierto",
|
||||
"opening": "Abriendo",
|
||||
"problem": "Problema",
|
||||
"stopped": "Detenido",
|
||||
"unlocked": "Abierto"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"light": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Cerrado",
|
||||
"unlocked": "Abierto"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Inactivo",
|
||||
"off": "Apagado",
|
||||
"on": "Encendido",
|
||||
"paused": "Pausado",
|
||||
"playing": "Reproduciendo",
|
||||
"standby": "Modo de espera"
|
||||
},
|
||||
"person": {
|
||||
"home": "En casa",
|
||||
"not_home": "Fuera de casa"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Problema"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Reproduciendo Escena"
|
||||
},
|
||||
"script": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "",
|
||||
"on": ""
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Sobre el horizonte",
|
||||
"below_horizon": "Bajo el horizonte"
|
||||
},
|
||||
"switch": {
|
||||
"off": "",
|
||||
"on": ""
|
||||
},
|
||||
"timer": {
|
||||
"active": "activo",
|
||||
"idle": "inactivo",
|
||||
"paused": "pausado"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Limpiando",
|
||||
"docked": "Acoplado",
|
||||
"error": "Error",
|
||||
"idle": "Inactivo",
|
||||
"off": "Encendida",
|
||||
"on": "Apagada",
|
||||
"paused": "Pausado",
|
||||
"returning": "Regresar al dock"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Despejado, de noche",
|
||||
"cloudy": "Nublado",
|
||||
"exceptional": "Excepcional",
|
||||
"fog": "Niebla",
|
||||
"hail": "Granizo",
|
||||
"lightning": "Rel\u00e1mpagos",
|
||||
"lightning-rainy": "Rel\u00e1mpagos, lluvioso",
|
||||
"partlycloudy": "Parcialmente nublado",
|
||||
"pouring": "Torrencial",
|
||||
"rainy": "Lluvioso",
|
||||
"snowy": "Nevado",
|
||||
"snowy-rainy": "Nevado, lluvioso",
|
||||
"sunny": "Soleado",
|
||||
"windy": "Ventoso",
|
||||
"windy-variant": "Ventoso"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Desconectado",
|
||||
"initializing": "Iniciando",
|
||||
"ready": "Listo",
|
||||
"sleeping": "Hibernacion"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Desconectado ({query_stage})",
|
||||
"initializing": "Iniciando ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/es.json
Normal file
255
cast/src/translations/es.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Armado",
|
||||
"armed_away": "Armado fuera de casa",
|
||||
"armed_custom_bypass": "Armada Zona Espec\u00edfica",
|
||||
"armed_home": "Armado en casa",
|
||||
"armed_night": "Armado noche",
|
||||
"arming": "Armando",
|
||||
"disarmed": "Desarmado",
|
||||
"disarming": "Desarmando",
|
||||
"pending": "Pendiente",
|
||||
"triggered": "Disparada"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendida"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
"on": "Bajo"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normal",
|
||||
"on": "Frio"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Desconectado",
|
||||
"on": "Conectado"
|
||||
},
|
||||
"default": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"door": {
|
||||
"off": "Cerrada",
|
||||
"on": "Abierta"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Cerrada",
|
||||
"on": "Abierta"
|
||||
},
|
||||
"gas": {
|
||||
"off": "No detectado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normal",
|
||||
"on": "Caliente"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Bloqueado",
|
||||
"on": "Desbloqueado"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Seco",
|
||||
"on": "H\u00famedo"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Sin movimiento",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "No detectado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Cerrado",
|
||||
"on": "Abierto"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Fuera de casa",
|
||||
"on": "En casa"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Problema"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Seguro",
|
||||
"on": "Inseguro"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "No detectado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"sound": {
|
||||
"off": "No detectado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "No detectado",
|
||||
"on": "Detectado"
|
||||
},
|
||||
"window": {
|
||||
"off": "Cerrada",
|
||||
"on": "Abierta"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Inactivo",
|
||||
"recording": "Grabando",
|
||||
"streaming": "Transmitiendo"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Autom\u00e1tico",
|
||||
"cool": "Fr\u00edo",
|
||||
"dry": "Seco",
|
||||
"fan_only": "S\u00f3lo ventilador",
|
||||
"heat": "Calor",
|
||||
"heat_cool": "Calor/Fr\u00edo",
|
||||
"off": "Apagado"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Configurar",
|
||||
"configured": "Configurado"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Cerrado",
|
||||
"closing": "Cerrando",
|
||||
"open": "Abierto",
|
||||
"opening": "Abriendo",
|
||||
"stopped": "Detenido"
|
||||
},
|
||||
"default": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido",
|
||||
"unavailable": "No disponible",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "En casa",
|
||||
"not_home": "Fuera de casa"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Cerrado",
|
||||
"closing": "Cerrando",
|
||||
"home": "En casa",
|
||||
"locked": "Bloqueado",
|
||||
"not_home": "Fuera de casa",
|
||||
"off": "Apagado",
|
||||
"ok": "OK",
|
||||
"on": "Encendido",
|
||||
"open": "Abierto",
|
||||
"opening": "Abriendo",
|
||||
"problem": "Problema",
|
||||
"stopped": "Detenido",
|
||||
"unlocked": "Desbloqueado"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"light": {
|
||||
"off": "Apagada",
|
||||
"on": "Encendida"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Bloqueado",
|
||||
"unlocked": "Desbloqueado"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Inactivo",
|
||||
"off": "Apagado",
|
||||
"on": "Encendido",
|
||||
"paused": "En pausa",
|
||||
"playing": "Reproduciendo",
|
||||
"standby": "Apagado"
|
||||
},
|
||||
"person": {
|
||||
"home": "Casa",
|
||||
"not_home": "Fuera de casa"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Problema"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "En escena"
|
||||
},
|
||||
"script": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Sobre el horizonte",
|
||||
"below_horizon": "Bajo el horizonte"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Apagado",
|
||||
"on": "Encendido"
|
||||
},
|
||||
"timer": {
|
||||
"active": "activo",
|
||||
"idle": "inactivo",
|
||||
"paused": "pausado"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Limpiando",
|
||||
"docked": "En base",
|
||||
"error": "Error",
|
||||
"idle": "Inactivo",
|
||||
"off": "Apagado",
|
||||
"on": "Encendido",
|
||||
"paused": "En pausa",
|
||||
"returning": "Volviendo a la base"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Despejado, de noche",
|
||||
"cloudy": "Nublado",
|
||||
"exceptional": "Excepcional",
|
||||
"fog": "Niebla",
|
||||
"hail": "Granizo",
|
||||
"lightning": "Rel\u00e1mpagos",
|
||||
"lightning-rainy": "Rel\u00e1mpagos, lluvioso",
|
||||
"partlycloudy": "Parcialmente nublado",
|
||||
"pouring": "Torrencial",
|
||||
"rainy": "Lluvioso",
|
||||
"snowy": "Nevado",
|
||||
"snowy-rainy": "Nevado, lluvioso",
|
||||
"sunny": "Soleado",
|
||||
"windy": "Ventoso",
|
||||
"windy-variant": "Ventoso"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "No responde",
|
||||
"initializing": "Inicializando",
|
||||
"ready": "Listo",
|
||||
"sleeping": "Ahorro de energ\u00eda"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "No responde ({query_stage})",
|
||||
"initializing": "Inicializando ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/et.json
Normal file
255
cast/src/translations/et.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Valves",
|
||||
"armed_away": "Valves eemal",
|
||||
"armed_custom_bypass": "Valves, eranditega",
|
||||
"armed_home": "Valves kodus",
|
||||
"armed_night": "Valves \u00f6ine",
|
||||
"arming": "Valvestab",
|
||||
"disarmed": "Maas",
|
||||
"disarming": "Maas...",
|
||||
"pending": "Ootel",
|
||||
"triggered": "H\u00e4ires"
|
||||
},
|
||||
"automation": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Tavaline",
|
||||
"on": "Madal"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normaalne",
|
||||
"on": "Jahe"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Lahti \u00fchendatud",
|
||||
"on": "\u00dchendatud"
|
||||
},
|
||||
"default": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"door": {
|
||||
"off": "Suletud",
|
||||
"on": "Avatud"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Suletud",
|
||||
"on": "Avatud"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Puudub",
|
||||
"on": "Tuvastatud"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normaalne",
|
||||
"on": "Palav"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Lukus",
|
||||
"on": "Lukustamata"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Kuiv",
|
||||
"on": "M\u00e4rg"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Puudub",
|
||||
"on": "Tuvastatud"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Puudub",
|
||||
"on": "Tuvastatud"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Suletud",
|
||||
"on": "Avatud"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Eemal",
|
||||
"on": "Kodus"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Probleem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Ohutu",
|
||||
"on": "Ohtlik"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Puudub",
|
||||
"on": "Tuvastatud"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Puudub",
|
||||
"on": "Tuvastatud"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Puudub",
|
||||
"on": "Tuvastatud"
|
||||
},
|
||||
"window": {
|
||||
"off": "Suletud",
|
||||
"on": "Avatud"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Ootel",
|
||||
"recording": "Salvestab",
|
||||
"streaming": "Voogedastab"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automaatne",
|
||||
"cool": "Jahuta",
|
||||
"dry": "Kuiv",
|
||||
"fan_only": "Ainult ventilaator",
|
||||
"heat": "Soojenda",
|
||||
"heat_cool": "K\u00fcta/jahuta",
|
||||
"off": "V\u00e4ljas"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Seadista",
|
||||
"configured": "Seadistatud"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Suletud",
|
||||
"closing": "Sulgub",
|
||||
"open": "Avatud",
|
||||
"opening": "Avaneb",
|
||||
"stopped": "Peatatud"
|
||||
},
|
||||
"default": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees",
|
||||
"unavailable": "Kadunud",
|
||||
"unknown": "Teadmata"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Kodus",
|
||||
"not_home": "Eemal"
|
||||
},
|
||||
"fan": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Suletud",
|
||||
"closing": "Sulgub",
|
||||
"home": "Kodus",
|
||||
"locked": "Lukus",
|
||||
"not_home": "Eemal",
|
||||
"off": "V\u00e4ljas",
|
||||
"ok": "OK",
|
||||
"on": "Sees",
|
||||
"open": "Avatud",
|
||||
"opening": "Avaneb",
|
||||
"problem": "Probleem",
|
||||
"stopped": "Peatunud",
|
||||
"unlocked": "Lukustamata"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"light": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Lukus",
|
||||
"unlocked": "Lahti"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Ootel",
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees",
|
||||
"paused": "Peatatud",
|
||||
"playing": "M\u00e4ngib",
|
||||
"standby": "Unere\u017eiimil"
|
||||
},
|
||||
"person": {
|
||||
"home": "Kodus",
|
||||
"not_home": "Eemal"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Probleem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Stseenis"
|
||||
},
|
||||
"script": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "T\u00f5usnud",
|
||||
"below_horizon": "Loojunud"
|
||||
},
|
||||
"switch": {
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktiivne",
|
||||
"idle": "ootel",
|
||||
"paused": "peatatud"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Puhastamine",
|
||||
"docked": "Dokitud",
|
||||
"error": "Viga",
|
||||
"idle": "Ootel",
|
||||
"off": "V\u00e4ljas",
|
||||
"on": "Sees",
|
||||
"paused": "Peatatud",
|
||||
"returning": "P\u00f6\u00f6rdun tagasi dokki"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Selge \u00f6\u00f6",
|
||||
"cloudy": "Pilves",
|
||||
"exceptional": "Erakordne",
|
||||
"fog": "Udu",
|
||||
"hail": "Rahe",
|
||||
"lightning": "\u00c4ikeseline",
|
||||
"lightning-rainy": "\u00c4ikeseline, vihmane",
|
||||
"partlycloudy": "Osaliselt pilves",
|
||||
"pouring": "Kallab",
|
||||
"rainy": "Vihmane",
|
||||
"snowy": "Lumine",
|
||||
"snowy-rainy": "L\u00f6rtsine",
|
||||
"sunny": "P\u00e4ikeseline",
|
||||
"windy": "Tuuline",
|
||||
"windy-variant": "Tuuline"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Surnud",
|
||||
"initializing": "L\u00e4htestan",
|
||||
"ready": "Valmis",
|
||||
"sleeping": "Ootel"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Surnud ({query_stage})",
|
||||
"initializing": "L\u00e4htestan ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
198
cast/src/translations/eu.json
Normal file
198
cast/src/translations/eu.json
Normal file
@@ -0,0 +1,198 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"pending": "Zain",
|
||||
"triggered": "Abiarazita"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normala",
|
||||
"on": "Baxua"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normala",
|
||||
"on": "Hotza"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Deskonektatuta",
|
||||
"on": "Konektatuta"
|
||||
},
|
||||
"default": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"door": {
|
||||
"off": "Itxita",
|
||||
"on": "Ireki"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Itxita",
|
||||
"on": "Ireki"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normala",
|
||||
"on": "Beroa"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Itxita",
|
||||
"on": "Irekita"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Lehorra",
|
||||
"on": "Buztita"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Itxita",
|
||||
"on": "Ireki"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Kanpoan",
|
||||
"on": "Etxean"
|
||||
},
|
||||
"problem": {
|
||||
"off": "Ondo",
|
||||
"on": "Arazoa"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Babestuta"
|
||||
},
|
||||
"window": {
|
||||
"off": "Itxita",
|
||||
"on": "Ireki"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"camera": {
|
||||
"recording": "Grabatzen"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automatikoa",
|
||||
"cool": "Hotza",
|
||||
"dry": "Lehorra",
|
||||
"fan_only": "Haizagailua bakarrik",
|
||||
"heat": "Beroa",
|
||||
"off": "Itzalita"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Konfiguratu",
|
||||
"configured": "Konfiguratuta"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Itxita",
|
||||
"closing": "Ixten",
|
||||
"open": "Irekita",
|
||||
"opening": "Irekitzen",
|
||||
"stopped": "Geldituta"
|
||||
},
|
||||
"default": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta",
|
||||
"unavailable": "Ez dago erabilgarri",
|
||||
"unknown": "Ezezaguna"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Etxean",
|
||||
"not_home": "Kanpoan"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Itxita",
|
||||
"closing": "Ixten",
|
||||
"home": "Etxean",
|
||||
"not_home": "Kanpoan",
|
||||
"off": "Itzalita",
|
||||
"ok": "Itzalita",
|
||||
"on": "Piztuta",
|
||||
"open": "Ireki",
|
||||
"opening": "Irekitzen",
|
||||
"problem": "Arazoa",
|
||||
"stopped": "Geldirik"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"light": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"media_player": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"person": {
|
||||
"home": "Etxean",
|
||||
"not_home": "Kanpoan"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "Itzalita",
|
||||
"problem": "Arazoa"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"script": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Horizonte gainetik",
|
||||
"below_horizon": "Horizonte azpitik"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Garbitzen",
|
||||
"docked": "Basean",
|
||||
"error": "Errorea",
|
||||
"off": "Itzalita",
|
||||
"on": "Piztuta",
|
||||
"returning": "Basera itzultzen"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Garbia, gaua",
|
||||
"cloudy": "Hodeitsua",
|
||||
"fog": "Lainoa",
|
||||
"hail": "Txingorra",
|
||||
"lightning": "Tximistak",
|
||||
"lightning-rainy": "Tximistak, euritsua",
|
||||
"partlycloudy": "Ostarteak",
|
||||
"pouring": "Botatzen",
|
||||
"rainy": "Euritsua",
|
||||
"snowy": "Elurtsua",
|
||||
"snowy-rainy": "Elurtsua, euritsua",
|
||||
"sunny": "Eguzkitsua",
|
||||
"windy": "Haizetsua",
|
||||
"windy-variant": "Haizetsua"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Hilda",
|
||||
"initializing": "Hasieratzen",
|
||||
"ready": "Prest",
|
||||
"sleeping": "Lotan"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Ez du erantzuten ({query_stage})",
|
||||
"initializing": "Hasieratzen ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
247
cast/src/translations/fa.json
Normal file
247
cast/src/translations/fa.json
Normal file
@@ -0,0 +1,247 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u0645\u0635\u0644\u062d \u0634\u062f\u0647",
|
||||
"armed_away": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u0628\u06cc\u0631\u0648\u0646",
|
||||
"armed_custom_bypass": "\u0628\u0627\u06cc\u06af\u0627\u0646\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u0633\u0644\u062d",
|
||||
"armed_home": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u062e\u0627\u0646\u0647",
|
||||
"armed_night": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u0634\u0628",
|
||||
"arming": "\u062f\u0631 \u062d\u0627\u0644 \u0645\u0633\u0644\u062d \u06a9\u0631\u062f\u0646",
|
||||
"disarmed": "\u063a\u06cc\u0631 \u0645\u0633\u0644\u062d",
|
||||
"disarming": "\u062f\u0631 \u062d\u0627\u0644 \u063a\u06cc\u0631 \u0645\u0633\u0644\u062d \u06a9\u0631\u062f\u0646",
|
||||
"pending": "\u062f\u0631 \u0627\u0646\u062a\u0638\u0627\u0631",
|
||||
"triggered": "\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u062e\u062a\u0647 \u0634\u062f\u0647"
|
||||
},
|
||||
"automation": {
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0641\u0639\u0627\u0644"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u06a9\u0645"
|
||||
},
|
||||
"cold": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u0633\u0631\u062f"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "\u0642\u0637\u0639 ",
|
||||
"on": "\u0645\u062a\u0635\u0644"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0631\u0648\u0634\u0646"
|
||||
},
|
||||
"door": {
|
||||
"off": "\u0628\u0633\u062a\u0647",
|
||||
"on": "\u0628\u0627\u0632"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "\u0628\u0633\u062a\u0647",
|
||||
"on": "\u0628\u0627\u0632"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
|
||||
},
|
||||
"heat": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u062f\u0627\u063a"
|
||||
},
|
||||
"lock": {
|
||||
"off": "\u0642\u0641\u0644",
|
||||
"on": "\u0628\u0627\u0632"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "\u062e\u0634\u06a9",
|
||||
"on": "\u0645\u0631\u0637\u0648\u0628"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
|
||||
},
|
||||
"opening": {
|
||||
"off": "\u0628\u0633\u062a\u0647 \u0634\u062f\u0647",
|
||||
"on": "\u0628\u0627\u0632"
|
||||
},
|
||||
"presence": {
|
||||
"off": "\u0628\u06cc\u0631\u0648\u0646",
|
||||
"on": "\u062e\u0627\u0646\u0647"
|
||||
},
|
||||
"problem": {
|
||||
"off": "\u062e\u0648\u0628",
|
||||
"on": "\u0645\u0634\u06a9\u0644"
|
||||
},
|
||||
"safety": {
|
||||
"off": "\u0627\u0645\u0646",
|
||||
"on": "\u0646\u0627 \u0627\u0645\u0646"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u0639\u0627\u062f\u06cc",
|
||||
"on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646",
|
||||
"on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
|
||||
},
|
||||
"window": {
|
||||
"off": "\u0628\u0633\u062a\u0647",
|
||||
"on": "\u0628\u0627\u0632"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
|
||||
"on": "\u0641\u0639\u0627\u0644"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "\u0628\u06cc\u06a9\u0627\u0631",
|
||||
"recording": "\u062f\u0631 \u062d\u0627\u0644 \u0636\u0628\u0637",
|
||||
"streaming": "\u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "\u062e\u0648\u062f\u06a9\u0627\u0631",
|
||||
"cool": "\u062e\u0646\u06a9",
|
||||
"dry": "\u062e\u0634\u06a9",
|
||||
"fan_only": "\u0641\u0642\u0637 \u067e\u0646\u06a9\u0647",
|
||||
"heat": "\u062d\u0631\u0627\u0631\u062a",
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc",
|
||||
"configured": "\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "\u0628\u0633\u062a\u0647 \u0634\u062f\u0647",
|
||||
"closing": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0633\u062a\u0647 \u0634\u062f\u0646",
|
||||
"open": "\u0628\u0627\u0632",
|
||||
"opening": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0632 \u0634\u062f\u0646",
|
||||
"stopped": "\u0645\u062a\u0648\u0642\u0641"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0631\u0648\u0634\u0646",
|
||||
"unavailable": "\u063a\u06cc\u0631\u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633",
|
||||
"unknown": "\u0646\u0627\u0645\u0634\u062e\u0635"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "\u062e\u0627\u0646\u0647",
|
||||
"not_home": "\u0628\u06cc\u0631\u0648\u0646"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0631\u0648\u0634\u0646"
|
||||
},
|
||||
"group": {
|
||||
"closed": "\u0628\u0633\u062a\u0647",
|
||||
"closing": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0633\u062a\u0647 \u0634\u062f\u0646",
|
||||
"home": "\u062e\u0627\u0646\u0647",
|
||||
"locked": "\u0642\u0641\u0644 \u0634\u062f\u0647",
|
||||
"not_home": "\u0628\u06cc\u0631\u0648\u0646",
|
||||
"off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
|
||||
"ok": "\u062e\u0648\u0628",
|
||||
"on": "\u0641\u0639\u0627\u0644",
|
||||
"open": "\u0628\u0627\u0632",
|
||||
"opening": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0632 \u0634\u062f\u0646",
|
||||
"problem": "\u0645\u0634\u06a9\u0644",
|
||||
"stopped": "\u0645\u062a\u0648\u0642\u0641",
|
||||
"unlocked": "\u0628\u0627\u0632"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
|
||||
"on": "\u0641\u0639\u0627\u0644"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0631\u0648\u0634\u0646"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "\u0642\u0641\u0644 \u0634\u062f\u0647",
|
||||
"unlocked": "\u0628\u0627\u0632"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "\u0628\u06cc\u06a9\u0627\u0631",
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0631\u0648\u0634\u0646",
|
||||
"paused": "\u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u06a9\u062b",
|
||||
"playing": "\u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634",
|
||||
"standby": "\u0622\u0645\u0627\u062f\u0647 \u0628\u0647 \u06a9\u0627\u0631"
|
||||
},
|
||||
"person": {
|
||||
"home": "\u062e\u0627\u0646\u0647",
|
||||
"not_home": "\u0628\u06cc\u0631\u0648\u0646"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u062e\u0648\u0628",
|
||||
"problem": "\u0645\u0634\u06a9\u0644"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0631\u0648\u0634\u0646"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "\u0635\u062d\u0646\u0647"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
|
||||
"on": "\u0641\u0639\u0627\u0644"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "\u063a\u06cc\u0631 \u0641\u0639\u0627\u0644",
|
||||
"on": "\u0641\u0639\u0627\u0644"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u0628\u0627\u0644\u0627\u06cc \u0627\u0641\u0642",
|
||||
"below_horizon": "\u0632\u06cc\u0631 \u0627\u0641\u0642"
|
||||
},
|
||||
"switch": {
|
||||
"off": "\u062e\u0627\u0645\u0648\u0634",
|
||||
"on": "\u0631\u0648\u0634\u0646"
|
||||
},
|
||||
"timer": {
|
||||
"active": "\u0641\u0639\u0627\u0644",
|
||||
"idle": "\u0628\u06cc\u06a9\u0627\u0631 ",
|
||||
"paused": "\u0645\u062a\u0648\u0642\u0641 \u0634\u062f"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u062a\u0645\u06cc\u0632 \u06a9\u0631\u062f\u0646",
|
||||
"off": "\u063a\u06cc\u0631 \u0641\u0639\u0627\u0644",
|
||||
"on": "\u0641\u063a\u0627\u0644",
|
||||
"paused": "\u0645\u06a9\u062b"
|
||||
},
|
||||
"weather": {
|
||||
"cloudy": "\u0627\u0628\u0631\u06cc",
|
||||
"fog": "\u0645\u0647",
|
||||
"hail": "\u062a\u06af\u0631\u06af",
|
||||
"lightning": "\u0631\u0639\u062f \u0648 \u0628\u0631\u0642",
|
||||
"partlycloudy": "\u0646\u06cc\u0645\u0647 \u0627\u0628\u0631\u06cc",
|
||||
"pouring": "\u0631\u06cc\u062e\u062a\u0646",
|
||||
"rainy": "\u0628\u0627\u0631\u0627\u0646\u06cc",
|
||||
"snowy": "\u0628\u0631\u0641\u06cc",
|
||||
"snowy-rainy": "\u0628\u0631\u0641\u06cc\u060c \u0628\u0627\u0631\u0627\u0646\u06cc",
|
||||
"sunny": "\u0622\u0641\u062a\u0627\u0628\u06cc",
|
||||
"windy": "\u0628\u0627\u062f",
|
||||
"windy-variant": "\u0628\u0627\u062f"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "\u0645\u0631\u062f\u0647",
|
||||
"initializing": "\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646",
|
||||
"ready": "\u0622\u0645\u0627\u062f\u0647",
|
||||
"sleeping": "\u062f\u0631 \u062d\u0627\u0644 \u062e\u0648\u0627\u0628"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "\u0645\u0631\u062f\u0647 ({query_stage})",
|
||||
"initializing": "\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646 ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/fi.json
Normal file
255
cast/src/translations/fi.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Viritetty",
|
||||
"armed_away": "Viritetty (poissa)",
|
||||
"armed_custom_bypass": "Virityksen ohittaminen",
|
||||
"armed_home": "Viritetty (kotona)",
|
||||
"armed_night": "Viritetty (y\u00f6)",
|
||||
"arming": "Viritys",
|
||||
"disarmed": "Viritys pois",
|
||||
"disarming": "Virityksen poisto",
|
||||
"pending": "Odottaa",
|
||||
"triggered": "Lauennut"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normaali",
|
||||
"on": "Alhainen"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normaali",
|
||||
"on": "Kylm\u00e4"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Ei yhteytt\u00e4",
|
||||
"on": "Yhdistetty"
|
||||
},
|
||||
"default": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"door": {
|
||||
"off": "Suljettu",
|
||||
"on": "Auki"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Suljettu",
|
||||
"on": "Auki"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Pois",
|
||||
"on": "Havaittu"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normaali",
|
||||
"on": "Kuuma"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Lukittu",
|
||||
"on": "Auki"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Kuiva",
|
||||
"on": "Kostea"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Ei liikett\u00e4",
|
||||
"on": "Havaittu"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Ei liikett\u00e4",
|
||||
"on": "Havaittu"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Suljettu",
|
||||
"on": "Auki"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Poissa",
|
||||
"on": "Kotona"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Ongelma"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Turvallinen",
|
||||
"on": "Vaarallinen"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Ei savua",
|
||||
"on": "Havaittu"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Ei \u00e4\u00e4nt\u00e4",
|
||||
"on": "Havaittu"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Ei v\u00e4rin\u00e4\u00e4",
|
||||
"on": "Havaittu"
|
||||
},
|
||||
"window": {
|
||||
"off": "Suljettu",
|
||||
"on": "Auki"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Pois p\u00e4\u00e4lt\u00e4",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Lepotilassa",
|
||||
"recording": "Tallentaa",
|
||||
"streaming": "Toistaa"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automaatilla",
|
||||
"cool": "J\u00e4\u00e4hdytys",
|
||||
"dry": "Kuivaus",
|
||||
"fan_only": "Tuuletus",
|
||||
"heat": "L\u00e4mmitys",
|
||||
"heat_cool": "L\u00e4mmitys/j\u00e4\u00e4hdytys",
|
||||
"off": "Pois"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "M\u00e4\u00e4rittele",
|
||||
"configured": "M\u00e4\u00e4ritetty"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Suljettu",
|
||||
"closing": "Suljetaan",
|
||||
"open": "Auki",
|
||||
"opening": "Avataan",
|
||||
"stopped": "Pys\u00e4ytetty"
|
||||
},
|
||||
"default": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4",
|
||||
"unavailable": "Ei saatavissa",
|
||||
"unknown": "Tuntematon"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Kotona",
|
||||
"not_home": "Poissa"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Suljettu",
|
||||
"closing": "Suljetaan",
|
||||
"home": "Kotona",
|
||||
"locked": "Lukittu",
|
||||
"not_home": "Poissa",
|
||||
"off": "Pois",
|
||||
"ok": "Ok",
|
||||
"on": "P\u00e4\u00e4ll\u00e4",
|
||||
"open": "Auki",
|
||||
"opening": "Avataan",
|
||||
"problem": "Ongelma",
|
||||
"stopped": "Pys\u00e4ytetty",
|
||||
"unlocked": "Avattu"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"light": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Lukittu",
|
||||
"unlocked": "Auki"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Lepotilassa",
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4",
|
||||
"paused": "Pys\u00e4ytetty",
|
||||
"playing": "Toistaa",
|
||||
"standby": "Lepotilassa"
|
||||
},
|
||||
"person": {
|
||||
"home": "Koti",
|
||||
"not_home": "Poissa"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "Ok",
|
||||
"problem": "Ongelma"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Skenehallinta"
|
||||
},
|
||||
"script": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Horisontin yll\u00e4",
|
||||
"below_horizon": "Horisontin alapuolella"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Pois",
|
||||
"on": "P\u00e4\u00e4ll\u00e4"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktiivinen",
|
||||
"idle": "Lepotilassa",
|
||||
"paused": "Pys\u00e4ytetty"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Imuroi",
|
||||
"docked": "Telakoituna",
|
||||
"error": "Virhe",
|
||||
"idle": "Lepotilassa",
|
||||
"off": "Pois p\u00e4\u00e4lt\u00e4",
|
||||
"on": "P\u00e4\u00e4ll\u00e4",
|
||||
"paused": "Pys\u00e4ytetty",
|
||||
"returning": "Palaamassa telakkaan"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Y\u00f6, selke\u00e4\u00e4",
|
||||
"cloudy": "Pilvist\u00e4",
|
||||
"exceptional": "Poikkeuksellinen",
|
||||
"fog": "Sumuista",
|
||||
"hail": "Raekuuroja",
|
||||
"lightning": "Ukkoskuuroja",
|
||||
"lightning-rainy": "Ukkosvaara, sateista",
|
||||
"partlycloudy": "Osittain pilvist\u00e4",
|
||||
"pouring": "Kaatosadetta",
|
||||
"rainy": "Sateista",
|
||||
"snowy": "Lumisadetta",
|
||||
"snowy-rainy": "R\u00e4nt\u00e4sadetta",
|
||||
"sunny": "Aurinkoista",
|
||||
"windy": "Tuulista",
|
||||
"windy-variant": "Tuulista"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Kuollut",
|
||||
"initializing": "Alustaa",
|
||||
"ready": "Valmis",
|
||||
"sleeping": "Lepotilassa"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Kuollut ({query_stage})",
|
||||
"initializing": "Alustaa ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/fr.json
Normal file
255
cast/src/translations/fr.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Activ\u00e9",
|
||||
"armed_away": "Enclench\u00e9e (absent)",
|
||||
"armed_custom_bypass": "Activ\u00e9e avec exception",
|
||||
"armed_home": "Enclench\u00e9e (pr\u00e9sent)",
|
||||
"armed_night": "Enclench\u00e9 (nuit)",
|
||||
"arming": "Activation",
|
||||
"disarmed": "D\u00e9sactiv\u00e9e",
|
||||
"disarming": "D\u00e9sactivation",
|
||||
"pending": "En attente",
|
||||
"triggered": "D\u00e9clench\u00e9"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Inactif",
|
||||
"on": "Actif"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
"on": "Faible"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normale",
|
||||
"on": "Froid"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "D\u00e9connect\u00e9",
|
||||
"on": "Connect\u00e9"
|
||||
},
|
||||
"default": {
|
||||
"off": "Inactif",
|
||||
"on": "Actif"
|
||||
},
|
||||
"door": {
|
||||
"off": "Ferm\u00e9e",
|
||||
"on": "Ouverte"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Ferm\u00e9e",
|
||||
"on": "Ouverte"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Non d\u00e9tect\u00e9",
|
||||
"on": "D\u00e9tect\u00e9"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normale",
|
||||
"on": "Chaud"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Verrouill\u00e9",
|
||||
"on": "D\u00e9verrouill\u00e9"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Sec",
|
||||
"on": "Humide"
|
||||
},
|
||||
"motion": {
|
||||
"off": "RAS",
|
||||
"on": "D\u00e9tect\u00e9"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "RAS",
|
||||
"on": "D\u00e9tect\u00e9"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Ferm\u00e9",
|
||||
"on": "Ouvert"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Absent",
|
||||
"on": "Pr\u00e9sent"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Probl\u00e8me"
|
||||
},
|
||||
"safety": {
|
||||
"off": "S\u00e9curis\u00e9",
|
||||
"on": "Dangereux"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "RAS",
|
||||
"on": "D\u00e9tect\u00e9"
|
||||
},
|
||||
"sound": {
|
||||
"off": "RAS",
|
||||
"on": "D\u00e9tect\u00e9"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "RAS",
|
||||
"on": "D\u00e9tect\u00e9e"
|
||||
},
|
||||
"window": {
|
||||
"off": "Ferm\u00e9e",
|
||||
"on": "Ouverte"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Inactif",
|
||||
"on": "Actif"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "En veille",
|
||||
"recording": "Enregistrement",
|
||||
"streaming": "Diffusion en cours"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Auto",
|
||||
"cool": "Frais",
|
||||
"dry": "Sec",
|
||||
"fan_only": "Ventilateur seul",
|
||||
"heat": "Chauffe",
|
||||
"heat_cool": "Chaud/Froid",
|
||||
"off": "Inactif"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Configurer",
|
||||
"configured": "Configur\u00e9"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Ferm\u00e9",
|
||||
"closing": "Fermeture",
|
||||
"open": "Ouvert",
|
||||
"opening": "Ouverture",
|
||||
"stopped": "Arr\u00eat\u00e9"
|
||||
},
|
||||
"default": {
|
||||
"off": "Inactif",
|
||||
"on": "Actif",
|
||||
"unavailable": "Indisponible",
|
||||
"unknown": "Inconnu"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Pr\u00e9sent",
|
||||
"not_home": "Absent"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u00c9teint",
|
||||
"on": "Marche"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Ferm\u00e9",
|
||||
"closing": "Fermeture",
|
||||
"home": "Pr\u00e9sent",
|
||||
"locked": "Verrouill\u00e9",
|
||||
"not_home": "Absent",
|
||||
"off": "Inactif",
|
||||
"ok": "OK",
|
||||
"on": "Actif",
|
||||
"open": "Ouvert",
|
||||
"opening": "Ouverture",
|
||||
"problem": "Probl\u00e8me",
|
||||
"stopped": "Arr\u00eat\u00e9",
|
||||
"unlocked": "D\u00e9verrouill\u00e9"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Arr\u00eat\u00e9",
|
||||
"on": "Marche"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u00c9teinte",
|
||||
"on": "Actif"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Verrouill\u00e9",
|
||||
"unlocked": "D\u00e9verrouill\u00e9"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "En veille",
|
||||
"off": "\u00c9teint",
|
||||
"on": "Marche",
|
||||
"paused": "En pause",
|
||||
"playing": "Lecture en cours",
|
||||
"standby": "En veille"
|
||||
},
|
||||
"person": {
|
||||
"home": "Pr\u00e9sent",
|
||||
"not_home": "Absent"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Probl\u00e8me"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Arr\u00eat",
|
||||
"on": "Actif"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Sc\u00e9nario"
|
||||
},
|
||||
"script": {
|
||||
"off": "Inactif",
|
||||
"on": "Actif"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Inactif",
|
||||
"on": "Actif"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Au-dessus de l'horizon",
|
||||
"below_horizon": "Sous l\u2019horizon"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Inactif",
|
||||
"on": "On"
|
||||
},
|
||||
"timer": {
|
||||
"active": "actif",
|
||||
"idle": "en veille",
|
||||
"paused": "en pause"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Nettoyage",
|
||||
"docked": "Sur la base",
|
||||
"error": "Erreur",
|
||||
"idle": "Inactif",
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"paused": "En pause",
|
||||
"returning": "Retourne \u00e0 la base"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Nuit d\u00e9gag\u00e9e",
|
||||
"cloudy": "Nuageux",
|
||||
"exceptional": "Exceptionnel",
|
||||
"fog": "Brouillard",
|
||||
"hail": "Gr\u00eale",
|
||||
"lightning": "Orage",
|
||||
"lightning-rainy": "Orage / Pluie",
|
||||
"partlycloudy": "Partiellement nuageux",
|
||||
"pouring": "Averses",
|
||||
"rainy": "Pluie",
|
||||
"snowy": "Neige",
|
||||
"snowy-rainy": "Neige / Pluie",
|
||||
"sunny": "Soleil",
|
||||
"windy": "Vent",
|
||||
"windy-variant": "Vent"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Morte",
|
||||
"initializing": "Initialisation",
|
||||
"ready": "Pr\u00eat",
|
||||
"sleeping": "En veille"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Morte ( {query_stage} )",
|
||||
"initializing": "Initialisation ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
219
cast/src/translations/gsw.json
Normal file
219
cast/src/translations/gsw.json
Normal file
@@ -0,0 +1,219 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Scharf",
|
||||
"armed_away": "Scharf usswerts",
|
||||
"armed_home": "Scharf dihei",
|
||||
"armed_night": "Scharf Nacht",
|
||||
"arming": "Scharf stel\u00e4",
|
||||
"disarmed": "Nid scharf",
|
||||
"disarming": "Entsperr\u00e4",
|
||||
"pending": "Usstehehnd",
|
||||
"triggered": "Usgl\u00f6sst"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normau",
|
||||
"on": "Nidrig"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Trennt",
|
||||
"on": "Verbunge"
|
||||
},
|
||||
"default": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Frei",
|
||||
"on": "Erk\u00e4nnt"
|
||||
},
|
||||
"heat": {
|
||||
"on": "Heiss"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Troch\u00e4",
|
||||
"on": "Nass"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Ok",
|
||||
"on": "Erch\u00e4nt"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Ok",
|
||||
"on": "Erch\u00e4nt"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Gschlos\u00e4",
|
||||
"on": "Off\u00e4"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Nid Dahei",
|
||||
"on": "Dahei"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Problem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Sicher",
|
||||
"on": "Unsicher"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Ok",
|
||||
"on": "Erch\u00e4nt"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Ok",
|
||||
"on": "Erch\u00e4nt"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Ok",
|
||||
"on": "Erch\u00e4nt"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "L\u00e4\u00e4rlauf",
|
||||
"recording": "Nimt uf",
|
||||
"streaming": "Streamt"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automatik",
|
||||
"cool": "Ch\u00fc\u00e4l\u00e4",
|
||||
"dry": "Troch\u00e4",
|
||||
"fan_only": "Nur L\u00fcfter",
|
||||
"heat": "Heiz\u00e4",
|
||||
"off": "Us"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Konfiguri\u00e4r\u00e4",
|
||||
"configured": "Konfiguri\u00e4rt"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Gschloss\u00e4",
|
||||
"closing": "Am schliesse",
|
||||
"open": "Off\u00e4",
|
||||
"opening": "Am \u00f6ffn\u00e4",
|
||||
"stopped": "Gstoppt"
|
||||
},
|
||||
"default": {
|
||||
"off": "Us",
|
||||
"on": "Ah",
|
||||
"unavailable": "Nid verf\u00fc\u00e4gbar",
|
||||
"unknown": "Unbekannt"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Dahei",
|
||||
"not_home": "Nid Dahei"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Gschloss\u00e4",
|
||||
"closing": "Schl\u00fcss\u00e4",
|
||||
"home": "Dahei",
|
||||
"locked": "Gsperrt",
|
||||
"not_home": "Nid Dahei",
|
||||
"off": "Us",
|
||||
"ok": "Ok",
|
||||
"on": "Ah",
|
||||
"open": "Off\u00e4",
|
||||
"opening": "Am \u00f6ffn\u00e4",
|
||||
"problem": "Problem",
|
||||
"stopped": "Gstoppt",
|
||||
"unlocked": "Entsperrt"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"light": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Gsperrt",
|
||||
"unlocked": "Entsperrt"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "L\u00e4\u00e4rlauf",
|
||||
"off": "Us",
|
||||
"on": "Ah",
|
||||
"paused": "Pousi\u00e4r\u00e4",
|
||||
"playing": "Am spil\u00e4",
|
||||
"standby": "Standby"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Problem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Szen\u00e4"
|
||||
},
|
||||
"script": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u00dcberem Horizont",
|
||||
"below_horizon": "Underem Horizont"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Us",
|
||||
"on": "Ah"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Putze",
|
||||
"error": "F\u00e4hler",
|
||||
"off": "Us",
|
||||
"on": "I",
|
||||
"paused": "Pause"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Klar, Nacht",
|
||||
"cloudy": "Bedeckt",
|
||||
"fog": "N\u00e4bu",
|
||||
"hail": "H\u00e4gu",
|
||||
"lightning": "Blitz\u00e4",
|
||||
"lightning-rainy": "Blitz\u00e4, R\u00e4ge",
|
||||
"partlycloudy": "Teilwis bedeckt",
|
||||
"pouring": "Sch\u00fctte",
|
||||
"rainy": "R\u00e4gn\u00e4risch",
|
||||
"snowy": "Schneie",
|
||||
"snowy-rainy": "Schneie, r\u00e4gnerisch",
|
||||
"sunny": "sunnig",
|
||||
"windy": "windig",
|
||||
"windy-variant": "windig"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Tod",
|
||||
"initializing": "Inizialisi\u00e4r\u00e4",
|
||||
"ready": "Parat",
|
||||
"sleeping": "Schlaf\u00e4"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Tod ({query_stage})",
|
||||
"initializing": "Inizialisi\u00e4r\u00e4 ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/he.json
Normal file
255
cast/src/translations/he.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u05d3\u05e8\u05d5\u05da",
|
||||
"armed_away": "\u05d3\u05e8\u05d5\u05da \u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea",
|
||||
"armed_custom_bypass": "\u05de\u05e2\u05e7\u05e3 \u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea \u05d3\u05e8\u05d5\u05da",
|
||||
"armed_home": "\u05d4\u05d1\u05d9\u05ea \u05d3\u05e8\u05d5\u05da",
|
||||
"armed_night": "\u05d3\u05e8\u05d5\u05da \u05dc\u05d9\u05dc\u05d4",
|
||||
"arming": "\u05de\u05e4\u05e2\u05d9\u05dc",
|
||||
"disarmed": "\u05de\u05e0\u05d5\u05d8\u05e8\u05dc",
|
||||
"disarming": "\u05de\u05e0\u05d8\u05e8\u05dc",
|
||||
"pending": "\u05de\u05de\u05ea\u05d9\u05df",
|
||||
"triggered": "\u05d4\u05d5\u05e4\u05e2\u05dc"
|
||||
},
|
||||
"automation": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "\u05e0\u05d5\u05e8\u05de\u05dc\u05d9",
|
||||
"on": "\u05e0\u05de\u05d5\u05da"
|
||||
},
|
||||
"cold": {
|
||||
"off": "\u05e8\u05d2\u05d9\u05dc",
|
||||
"on": "\u05e7\u05b7\u05e8"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "\u05de\u05e0\u05d5\u05ea\u05e7",
|
||||
"on": "\u05de\u05d7\u05d5\u05d1\u05e8"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"door": {
|
||||
"off": "\u05e1\u05d2\u05d5\u05e8\u05d4",
|
||||
"on": "\u05e4\u05ea\u05d5\u05d7\u05d4"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "\u05e1\u05d2\u05d5\u05e8\u05d4",
|
||||
"on": "\u05e4\u05ea\u05d5\u05d7\u05d4"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u05e0\u05e7\u05d9",
|
||||
"on": "\u05d0\u05d5\u05ea\u05e8"
|
||||
},
|
||||
"heat": {
|
||||
"off": "\u05e8\u05d2\u05d9\u05dc",
|
||||
"on": "\u05d7\u05dd"
|
||||
},
|
||||
"lock": {
|
||||
"off": "\u05e0\u05e2\u05d5\u05dc",
|
||||
"on": "\u05dc\u05d0 \u05e0\u05e2\u05d5\u05dc"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "\u05d9\u05d1\u05e9",
|
||||
"on": "\u05e8\u05d8\u05d5\u05d1"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u05e0\u05e7\u05d9",
|
||||
"on": "\u05d6\u05d5\u05d4\u05d4"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u05e0\u05e7\u05d9",
|
||||
"on": "\u05d6\u05d5\u05d4\u05d4"
|
||||
},
|
||||
"opening": {
|
||||
"off": "\u05e1\u05d2\u05d5\u05e8",
|
||||
"on": "\u05e4\u05ea\u05d5\u05d7"
|
||||
},
|
||||
"presence": {
|
||||
"off": "\u05dc\u05d0 \u05e0\u05d5\u05db\u05d7",
|
||||
"on": "\u05e0\u05d5\u05db\u05d7"
|
||||
},
|
||||
"problem": {
|
||||
"off": "\u05d0\u05d5\u05e7\u05d9\u05d9",
|
||||
"on": "\u05d1\u05e2\u05d9\u05d9\u05d4"
|
||||
},
|
||||
"safety": {
|
||||
"off": "\u05d1\u05d8\u05d5\u05d7",
|
||||
"on": "\u05dc\u05d0 \u05d1\u05d8\u05d5\u05d7"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u05e0\u05e7\u05d9",
|
||||
"on": "\u05d0\u05d5\u05ea\u05e8"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u05e0\u05e7\u05d9",
|
||||
"on": "\u05d0\u05d5\u05ea\u05e8"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u05e0\u05e7\u05d9",
|
||||
"on": "\u05d0\u05d5\u05ea\u05e8"
|
||||
},
|
||||
"window": {
|
||||
"off": "\u05e1\u05d2\u05d5\u05e8",
|
||||
"on": "\u05e4\u05ea\u05d5\u05d7"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "\u05de\u05d7\u05db\u05d4",
|
||||
"recording": "\u05de\u05e7\u05dc\u05d9\u05d8",
|
||||
"streaming": "\u05de\u05d6\u05e8\u05d9\u05dd"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "\u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9",
|
||||
"cool": "\u05e7\u05e8\u05d5\u05e8",
|
||||
"dry": "\u05d9\u05d1\u05e9",
|
||||
"fan_only": "\u05de\u05d0\u05d5\u05d5\u05e8\u05e8 \u05d1\u05dc\u05d1\u05d3",
|
||||
"heat": "\u05d7\u05d9\u05de\u05d5\u05dd",
|
||||
"heat_cool": "\u05d7\u05d9\u05de\u05d5\u05dd/\u05e7\u05d9\u05e8\u05d5\u05e8",
|
||||
"off": "\u05db\u05d1\u05d5\u05d9"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "\u05d4\u05d2\u05d3\u05e8",
|
||||
"configured": "\u05d4\u05d5\u05d2\u05d3\u05e8"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "\u05e0\u05e1\u05d2\u05e8",
|
||||
"closing": "\u05e1\u05d5\u05d2\u05e8",
|
||||
"open": "\u05e4\u05ea\u05d5\u05d7",
|
||||
"opening": "\u05e4\u05d5\u05ea\u05d7",
|
||||
"stopped": "\u05e2\u05e6\u05d5\u05e8"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05de\u05d5\u05e4\u05e2\u05dc",
|
||||
"unavailable": "\u05dc\u05d0 \u05d6\u05de\u05d9\u05df",
|
||||
"unknown": "\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "\u05d1\u05d1\u05d9\u05ea",
|
||||
"not_home": "\u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"group": {
|
||||
"closed": "\u05e1\u05d2\u05d5\u05e8",
|
||||
"closing": "\u05e1\u05d5\u05d2\u05e8",
|
||||
"home": "\u05d1\u05d1\u05d9\u05ea",
|
||||
"locked": "\u05e0\u05e2\u05d5\u05dc",
|
||||
"not_home": "\u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea",
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"ok": "\u05ea\u05e7\u05d9\u05df",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7",
|
||||
"open": "\u05e4\u05ea\u05d5\u05d7",
|
||||
"opening": "\u05e4\u05d5\u05ea\u05d7",
|
||||
"problem": "\u05d1\u05e2\u05d9\u05d4",
|
||||
"stopped": "\u05e0\u05e2\u05e6\u05e8",
|
||||
"unlocked": "\u05e4\u05ea\u05d5\u05d7"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "\u05e0\u05e2\u05d5\u05dc",
|
||||
"unlocked": "\u05e4\u05ea\u05d5\u05d7"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "\u05de\u05de\u05ea\u05d9\u05df",
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7",
|
||||
"paused": "\u05de\u05d5\u05e9\u05d4\u05d4",
|
||||
"playing": "\u05de\u05e0\u05d2\u05df",
|
||||
"standby": "\u05de\u05e6\u05d1 \u05d4\u05de\u05ea\u05e0\u05d4"
|
||||
},
|
||||
"person": {
|
||||
"home": "\u05d1\u05d1\u05d9\u05ea",
|
||||
"not_home": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u05ea\u05e7\u05d9\u05df",
|
||||
"problem": "\u05d1\u05e2\u05d9\u05d4"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "\u05de\u05e4\u05e2\u05d9\u05dc \u05e1\u05e6\u05e0\u05d4"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u05de\u05e2\u05dc \u05d4\u05d0\u05d5\u05e4\u05e7",
|
||||
"below_horizon": "\u05de\u05ea\u05d7\u05ea \u05dc\u05d0\u05d5\u05e4\u05e7"
|
||||
},
|
||||
"switch": {
|
||||
"off": "\u05db\u05d1\u05d5\u05d9",
|
||||
"on": "\u05d3\u05dc\u05d5\u05e7"
|
||||
},
|
||||
"timer": {
|
||||
"active": "\u05e4\u05e2\u05d9\u05dc",
|
||||
"idle": "\u05dc\u05d0 \u05e4\u05e2\u05d9\u05dc",
|
||||
"paused": "\u05de\u05d5\u05e9\u05d4\u05d4"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u05de\u05e0\u05e7\u05d4",
|
||||
"docked": "\u05d1\u05e2\u05d2\u05d9\u05e0\u05d4",
|
||||
"error": "\u05e9\u05d2\u05d9\u05d0\u05d4",
|
||||
"idle": "\u05de\u05de\u05ea\u05d9\u05df",
|
||||
"off": "\u05de\u05db\u05d5\u05d1\u05d4",
|
||||
"on": "\u05de\u05d5\u05e4\u05e2\u05dc",
|
||||
"paused": "\u05de\u05d5\u05e9\u05d4\u05d4",
|
||||
"returning": "\u05d7\u05d6\u05d5\u05e8 \u05dc\u05e2\u05d2\u05d9\u05e0\u05d4"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "\u05dc\u05d9\u05dc\u05d4 \u05d1\u05d4\u05d9\u05e8",
|
||||
"cloudy": "\u05de\u05e2\u05d5\u05e0\u05df",
|
||||
"exceptional": "\u05d9\u05d5\u05e6\u05d0 \u05d3\u05d5\u05e4\u05df",
|
||||
"fog": "\u05e2\u05e8\u05e4\u05dc",
|
||||
"hail": "\u05d1\u05e8\u05d3",
|
||||
"lightning": "\u05d1\u05e8\u05e7",
|
||||
"lightning-rainy": "\u05d1\u05e8\u05e7, \u05d2\u05e9\u05d5\u05dd",
|
||||
"partlycloudy": "\u05de\u05e2\u05d5\u05e0\u05df \u05d7\u05dc\u05e7\u05d9\u05ea",
|
||||
"pouring": "\u05d2\u05e9\u05d5\u05dd",
|
||||
"rainy": "\u05d2\u05e9\u05d5\u05dd",
|
||||
"snowy": "\u05de\u05d5\u05e9\u05dc\u05d2",
|
||||
"snowy-rainy": "\u05de\u05d5\u05e9\u05dc\u05d2, \u05d2\u05e9\u05d5\u05dd",
|
||||
"sunny": "\u05e9\u05de\u05e9\u05d9",
|
||||
"windy": "\u05e1\u05d5\u05e2\u05e8",
|
||||
"windy-variant": "\u05e1\u05d5\u05e2\u05e8"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "\u05de\u05ea",
|
||||
"initializing": "\u05de\u05d0\u05ea\u05d7\u05dc",
|
||||
"ready": "\u05de\u05d5\u05db\u05df",
|
||||
"sleeping": "\u05d9\u05e9\u05df"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "\u05de\u05ea ({query_stage})",
|
||||
"initializing": "\u05de\u05d0\u05ea\u05d7\u05dc ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
129
cast/src/translations/hi.json
Normal file
129
cast/src/translations/hi.json
Normal file
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"state": {
|
||||
"automation": {
|
||||
"off": "\u092c\u0902\u0926"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "\u0938\u093e\u0927\u093e\u0930\u0923",
|
||||
"on": "\u0915\u092e"
|
||||
},
|
||||
"cold": {
|
||||
"off": "\u0938\u093e\u0927\u093e\u0930\u0923",
|
||||
"on": "\u0938\u0930\u094d\u0926\u0940"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "\u0921\u093f\u0938\u094d\u0915\u0928\u0947\u0915\u094d\u091f \u0915\u093f\u092f\u093e \u0917\u092f\u093e",
|
||||
"on": "\u091c\u0941\u0921\u093c\u0947 \u0939\u0941\u090f"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u092c\u0902\u0926"
|
||||
},
|
||||
"door": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u0916\u0941\u0932\u093e"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u0916\u0941\u0932\u093e"
|
||||
},
|
||||
"heat": {
|
||||
"on": "\u0917\u0930\u094d\u092e"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u0935\u093f\u0936\u0926",
|
||||
"on": "\u0905\u0928\u0941\u0938\u0928\u094d\u0927\u093e\u0928\u093f\u0924"
|
||||
},
|
||||
"opening": {
|
||||
"on": "\u0916\u0941\u0932\u093e"
|
||||
},
|
||||
"presence": {
|
||||
"on": "\u0918\u0930"
|
||||
},
|
||||
"window": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u0916\u0941\u0932\u0940"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u092c\u0902\u0926"
|
||||
},
|
||||
"camera": {
|
||||
"recording": "\u0930\u093f\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917"
|
||||
},
|
||||
"climate": {
|
||||
"cool": "\u0920\u0902\u0921\u093e",
|
||||
"dry": "\u0938\u0942\u0916\u093e",
|
||||
"heat": "\u0917\u0930\u094d\u092e\u0940",
|
||||
"off": "\u092c\u0902\u0926"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"unavailable": "\u0905\u0928\u0941\u092a\u0932\u092c\u094d\u0927",
|
||||
"unknown": "\u0905\u0928\u091c\u093e\u0928"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "\u0918\u0930"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"group": {
|
||||
"home": "\u0918\u0930",
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942",
|
||||
"problem": "\u0938\u092e\u0938\u094d\u092f\u093e"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "\u0905\u0935\u0930\u094b\u0927\u093f\u0924",
|
||||
"unlocked": "\u0916\u0941\u0932\u093e"
|
||||
},
|
||||
"media_player": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u0920\u0940\u0915 \u0939\u0948",
|
||||
"problem": "\u0938\u092e\u0938\u094d\u092f\u093e"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u0915\u094d\u0937\u093f\u0924\u093f\u091c \u0938\u0947 \u090a\u092a\u0930",
|
||||
"below_horizon": "\u0915\u094d\u0937\u093f\u0924\u093f\u091c \u0915\u0947 \u0928\u0940\u091a\u0947"
|
||||
},
|
||||
"switch": {
|
||||
"off": "\u092c\u0902\u0926",
|
||||
"on": "\u091a\u093e\u0932\u0942"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"ready": "\u0924\u0948\u092f\u093e\u0930",
|
||||
"sleeping": "\u0938\u094b\u092f\u093e \u0939\u0941\u0906"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": " ( {query_stage} )",
|
||||
"initializing": "\u0906\u0930\u0902\u092d ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/hr.json
Normal file
255
cast/src/translations/hr.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Aktiviran",
|
||||
"armed_away": "Aktiviran odsutno",
|
||||
"armed_custom_bypass": "Aktiviran",
|
||||
"armed_home": "Aktiviran doma",
|
||||
"armed_night": "Aktiviran no\u010dni",
|
||||
"arming": "Aktiviranje",
|
||||
"disarmed": "Deaktiviran",
|
||||
"disarming": "Deaktiviranje",
|
||||
"pending": "U tijeku",
|
||||
"triggered": "Okinut"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normalno",
|
||||
"on": "Prazna"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normalno",
|
||||
"on": "Hladno"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Nije spojen",
|
||||
"on": "Spojen"
|
||||
},
|
||||
"default": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"door": {
|
||||
"off": "Zatvoreno",
|
||||
"on": "Otvori"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Zatvoren",
|
||||
"on": "Otvoreno"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u010cisto",
|
||||
"on": "Otkriveno"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normalno",
|
||||
"on": "Vru\u0107e"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Zaklju\u010dano",
|
||||
"on": "Otklju\u010dano"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Suho",
|
||||
"on": "Mokro"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u010cisto",
|
||||
"on": "Otkriveno"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u010cisto",
|
||||
"on": "Otkriveno"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Zatvoreno",
|
||||
"on": "Otvoreno"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Odsutan",
|
||||
"on": "Doma"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Problem"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Sigurno",
|
||||
"on": "Nesigurno"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u010cisto",
|
||||
"on": "Otkriveno"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u010cisto",
|
||||
"on": "Otkriveno"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u010cisto",
|
||||
"on": "Otkriveno"
|
||||
},
|
||||
"window": {
|
||||
"off": "Zatvoreno",
|
||||
"on": "Otvoreno"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Neaktivan",
|
||||
"recording": "Snimanje",
|
||||
"streaming": "Oda\u0161ilja"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Auto",
|
||||
"cool": "Hla\u0111enje",
|
||||
"dry": "Suho",
|
||||
"fan_only": "Samo ventilator",
|
||||
"heat": "Grijanje",
|
||||
"heat_cool": "Grijanje/Hla\u0111enje",
|
||||
"off": "Isklju\u010den"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Konfiguriranje",
|
||||
"configured": "Konfiguriran"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Zatvoreno",
|
||||
"closing": "Zatvaranje",
|
||||
"open": "Otvoreno",
|
||||
"opening": "Otvaranje",
|
||||
"stopped": "zaustavljen"
|
||||
},
|
||||
"default": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den",
|
||||
"unavailable": "Nedostupan",
|
||||
"unknown": "Nepoznato"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Doma",
|
||||
"not_home": "Odsutan"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Zatvoreno",
|
||||
"closing": "Zatvaranje",
|
||||
"home": "Doma",
|
||||
"locked": "Zaklju\u010dano",
|
||||
"not_home": "Odsutan",
|
||||
"off": "Uklju\u010deno",
|
||||
"ok": "U redu",
|
||||
"on": "Uklju\u010deno",
|
||||
"open": "Otvoreno",
|
||||
"opening": "Otvaranje",
|
||||
"problem": "Problem",
|
||||
"stopped": "Zautavljeno",
|
||||
"unlocked": "Otklju\u010dano"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"light": {
|
||||
"off": "Isklju\u010deno",
|
||||
"on": "Uklju\u010deno"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Zaklju\u010dan",
|
||||
"unlocked": "Otklju\u010dan"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Neaktivan",
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den",
|
||||
"paused": "Pauzirano",
|
||||
"playing": "Prikazivanje",
|
||||
"standby": "U stanju \u010dekanja"
|
||||
},
|
||||
"person": {
|
||||
"home": "Doma",
|
||||
"not_home": "Odsutan"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "u redu",
|
||||
"problem": "Problem"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Scene"
|
||||
},
|
||||
"script": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Iznad horizonta",
|
||||
"below_horizon": "Ispod horizonta"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Isklju\u010den",
|
||||
"on": "Uklju\u010den"
|
||||
},
|
||||
"timer": {
|
||||
"active": "aktivan",
|
||||
"idle": "neaktivan",
|
||||
"paused": "pauzirano"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u010ci\u0161\u0107enje",
|
||||
"docked": "Usidreni",
|
||||
"error": "Gre\u0161ka",
|
||||
"idle": "Neaktivan",
|
||||
"off": "Uga\u0161eno",
|
||||
"on": "Upaljeno",
|
||||
"paused": "Pauzirano",
|
||||
"returning": "Povratak na dok"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Vedro, no\u0107",
|
||||
"cloudy": "Obla\u010dno",
|
||||
"exceptional": "Izuzetan",
|
||||
"fog": "Magla",
|
||||
"hail": "Tu\u010da",
|
||||
"lightning": "Munja",
|
||||
"lightning-rainy": "Munja, ki\u0161na",
|
||||
"partlycloudy": "Djelomi\u010dno obla\u010dno",
|
||||
"pouring": "Lije",
|
||||
"rainy": "Ki\u0161ovito",
|
||||
"snowy": "Snje\u017eno",
|
||||
"snowy-rainy": "Snje\u017eno, ki\u0161no",
|
||||
"sunny": "Sun\u010dano",
|
||||
"windy": "Vjetrovito",
|
||||
"windy-variant": "Vjetrovito"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Mrtav",
|
||||
"initializing": "Inicijalizacija",
|
||||
"ready": "Spreman",
|
||||
"sleeping": "Spavanje"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Mrtav ({query_stage})",
|
||||
"initializing": "Inicijalizacija ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/hu.json
Normal file
255
cast/src/translations/hu.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u00c9les\u00edtve",
|
||||
"armed_away": "\u00c9les\u00edtve t\u00e1vol",
|
||||
"armed_custom_bypass": "\u00c9les\u00edtve \u00e1thidal\u00e1ssal",
|
||||
"armed_home": "\u00c9les\u00edtve otthon",
|
||||
"armed_night": "\u00c9les\u00edtve \u00e9jszaka",
|
||||
"arming": "\u00c9les\u00edt\u00e9s",
|
||||
"disarmed": "Hat\u00e1stalan\u00edtva",
|
||||
"disarming": "Hat\u00e1stalan\u00edt\u00e1s",
|
||||
"pending": "F\u00fcgg\u0151ben",
|
||||
"triggered": "Riaszt\u00e1s"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "Alacsony"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "Hideg"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Lekapcsol\u00f3dva",
|
||||
"on": "Kapcsol\u00f3dva"
|
||||
},
|
||||
"default": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"door": {
|
||||
"off": "Z\u00e1rva",
|
||||
"on": "Nyitva"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Z\u00e1rva",
|
||||
"on": "Nyitva"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "\u00c9szlelve"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "Meleg"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Bez\u00e1rva",
|
||||
"on": "Kinyitva"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Sz\u00e1raz",
|
||||
"on": "Nedves"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "\u00c9szlelve"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "\u00c9szlelve"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Z\u00e1rva",
|
||||
"on": "Nyitva"
|
||||
},
|
||||
"presence": {
|
||||
"off": "T\u00e1vol",
|
||||
"on": "Otthon"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "Probl\u00e9ma"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Biztons\u00e1gos",
|
||||
"on": "Nem biztons\u00e1gos"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "\u00c9szlelve"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "\u00c9szlelve"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Norm\u00e1l",
|
||||
"on": "\u00c9szlelve"
|
||||
},
|
||||
"window": {
|
||||
"off": "Z\u00e1rva",
|
||||
"on": "Nyitva"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "T\u00e9tlen",
|
||||
"recording": "Felv\u00e9tel",
|
||||
"streaming": "Streamel\u00e9s"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Automatikus",
|
||||
"cool": "H\u0171t\u00e9s",
|
||||
"dry": "Sz\u00e1raz",
|
||||
"fan_only": "Csak ventil\u00e1tor",
|
||||
"heat": "F\u0171t\u00e9s",
|
||||
"heat_cool": "F\u0171t\u00e9s/H\u0171t\u00e9s",
|
||||
"off": "Ki"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Be\u00e1ll\u00edt\u00e1s",
|
||||
"configured": "Be\u00e1ll\u00edtva"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Z\u00e1rva",
|
||||
"closing": "Z\u00e1r\u00e1s",
|
||||
"open": "Nyitva",
|
||||
"opening": "Nyit\u00e1s",
|
||||
"stopped": "Meg\u00e1ll\u00edtva"
|
||||
},
|
||||
"default": {
|
||||
"off": "Ki",
|
||||
"on": "Be",
|
||||
"unavailable": "Nem el\u00e9rhet\u0151",
|
||||
"unknown": "Ismeretlen"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Otthon",
|
||||
"not_home": "T\u00e1vol"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Z\u00e1rva",
|
||||
"closing": "Z\u00e1r\u00e1s",
|
||||
"home": "Otthon",
|
||||
"locked": "Bez\u00e1rva",
|
||||
"not_home": "T\u00e1vol",
|
||||
"off": "Ki",
|
||||
"ok": "OK",
|
||||
"on": "Be",
|
||||
"open": "Nyitva",
|
||||
"opening": "Nyit\u00e1s",
|
||||
"problem": "Probl\u00e9ma",
|
||||
"stopped": "Meg\u00e1ll\u00edtva",
|
||||
"unlocked": "Kinyitva"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"light": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Bez\u00e1rva",
|
||||
"unlocked": "Kinyitva"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "T\u00e9tlen",
|
||||
"off": "Ki",
|
||||
"on": "Be",
|
||||
"paused": "Sz\u00fcnetel",
|
||||
"playing": "Lej\u00e1tsz\u00e1s",
|
||||
"standby": "K\u00e9szenl\u00e9t"
|
||||
},
|
||||
"person": {
|
||||
"home": "Otthon",
|
||||
"not_home": "T\u00e1vol"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Probl\u00e9ma"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Jelenet be\u00e1ll\u00edt\u00e1sa"
|
||||
},
|
||||
"script": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "L\u00e1t\u00f3hat\u00e1r felett",
|
||||
"below_horizon": "L\u00e1t\u00f3hat\u00e1r alatt"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Ki",
|
||||
"on": "Be"
|
||||
},
|
||||
"timer": {
|
||||
"active": "akt\u00edv",
|
||||
"idle": "t\u00e9tlen",
|
||||
"paused": "sz\u00fcneteltetve"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Takar\u00edt\u00e1s",
|
||||
"docked": "Dokkolva",
|
||||
"error": "Hiba",
|
||||
"idle": "T\u00e9tlen",
|
||||
"off": "Ki",
|
||||
"on": "Be",
|
||||
"paused": "Sz\u00fcneteltetve",
|
||||
"returning": "Dokkol\u00e1s folyamatban"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Tiszta, \u00e9jszaka",
|
||||
"cloudy": "Felh\u0151s",
|
||||
"exceptional": "Kiv\u00e9teles",
|
||||
"fog": "K\u00f6d",
|
||||
"hail": "J\u00e9ges\u0151",
|
||||
"lightning": "Vihar",
|
||||
"lightning-rainy": "Viharos, es\u0151s",
|
||||
"partlycloudy": "R\u00e9szben felh\u0151s",
|
||||
"pouring": "Szakad",
|
||||
"rainy": "Es\u0151s",
|
||||
"snowy": "Havaz\u00e1s",
|
||||
"snowy-rainy": "Havas, es\u0151s",
|
||||
"sunny": "Napos",
|
||||
"windy": "Szeles",
|
||||
"windy-variant": "Szeles"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Halott",
|
||||
"initializing": "Inicializ\u00e1l\u00e1s",
|
||||
"ready": "K\u00e9sz",
|
||||
"sleeping": "Alv\u00e1s"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Halott ({query_stage})",
|
||||
"initializing": "Inicializ\u00e1l\u00e1s ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/hy.json
Normal file
255
cast/src/translations/hy.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u0536\u056b\u0576\u057e\u0561\u056e",
|
||||
"armed_away": "\u0536\u056b\u0576\u057e\u0561\u056e",
|
||||
"armed_custom_bypass": "\u0536\u056b\u0576\u0574\u0561\u0576 \u0561\u0576\u0570\u0561\u057f\u0561\u056f\u0561\u0576 \u056f\u0578\u0564",
|
||||
"armed_home": "\u0536\u056b\u0576\u057e\u0561\u056e \u057f\u0578\u0582\u0576",
|
||||
"armed_night": "\u0536\u056b\u0576\u057e\u0561\u056e \u0563\u056b\u0577\u0565\u0580",
|
||||
"arming": "\u0536\u056b\u0576\u0565\u056c",
|
||||
"disarmed": "\u0536\u056b\u0576\u0561\u0569\u0561\u0583\u057e\u0561\u056e",
|
||||
"disarming": "\u0536\u056b\u0576\u0561\u0569\u0561\u0583\u0578\u0572",
|
||||
"pending": "\u054d\u057a\u0561\u057d\u0578\u0582\u0574",
|
||||
"triggered": "\u057a\u0561\u057f\u0573\u0561\u057c\u0568"
|
||||
},
|
||||
"automation": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "\u0546\u0578\u0580\u0574\u0561\u056c \u0567",
|
||||
"on": "\u0551\u0561\u056e\u0580"
|
||||
},
|
||||
"cold": {
|
||||
"off": "\u0546\u0578\u0580\u0574\u0561\u056c",
|
||||
"on": "\u054d\u0561\u057c\u0568"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e \u0567",
|
||||
"on": "\u053f\u0561\u057a\u057e\u0561\u056e"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"door": {
|
||||
"off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567",
|
||||
"on": "\u0532\u0561\u0581\u0565\u056c"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567",
|
||||
"on": "\u0532\u0561\u0581\u0565\u056c"
|
||||
},
|
||||
"gas": {
|
||||
"off": "\u0544\u0561\u0584\u0580\u0565\u056c",
|
||||
"on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
|
||||
},
|
||||
"heat": {
|
||||
"off": "\u0546\u0578\u0580\u0574\u0561\u056c",
|
||||
"on": "\u0539\u0565\u056a"
|
||||
},
|
||||
"lock": {
|
||||
"off": "\u056f\u0578\u0572\u057a\u057e\u0561\u056e",
|
||||
"on": "\u0562\u0561\u0581\u0565\u056c \u0567"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "\u0549\u0578\u0580",
|
||||
"on": "\u053d\u0578\u0576\u0561\u057e"
|
||||
},
|
||||
"motion": {
|
||||
"off": "\u0544\u0561\u0584\u0580\u0565\u056c",
|
||||
"on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "\u0544\u0561\u0584\u0580\u0565\u056c",
|
||||
"on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
|
||||
},
|
||||
"opening": {
|
||||
"off": "\u0553\u0561\u056f\u057e\u0561\u056e",
|
||||
"on": "\u0532\u0561\u0581"
|
||||
},
|
||||
"presence": {
|
||||
"off": "\u0540\u0565\u057c\u0578\u0582",
|
||||
"on": "\u054f\u0578\u0582\u0576"
|
||||
},
|
||||
"problem": {
|
||||
"off": "OK",
|
||||
"on": "\u053d\u0576\u0564\u056b\u0580"
|
||||
},
|
||||
"safety": {
|
||||
"off": "\u0531\u057a\u0561\u0570\u0578\u057e",
|
||||
"on": "\u0531\u0576\u057e\u057f\u0561\u0576\u0563"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "\u0544\u0561\u0584\u0580\u0565\u056c",
|
||||
"on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
|
||||
},
|
||||
"sound": {
|
||||
"off": "\u0544\u0561\u0584\u0580\u0565\u056c",
|
||||
"on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "\u0544\u0561\u0584\u0580\u0565\u056c",
|
||||
"on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
|
||||
},
|
||||
"window": {
|
||||
"off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567",
|
||||
"on": "\u0532\u0561\u0581\u0565\u056c"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "\u057a\u0561\u0580\u0561\u057a",
|
||||
"recording": "\u0541\u0561\u0575\u0576\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",
|
||||
"streaming": "\u0540\u0578\u057d\u0584"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "\u0531\u057e\u057f\u0578\u0574\u0561\u057f",
|
||||
"cool": "\u0540\u0578\u057e\u0561\u0581\u0578\u0582\u0574",
|
||||
"dry": "\u0549\u0578\u0580",
|
||||
"fan_only": "\u0555\u0564\u0561\u0583\u0578\u056d\u056b\u0579",
|
||||
"heat": "\u054b\u0565\u0580\u0574\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
|
||||
"heat_cool": "\u054b\u0565\u057c\u0578\u0582\u0581\u0578\u0582\u0574/\u0540\u0578\u057e\u0561\u0581\u0578\u0582\u0574",
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "\u053f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u0565\u056c",
|
||||
"configured": "\u053f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u057e\u0561\u056e"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "\u0553\u0561\u056f\u057e\u0561\u056e",
|
||||
"closing": "\u0553\u0561\u056f\u0578\u0582\u0574",
|
||||
"open": "\u0532\u0561\u0581",
|
||||
"opening": "\u0532\u0561\u0581\u0578\u0582\u0574",
|
||||
"stopped": "\u0534\u0561\u0564\u0561\u0580\u0565\u0581"
|
||||
},
|
||||
"default": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u057e\u0561\u056e",
|
||||
"unavailable": "\u0531\u0576\u0570\u0561\u057d\u0561\u0576\u0565\u056c\u056b",
|
||||
"unknown": "\u0570\u0561\u0575\u057f\u0576\u056b \u0579\u0567"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "\u054f\u0578\u0582\u0576",
|
||||
"not_home": "\u0540\u0565\u057c\u0578\u0582"
|
||||
},
|
||||
"fan": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"group": {
|
||||
"closed": "\u0553\u0561\u056f\u057e\u0561\u056e",
|
||||
"closing": "\u0553\u0561\u056f\u0578\u0582\u0574",
|
||||
"home": "\u054f\u0578\u0582\u0576",
|
||||
"locked": "\u056f\u0578\u0572\u057a\u057e\u0561\u056e \u0567",
|
||||
"not_home": "\u0540\u0565\u057c\u0578\u0582",
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"ok": "\u053c\u0561\u057e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e",
|
||||
"open": "\u0532\u0561\u0581\u0565\u0584",
|
||||
"opening": "\u0532\u0561\u0581\u0578\u0582\u0574",
|
||||
"problem": "\u053d\u0576\u0564\u056b\u0580",
|
||||
"stopped": "\u0534\u0561\u0564\u0561\u0580\u0565\u0581",
|
||||
"unlocked": "\u0532\u0561\u0581\u0565\u056c \u0567"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"light": {
|
||||
"off": "\u054d\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "\u053f\u0578\u0572\u057a\u057e\u0561\u056e \u0567",
|
||||
"unlocked": "\u0532\u0561\u0581 \u0567"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "\u054a\u0561\u0580\u0561\u057a",
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e",
|
||||
"paused": "\u0534\u0561\u0564\u0561\u0580 \u0567",
|
||||
"playing": "\u053d\u0561\u0572\u0578\u0582\u0574",
|
||||
"standby": "\u054d\u057a\u0561\u057d\u0578\u0582\u0574"
|
||||
},
|
||||
"person": {
|
||||
"home": "\u057f\u0578\u0582\u0576",
|
||||
"not_home": "\u0540\u0565\u057c\u0578\u0582"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u053c\u0561\u057e",
|
||||
"problem": "\u053d\u0576\u0564\u056b\u0580"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "\u0553\u0578\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0544\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0574\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u056b \u057e\u0565\u0580\u0587\u0578\u0582\u0574",
|
||||
"below_horizon": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u056b \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574"
|
||||
},
|
||||
"switch": {
|
||||
"off": "\u0561\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u0574\u056b\u0561\u0581\u0561\u056e"
|
||||
},
|
||||
"timer": {
|
||||
"active": "\u0561\u056f\u057f\u056b\u057e",
|
||||
"idle": "\u057a\u0561\u0580\u0561\u057a",
|
||||
"paused": "\u0564\u0561\u0564\u0561\u0580 "
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "\u0544\u0561\u0584\u0580\u0578\u0582\u0574",
|
||||
"docked": "\u053e\u0561\u056e\u056f\u057e\u0561\u056e",
|
||||
"error": "\u054d\u056d\u0561\u056c",
|
||||
"idle": "\u054a\u0561\u0580\u0561\u057a",
|
||||
"off": "\u0561\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
|
||||
"on": "\u057e\u0580\u0561",
|
||||
"paused": "\u0534\u0561\u0564\u0561\u0580 \u0567",
|
||||
"returning": "\u054e\u0565\u0580\u0561\u0564\u0561\u057c\u0576\u0561\u056c\u0578\u057e \u0576\u0561\u057e\u0561\u0570\u0561\u0576\u0563\u056b\u057d\u057f"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "\u0544\u0561\u0584\u0580\u0565\u056c \u057d\u057f\u0578\u0582\u0563\u057e\u0561\u056e \u056b\u0580\u0565\u0580\u0568",
|
||||
"cloudy": "\u0531\u0574\u057a\u0561\u0574\u0561\u056e",
|
||||
"exceptional": "\u0532\u0561\u0581\u0561\u057c\u056b\u056f",
|
||||
"fog": "\u0544\u0561\u057c\u0561\u056d\u0578\u0582\u0572",
|
||||
"hail": "\u053f\u0561\u0580\u056f\u0578\u0582\u057f",
|
||||
"lightning": "\u053f\u0561\u0575\u056e\u0561\u056f",
|
||||
"lightning-rainy": "\u053f\u0561\u0575\u056e\u0561\u056f, \u0561\u0576\u0571\u0580\u0587",
|
||||
"partlycloudy": "\u0544\u0561\u057d\u0561\u0574\u0562 \u0561\u0574\u057a\u0561\u0574\u0561\u056e",
|
||||
"pouring": "\u053c\u0581\u0576\u0565\u056c",
|
||||
"rainy": "\u0531\u0576\u0571\u0580\u0587\u0578\u057f",
|
||||
"snowy": "\u0541\u0575\u0578\u0582\u0576\u0578\u057f \u0567",
|
||||
"snowy-rainy": "\u0541\u0575\u0578\u0582\u0576\u0561\u057c\u0561\u057f, \u0561\u0576\u0571\u0580\u0587\u0578\u057f",
|
||||
"sunny": "\u0531\u0580\u0587\u0578\u057f",
|
||||
"windy": "\u053f\u0561\u0574",
|
||||
"windy-variant": "\u0554\u0561\u0574\u0578\u057f"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "\u0544\u0565\u057c\u0561\u056e",
|
||||
"initializing": "\u0546\u0561\u056d\u0561\u0571\u0565\u057c\u0576\u0578\u0572",
|
||||
"ready": "\u054a\u0561\u057f\u0580\u0561\u057d\u057f \u0567",
|
||||
"sleeping": "\u0554\u0576\u0565\u056c"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "\u0544\u0561\u0570\u0561\u0581\u0561\u056e{query_stage})",
|
||||
"initializing": "\u0546\u0561\u056d\u0561\u0571\u0565\u057c\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
255
cast/src/translations/id.json
Normal file
255
cast/src/translations/id.json
Normal file
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "Bersenjata",
|
||||
"armed_away": "Armed away",
|
||||
"armed_custom_bypass": "Armed custom bypass",
|
||||
"armed_home": "Armed home",
|
||||
"armed_night": "Armed night",
|
||||
"arming": "Mempersenjatai",
|
||||
"disarmed": "Dilucuti",
|
||||
"disarming": "Melucuti",
|
||||
"pending": "Tertunda",
|
||||
"triggered": "Terpicu"
|
||||
},
|
||||
"automation": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Normal",
|
||||
"on": "Rendah"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Normal",
|
||||
"on": "Dingin"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Terputus",
|
||||
"on": "Terhubung"
|
||||
},
|
||||
"default": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"door": {
|
||||
"off": "Tertutup",
|
||||
"on": "Terbuka"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Tertutup",
|
||||
"on": "Terbuka"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Kosong",
|
||||
"on": "Terdeteksi"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Normal",
|
||||
"on": "Panas"
|
||||
},
|
||||
"lock": {
|
||||
"off": "Terkunci",
|
||||
"on": "Terbuka"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "Kering",
|
||||
"on": "Basah"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Tidak ada",
|
||||
"on": "Terdeteksi"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Tidak ada",
|
||||
"on": "Terdeteksi"
|
||||
},
|
||||
"opening": {
|
||||
"off": "Tertutup",
|
||||
"on": "Terbuka"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Keluar",
|
||||
"on": "Rumah"
|
||||
},
|
||||
"problem": {
|
||||
"off": "Oke",
|
||||
"on": "Masalah"
|
||||
},
|
||||
"safety": {
|
||||
"off": "Aman",
|
||||
"on": "Tidak aman"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Tidak ada",
|
||||
"on": "Terdeteksi"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Tidak ada",
|
||||
"on": "Terdeteksi"
|
||||
},
|
||||
"vibration": {
|
||||
"off": "Tidak ada",
|
||||
"on": "Terdeteksi"
|
||||
},
|
||||
"window": {
|
||||
"off": "Tertutup",
|
||||
"on": "Terbuka"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "Siaga",
|
||||
"recording": "Merekam",
|
||||
"streaming": "Streaming"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Auto",
|
||||
"cool": "Sejuk",
|
||||
"dry": "Kering",
|
||||
"fan_only": "Hanya kipas",
|
||||
"heat": "Panas",
|
||||
"heat_cool": "Panas/Dingin",
|
||||
"off": "Off"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Konfigurasi",
|
||||
"configured": "Terkonfigurasi"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Tertutup",
|
||||
"closing": "Menutup",
|
||||
"open": "Buka",
|
||||
"opening": "Membuka",
|
||||
"stopped": "Terhenti"
|
||||
},
|
||||
"default": {
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"unavailable": "Tidak tersedia",
|
||||
"unknown": "Tidak diketahui"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Rumah",
|
||||
"not_home": "Keluar"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Tertutup",
|
||||
"closing": "Menutup",
|
||||
"home": "Rumah",
|
||||
"locked": "Terkunci",
|
||||
"not_home": "Keluar",
|
||||
"off": "Off",
|
||||
"ok": "OK",
|
||||
"on": "On",
|
||||
"open": "Terbuka",
|
||||
"opening": "Membuka",
|
||||
"problem": "Masalah",
|
||||
"stopped": "Tertutup",
|
||||
"unlocked": "Terbuka"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"light": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "Terkunci",
|
||||
"unlocked": "Terbuka"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "Diam",
|
||||
"off": "Off",
|
||||
"on": "On",
|
||||
"paused": "Jeda",
|
||||
"playing": "Memainkan",
|
||||
"standby": "Siaga"
|
||||
},
|
||||
"person": {
|
||||
"home": "Di rumah",
|
||||
"not_home": "Keluar"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "OK",
|
||||
"problem": "Masalah"
|
||||
},
|
||||
"remote": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"scene": {
|
||||
"scening": "Scening"
|
||||
},
|
||||
"script": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Terbit",
|
||||
"below_horizon": "Tenggelam"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Off",
|
||||
"on": "On"
|
||||
},
|
||||
"timer": {
|
||||
"active": "Aktif",
|
||||
"idle": "Siaga",
|
||||
"paused": "Jeda"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "Membersihkan",
|
||||
"docked": "Berlabuh",
|
||||
"error": "Kesalahan",
|
||||
"idle": "Siaga",
|
||||
"off": "Padam",
|
||||
"on": "Nyala",
|
||||
"paused": "Dijeda",
|
||||
"returning": "Kembali ke dock"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Cerah, malam",
|
||||
"cloudy": "Berawan",
|
||||
"exceptional": "Luar biasa",
|
||||
"fog": "Kabut",
|
||||
"hail": "Hujan es",
|
||||
"lightning": "Petir",
|
||||
"lightning-rainy": "Petir, hujan",
|
||||
"partlycloudy": "Sebagian berawan",
|
||||
"pouring": "Hujan lebat",
|
||||
"rainy": "Hujan",
|
||||
"snowy": "Bersalju",
|
||||
"snowy-rainy": "Bersalju, hujan",
|
||||
"sunny": "Cerah",
|
||||
"windy": "Berangin",
|
||||
"windy-variant": "Berangin"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Mati",
|
||||
"initializing": "Inisialisasi",
|
||||
"ready": "Siap",
|
||||
"sleeping": "Tidur"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Mati ({query_stage})",
|
||||
"initializing": "Inisialisasi ( {query_stage} )"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
246
cast/src/translations/is.json
Normal file
246
cast/src/translations/is.json
Normal file
@@ -0,0 +1,246 @@
|
||||
{
|
||||
"state": {
|
||||
"alarm_control_panel": {
|
||||
"armed": "\u00c1 ver\u00f0i",
|
||||
"armed_away": "\u00c1 ver\u00f0i \u00fati",
|
||||
"armed_home": "\u00c1 ver\u00f0i heima",
|
||||
"armed_night": "\u00c1 ver\u00f0i n\u00f3tt",
|
||||
"arming": "Set \u00e1 v\u00f6r\u00f0",
|
||||
"disarmed": "ekki \u00e1 ver\u00f0i",
|
||||
"disarming": "tek af ver\u00f0i",
|
||||
"pending": "B\u00ed\u00f0ur",
|
||||
"triggered": "R\u00e6st"
|
||||
},
|
||||
"automation": {
|
||||
"off": "\u00d3virk",
|
||||
"on": "Virk"
|
||||
},
|
||||
"binary_sensor": {
|
||||
"battery": {
|
||||
"off": "Venjulegt",
|
||||
"on": "L\u00e1gt"
|
||||
},
|
||||
"cold": {
|
||||
"off": "Venjulegt",
|
||||
"on": "Kalt"
|
||||
},
|
||||
"connectivity": {
|
||||
"off": "Aftengdur",
|
||||
"on": "Tengdur"
|
||||
},
|
||||
"default": {
|
||||
"off": "Sl\u00f6kkt",
|
||||
"on": "Kveikt"
|
||||
},
|
||||
"door": {
|
||||
"off": "Loku\u00f0",
|
||||
"on": "Opin"
|
||||
},
|
||||
"garage_door": {
|
||||
"off": "Loku\u00f0",
|
||||
"on": "Opin"
|
||||
},
|
||||
"gas": {
|
||||
"off": "Hreinsa",
|
||||
"on": "Uppg\u00f6tva\u00f0"
|
||||
},
|
||||
"heat": {
|
||||
"off": "Venjulegt",
|
||||
"on": "Heitt"
|
||||
},
|
||||
"lock": {
|
||||
"off": "L\u00e6st",
|
||||
"on": "Afl\u00e6st"
|
||||
},
|
||||
"moisture": {
|
||||
"off": "\u00deurrt",
|
||||
"on": "Blautt"
|
||||
},
|
||||
"motion": {
|
||||
"off": "Engin hreyfing",
|
||||
"on": "Hreyfing"
|
||||
},
|
||||
"occupancy": {
|
||||
"off": "Hreinsa",
|
||||
"on": "Uppg\u00f6tva\u00f0"
|
||||
},
|
||||
"presence": {
|
||||
"off": "Fjarverandi",
|
||||
"on": "Heima"
|
||||
},
|
||||
"problem": {
|
||||
"off": "\u00cd lagi",
|
||||
"on": "Vandam\u00e1l"
|
||||
},
|
||||
"safety": {
|
||||
"off": "\u00d6ruggt",
|
||||
"on": "\u00d3\u00f6ruggt"
|
||||
},
|
||||
"smoke": {
|
||||
"off": "Hreinsa",
|
||||
"on": "Uppg\u00f6tva\u00f0"
|
||||
},
|
||||
"sound": {
|
||||
"off": "Hreinsa",
|
||||
"on": "Uppg\u00f6tva\u00f0"
|
||||
},
|
||||
"vibration": {
|
||||
"on": "Uppg\u00f6tva\u00f0"
|
||||
},
|
||||
"window": {
|
||||
"off": "Loka",
|
||||
"on": "Opna"
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"off": "\u00d3virkt",
|
||||
"on": "Virkt"
|
||||
},
|
||||
"camera": {
|
||||
"idle": "A\u00f0ger\u00f0alaus",
|
||||
"recording": "\u00cd uppt\u00f6ku",
|
||||
"streaming": "Streymi"
|
||||
},
|
||||
"climate": {
|
||||
"auto": "Sj\u00e1lfvirkt",
|
||||
"cool": "K\u00e6ling",
|
||||
"dry": "\u00deurrt",
|
||||
"fan_only": "Vifta eing\u00f6ngu",
|
||||
"heat": "Hitun",
|
||||
"heat_cool": "Hita/K\u00e6la",
|
||||
"off": "Sl\u00f6kkt"
|
||||
},
|
||||
"configurator": {
|
||||
"configure": "Stilli",
|
||||
"configured": "Stillt"
|
||||
},
|
||||
"cover": {
|
||||
"closed": "Loka\u00f0",
|
||||
"closing": "Loka",
|
||||
"open": "Opin",
|
||||
"opening": "Opna",
|
||||
"stopped": "St\u00f6\u00f0vu\u00f0"
|
||||
},
|
||||
"default": {
|
||||
"off": "Af",
|
||||
"on": "\u00c1",
|
||||
"unavailable": "Ekki tilt\u00e6kt",
|
||||
"unknown": "\u00d3\u00feekkt"
|
||||
},
|
||||
"device_tracker": {
|
||||
"home": "Heima",
|
||||
"not_home": "Fjarverandi"
|
||||
},
|
||||
"fan": {
|
||||
"off": "Sl\u00f6kkt",
|
||||
"on": "\u00cd gangi"
|
||||
},
|
||||
"group": {
|
||||
"closed": "Loku\u00f0",
|
||||
"closing": "Loka",
|
||||
"home": "Heima",
|
||||
"locked": "L\u00e6st",
|
||||
"not_home": "Fjarverandi",
|
||||
"off": "\u00d3virkur",
|
||||
"ok": "\u00cd lagi",
|
||||
"on": "Virkur",
|
||||
"open": "Opin",
|
||||
"opening": "Opna",
|
||||
"problem": "Vandam\u00e1l",
|
||||
"stopped": "St\u00f6\u00f0va\u00f0",
|
||||
"unlocked": "Afl\u00e6st"
|
||||
},
|
||||
"input_boolean": {
|
||||
"off": "Af",
|
||||
"on": "\u00c1"
|
||||
},
|
||||
"light": {
|
||||
"off": "Sl\u00f6kkt",
|
||||
"on": "Kveikt"
|
||||
},
|
||||
"lock": {
|
||||
"locked": "L\u00e6st",
|
||||
"unlocked": "Afl\u00e6st"
|
||||
},
|
||||
"media_player": {
|
||||
"idle": "A\u00f0ger\u00f0alaus",
|
||||
"off": "Sl\u00f6kkt",
|
||||
"on": "\u00ed gangi",
|
||||
"paused": "\u00cd bi\u00f0",
|
||||
"playing": "Spila",
|
||||
"standby": "Bi\u00f0sta\u00f0a"
|
||||
},
|
||||
"person": {
|
||||
"home": "Heima",
|
||||
"not_home": "Fjarverandi"
|
||||
},
|
||||
"plant": {
|
||||
"ok": "\u00cd lagi",
|
||||
"problem": "Vandam\u00e1l"
|
||||
},
|
||||
"remote": {
|
||||
"off": "\u00d3virk",
|
||||
"on": "Virk"
|
||||
},
|
||||
"script": {
|
||||
"off": "\u00d3virkt",
|
||||
"on": "Virkt"
|
||||
},
|
||||
"sensor": {
|
||||
"off": "Af",
|
||||
"on": "\u00c1"
|
||||
},
|
||||
"sun": {
|
||||
"above_horizon": "Yfir sj\u00f3ndeildarhring",
|
||||
"below_horizon": "Undir sj\u00f3ndeildarhring"
|
||||
},
|
||||
"switch": {
|
||||
"off": "Sl\u00f6kkt",
|
||||
"on": "Kveikt"
|
||||
},
|
||||
"timer": {
|
||||
"active": "virkur",
|
||||
"idle": "a\u00f0ger\u00f0alaus",
|
||||
"paused": "\u00ed bi\u00f0"
|
||||
},
|
||||
"vacuum": {
|
||||
"cleaning": "A\u00f0 ryksuga",
|
||||
"docked": "\u00ed tengikv\u00ed",
|
||||
"error": "Villa",
|
||||
"idle": "A\u00f0ger\u00f0alaus",
|
||||
"off": "Sl\u00f6kkt",
|
||||
"on": "\u00cd gangi",
|
||||
"paused": "\u00cd bi\u00f0",
|
||||
"returning": "\u00c1 lei\u00f0 tilbaka \u00ed tengikv\u00ed"
|
||||
},
|
||||
"weather": {
|
||||
"clear-night": "Hei\u00f0sk\u00fdrt, n\u00f3tt",
|
||||
"cloudy": "Sk\u00fdja\u00f0",
|
||||
"exceptional": "Mj\u00f6g gott",
|
||||
"fog": "\u00deoka",
|
||||
"hail": "Hagl\u00e9l",
|
||||
"lightning": "Eldingar",
|
||||
"lightning-rainy": "Eldingar, rigning",
|
||||
"partlycloudy": "A\u00f0 hluta til sk\u00fdja\u00f0",
|
||||
"pouring": "\u00darhelli",
|
||||
"rainy": "Rigning",
|
||||
"snowy": "Snj\u00f3koma",
|
||||
"snowy-rainy": "Slydda",
|
||||
"sunny": "S\u00f3lskin",
|
||||
"windy": "Vindasamt",
|
||||
"windy-variant": "Vindasamt"
|
||||
},
|
||||
"zwave": {
|
||||
"default": {
|
||||
"dead": "Dau\u00f0ur",
|
||||
"initializing": "Frumstilli",
|
||||
"ready": "Tilb\u00fainn",
|
||||
"sleeping": "\u00cd dvala"
|
||||
},
|
||||
"query_stage": {
|
||||
"dead": "Dau\u00f0ur ({query_stage})",
|
||||
"initializing": "Frumstilli ({query_stage})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user