diff --git a/build-scripts/gulp/cast.js b/build-scripts/gulp/cast.js
index 34fcbb67a4..cfbf4d13f3 100644
--- a/build-scripts/gulp/cast.js
+++ b/build-scripts/gulp/cast.js
@@ -13,6 +13,7 @@ gulp.task(
gulp.series(
async function setEnv() {
process.env.NODE_ENV = "development";
+ process.env.IS_CAST = "true";
},
"clean-cast",
gulp.parallel(
diff --git a/build-scripts/gulp/translations.js b/build-scripts/gulp/translations.js
index ded39269b3..a1c3569545 100755
--- a/build-scripts/gulp/translations.js
+++ b/build-scripts/gulp/translations.js
@@ -20,7 +20,7 @@ const fullDir = workDir + "/full";
const coreDir = workDir + "/core";
const outDir = workDir + "/output";
-String.prototype.rsplit = function(sep, maxsplit) {
+String.prototype.rsplit = function (sep, maxsplit) {
var split = this.split(sep);
return maxsplit
? [split.slice(0, -maxsplit).join(sep)].concat(split.slice(-maxsplit))
@@ -45,7 +45,7 @@ const TRANSLATION_FRAGMENTS = [
function recursiveFlatten(prefix, data) {
let output = {};
- Object.keys(data).forEach(function(key) {
+ Object.keys(data).forEach(function (key) {
if (typeof data[key] === "object") {
output = {
...output,
@@ -107,7 +107,12 @@ function lokaliseTransform(data, original, file) {
output[key] = lokaliseTransform(value, original, file);
} else {
output[key] = value.replace(re_key_reference, (match, key) => {
- const replace = key.split("::").reduce((tr, k) => tr[k], original);
+ const replace = key.split("::").reduce((tr, k) => {
+ if (!tr) {
+ throw Error(`Invalid key placeholder ${key} in ${file.path}`);
+ }
+ return tr[k];
+ }, original);
if (typeof replace !== "string") {
throw Error(`Invalid key placeholder ${key} in ${file.path}`);
}
@@ -118,7 +123,7 @@ function lokaliseTransform(data, original, file) {
return output;
}
-gulp.task("clean-translations", function() {
+gulp.task("clean-translations", function () {
return del([workDir]);
});
@@ -129,7 +134,7 @@ gulp.task("ensure-translations-build-dir", (done) => {
done();
});
-gulp.task("create-test-metadata", function(cb) {
+gulp.task("create-test-metadata", function (cb) {
fs.writeFile(
workDir + "/testMetadata.json",
JSON.stringify({
@@ -147,7 +152,7 @@ gulp.task(
return gulp
.src(path.join(paths.translations_src, "en.json"))
.pipe(
- transform(function(data, file) {
+ transform(function (data, file) {
return recursiveEmpty(data);
})
)
@@ -165,11 +170,11 @@ gulp.task(
* project is buildable immediately after merging new translation keys, since
* the Lokalise update to translations/en.json will not happen immediately.
*/
-gulp.task("build-master-translation", function() {
+gulp.task("build-master-translation", function () {
return gulp
.src(path.join(paths.translations_src, "en.json"))
.pipe(
- transform(function(data, file) {
+ transform(function (data, file) {
return lokaliseTransform(data, data, file);
})
)
@@ -177,16 +182,16 @@ gulp.task("build-master-translation", function() {
.pipe(gulp.dest(workDir));
});
-gulp.task("build-merged-translations", function() {
+gulp.task("build-merged-translations", function () {
return gulp
.src([inDir + "/*.json", workDir + "/test.json"], { allowEmpty: true })
.pipe(
- transform(function(data, file) {
+ transform(function (data, file) {
return lokaliseTransform(data, data, file);
})
)
.pipe(
- foreach(function(stream, file) {
+ foreach(function (stream, file) {
// For each language generate a merged json file. It begins with the master
// translation as a failsafe for untranslated strings, and merges all parent
// tags into one file for each specific subtag
@@ -223,7 +228,7 @@ var taskName;
const splitTasks = [];
TRANSLATION_FRAGMENTS.forEach((fragment) => {
taskName = "build-translation-fragment-" + fragment;
- gulp.task(taskName, function() {
+ gulp.task(taskName, function () {
// Return only the translations for this fragment.
return gulp
.src(fullDir + "/*.json")
@@ -242,12 +247,31 @@ TRANSLATION_FRAGMENTS.forEach((fragment) => {
});
taskName = "build-translation-core";
-gulp.task(taskName, function() {
+gulp.task(taskName, function () {
// Remove the fragment translations from the core translation.
return gulp
.src(fullDir + "/*.json")
.pipe(
- transform((data) => {
+ 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];
});
@@ -259,7 +283,7 @@ gulp.task(taskName, function() {
splitTasks.push(taskName);
-gulp.task("build-flattened-translations", function() {
+gulp.task("build-flattened-translations", function () {
// Flatten the split versions of our translations, and move them into outDir
return gulp
.src(
@@ -269,7 +293,7 @@ gulp.task("build-flattened-translations", function() {
{ base: workDir }
)
.pipe(
- transform(function(data) {
+ transform(function (data) {
// Polymer.AppLocalizeBehavior requires flattened json
return flatten(data);
})
@@ -351,7 +375,7 @@ gulp.task(
)
.pipe(merge({}))
.pipe(
- transform(function(data) {
+ transform(function (data) {
const newData = {};
Object.entries(data).forEach(([key, value]) => {
// Filter out translations without native name.
diff --git a/build-scripts/webpack.js b/build-scripts/webpack.js
index 07894ad874..e5207878d8 100644
--- a/build-scripts/webpack.js
+++ b/build-scripts/webpack.js
@@ -70,6 +70,7 @@ const createWebpackConfig = ({
__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"
@@ -221,6 +222,9 @@ const createCastConfig = ({ isProdBuild, latestBuild }) => {
outputRoot: paths.cast_root,
isProdBuild,
latestBuild,
+ defineOverlay: {
+ __BACKWARDS_COMPAT__: true,
+ },
});
};
diff --git a/cast/src/translations/af.json b/cast/src/translations/af.json
new file mode 100644
index 0000000000..323ea63e13
--- /dev/null
+++ b/cast/src/translations/af.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/ar.json b/cast/src/translations/ar.json
new file mode 100644
index 0000000000..fd6a0cc9bb
--- /dev/null
+++ b/cast/src/translations/ar.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/bg.json b/cast/src/translations/bg.json
new file mode 100644
index 0000000000..e038efa17a
--- /dev/null
+++ b/cast/src/translations/bg.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/bs.json b/cast/src/translations/bs.json
new file mode 100644
index 0000000000..b94d375e6f
--- /dev/null
+++ b/cast/src/translations/bs.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/ca.json b/cast/src/translations/ca.json
new file mode 100644
index 0000000000..94c77e09fc
--- /dev/null
+++ b/cast/src/translations/ca.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/cs.json b/cast/src/translations/cs.json
new file mode 100644
index 0000000000..12326f8f10
--- /dev/null
+++ b/cast/src/translations/cs.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/cy.json b/cast/src/translations/cy.json
new file mode 100644
index 0000000000..4f80a30c7d
--- /dev/null
+++ b/cast/src/translations/cy.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/da.json b/cast/src/translations/da.json
new file mode 100644
index 0000000000..acc23acf03
--- /dev/null
+++ b/cast/src/translations/da.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/de.json b/cast/src/translations/de.json
new file mode 100644
index 0000000000..027b882b9e
--- /dev/null
+++ b/cast/src/translations/de.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/el.json b/cast/src/translations/el.json
new file mode 100644
index 0000000000..b3e0605dbc
--- /dev/null
+++ b/cast/src/translations/el.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/en.json b/cast/src/translations/en.json
new file mode 100644
index 0000000000..527e7102f3
--- /dev/null
+++ b/cast/src/translations/en.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Armed",
+ "armed_away": "Armed away",
+ "armed_custom_bypass": "Armed custom bypass",
+ "armed_home": "Armed home",
+ "armed_night": "Armed night",
+ "arming": "Arming",
+ "disarmed": "Disarmed",
+ "disarming": "Disarming",
+ "pending": "Pending",
+ "triggered": "Triggered"
+ },
+ "automation": {
+ "off": "Off",
+ "on": "On"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normal",
+ "on": "Low"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "Cold"
+ },
+ "connectivity": {
+ "off": "Disconnected",
+ "on": "Connected"
+ },
+ "default": {
+ "off": "Off",
+ "on": "On"
+ },
+ "door": {
+ "off": "Closed",
+ "on": "Open"
+ },
+ "garage_door": {
+ "off": "Closed",
+ "on": "Open"
+ },
+ "gas": {
+ "off": "Clear",
+ "on": "Detected"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Hot"
+ },
+ "lock": {
+ "off": "Locked",
+ "on": "Unlocked"
+ },
+ "moisture": {
+ "off": "Dry",
+ "on": "Wet"
+ },
+ "motion": {
+ "off": "Clear",
+ "on": "Detected"
+ },
+ "occupancy": {
+ "off": "Clear",
+ "on": "Detected"
+ },
+ "opening": {
+ "off": "Closed",
+ "on": "Open"
+ },
+ "presence": {
+ "off": "Away",
+ "on": "Home"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Problem"
+ },
+ "safety": {
+ "off": "Safe",
+ "on": "Unsafe"
+ },
+ "smoke": {
+ "off": "Clear",
+ "on": "Detected"
+ },
+ "sound": {
+ "off": "Clear",
+ "on": "Detected"
+ },
+ "vibration": {
+ "off": "Clear",
+ "on": "Detected"
+ },
+ "window": {
+ "off": "Closed",
+ "on": "Open"
+ }
+ },
+ "calendar": {
+ "off": "Off",
+ "on": "On"
+ },
+ "camera": {
+ "idle": "Idle",
+ "recording": "Recording",
+ "streaming": "Streaming"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Cool",
+ "dry": "Dry",
+ "fan_only": "Fan only",
+ "heat": "Heat",
+ "heat_cool": "Heat/Cool",
+ "off": "Off"
+ },
+ "configurator": {
+ "configure": "Configure",
+ "configured": "Configured"
+ },
+ "cover": {
+ "closed": "Closed",
+ "closing": "Closing",
+ "open": "Open",
+ "opening": "Opening",
+ "stopped": "Stopped"
+ },
+ "default": {
+ "off": "Off",
+ "on": "On",
+ "unavailable": "Unavailable",
+ "unknown": "Unknown"
+ },
+ "device_tracker": {
+ "home": "Home",
+ "not_home": "Away"
+ },
+ "fan": {
+ "off": "Off",
+ "on": "On"
+ },
+ "group": {
+ "closed": "Closed",
+ "closing": "Closing",
+ "home": "Home",
+ "locked": "Locked",
+ "not_home": "Away",
+ "off": "Off",
+ "ok": "OK",
+ "on": "On",
+ "open": "Open",
+ "opening": "Opening",
+ "problem": "Problem",
+ "stopped": "Stopped",
+ "unlocked": "Unlocked"
+ },
+ "input_boolean": {
+ "off": "Off",
+ "on": "On"
+ },
+ "light": {
+ "off": "Off",
+ "on": "On"
+ },
+ "lock": {
+ "locked": "Locked",
+ "unlocked": "Unlocked"
+ },
+ "media_player": {
+ "idle": "Idle",
+ "off": "Off",
+ "on": "On",
+ "paused": "Paused",
+ "playing": "Playing",
+ "standby": "Standby"
+ },
+ "person": {
+ "home": "Home",
+ "not_home": "Away"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Problem"
+ },
+ "remote": {
+ "off": "Off",
+ "on": "On"
+ },
+ "scene": {
+ "scening": "Scening"
+ },
+ "script": {
+ "off": "Off",
+ "on": "On"
+ },
+ "sensor": {
+ "off": "Off",
+ "on": "On"
+ },
+ "sun": {
+ "above_horizon": "Above horizon",
+ "below_horizon": "Below horizon"
+ },
+ "switch": {
+ "off": "Off",
+ "on": "On"
+ },
+ "timer": {
+ "active": "active",
+ "idle": "idle",
+ "paused": "paused"
+ },
+ "vacuum": {
+ "cleaning": "Cleaning",
+ "docked": "Docked",
+ "error": "Error",
+ "idle": "Idle",
+ "off": "Off",
+ "on": "On",
+ "paused": "Paused",
+ "returning": "Returning to dock"
+ },
+ "weather": {
+ "clear-night": "Clear, night",
+ "cloudy": "Cloudy",
+ "exceptional": "Exceptional",
+ "fog": "Fog",
+ "hail": "Hail",
+ "lightning": "Lightning",
+ "lightning-rainy": "Lightning, rainy",
+ "partlycloudy": "Partly cloudy",
+ "pouring": "Pouring",
+ "rainy": "Rainy",
+ "snowy": "Snowy",
+ "snowy-rainy": "Snowy, rainy",
+ "sunny": "Sunny",
+ "windy": "Windy",
+ "windy-variant": "Windy"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Dead",
+ "initializing": "Initializing",
+ "ready": "Ready",
+ "sleeping": "Sleeping"
+ },
+ "query_stage": {
+ "dead": "Dead ({query_stage})",
+ "initializing": "Initializing ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/es-419.json b/cast/src/translations/es-419.json
new file mode 100644
index 0000000000..53a7bba6fb
--- /dev/null
+++ b/cast/src/translations/es-419.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/es.json b/cast/src/translations/es.json
new file mode 100644
index 0000000000..f4340ed1c9
--- /dev/null
+++ b/cast/src/translations/es.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/et.json b/cast/src/translations/et.json
new file mode 100644
index 0000000000..c0d766d159
--- /dev/null
+++ b/cast/src/translations/et.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/eu.json b/cast/src/translations/eu.json
new file mode 100644
index 0000000000..d1a7450e1a
--- /dev/null
+++ b/cast/src/translations/eu.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/fa.json b/cast/src/translations/fa.json
new file mode 100644
index 0000000000..988977895e
--- /dev/null
+++ b/cast/src/translations/fa.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/fi.json b/cast/src/translations/fi.json
new file mode 100644
index 0000000000..447ae27834
--- /dev/null
+++ b/cast/src/translations/fi.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/fr.json b/cast/src/translations/fr.json
new file mode 100644
index 0000000000..05d9d73703
--- /dev/null
+++ b/cast/src/translations/fr.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/gsw.json b/cast/src/translations/gsw.json
new file mode 100644
index 0000000000..9ded939500
--- /dev/null
+++ b/cast/src/translations/gsw.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/he.json b/cast/src/translations/he.json
new file mode 100644
index 0000000000..d0d63a82e3
--- /dev/null
+++ b/cast/src/translations/he.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/hi.json b/cast/src/translations/hi.json
new file mode 100644
index 0000000000..4563f50019
--- /dev/null
+++ b/cast/src/translations/hi.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/hr.json b/cast/src/translations/hr.json
new file mode 100644
index 0000000000..471b8b942a
--- /dev/null
+++ b/cast/src/translations/hr.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/hu.json b/cast/src/translations/hu.json
new file mode 100644
index 0000000000..688882750b
--- /dev/null
+++ b/cast/src/translations/hu.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/hy.json b/cast/src/translations/hy.json
new file mode 100644
index 0000000000..a357199f12
--- /dev/null
+++ b/cast/src/translations/hy.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/id.json b/cast/src/translations/id.json
new file mode 100644
index 0000000000..3fd1b1c2d3
--- /dev/null
+++ b/cast/src/translations/id.json
@@ -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} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/is.json b/cast/src/translations/is.json
new file mode 100644
index 0000000000..61e1aa61ac
--- /dev/null
+++ b/cast/src/translations/is.json
@@ -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})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/it.json b/cast/src/translations/it.json
new file mode 100644
index 0000000000..1637745c94
--- /dev/null
+++ b/cast/src/translations/it.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Attivo",
+ "armed_away": "Attivo fuori casa",
+ "armed_custom_bypass": "Attivo con bypass",
+ "armed_home": "Attivo in casa",
+ "armed_night": "Attivo Notte",
+ "arming": "In attivazione",
+ "disarmed": "Disattivo",
+ "disarming": "In disattivazione",
+ "pending": "In sospeso",
+ "triggered": "Attivato"
+ },
+ "automation": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normale",
+ "on": "Basso"
+ },
+ "cold": {
+ "off": "Normale",
+ "on": "Freddo"
+ },
+ "connectivity": {
+ "off": "Disconnesso",
+ "on": "Connesso"
+ },
+ "default": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "door": {
+ "off": "Chiusa",
+ "on": "Aperta"
+ },
+ "garage_door": {
+ "off": "Chiusa",
+ "on": "Aperta"
+ },
+ "gas": {
+ "off": "Assente",
+ "on": "Rilevato"
+ },
+ "heat": {
+ "off": "Normale",
+ "on": "Caldo"
+ },
+ "lock": {
+ "off": "Bloccato",
+ "on": "Sbloccato"
+ },
+ "moisture": {
+ "off": "Asciutto",
+ "on": "Bagnato"
+ },
+ "motion": {
+ "off": "Assente",
+ "on": "Rilevato"
+ },
+ "occupancy": {
+ "off": "Vuoto",
+ "on": "Rilevato"
+ },
+ "opening": {
+ "off": "Chiuso",
+ "on": "Aperta"
+ },
+ "presence": {
+ "off": "Fuori casa",
+ "on": "A casa"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Problema"
+ },
+ "safety": {
+ "off": "Sicuro",
+ "on": "Non Sicuro"
+ },
+ "smoke": {
+ "off": "Assente",
+ "on": "Rilevato"
+ },
+ "sound": {
+ "off": "Assente",
+ "on": "Rilevato"
+ },
+ "vibration": {
+ "off": "Assente",
+ "on": "Rilevata"
+ },
+ "window": {
+ "off": "Chiusa",
+ "on": "Aperta"
+ }
+ },
+ "calendar": {
+ "off": "Disattivo",
+ "on": "Attivo"
+ },
+ "camera": {
+ "idle": "Inattiva",
+ "recording": "In registrazione",
+ "streaming": "Streaming"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Freddo",
+ "dry": "Secco",
+ "fan_only": "Solo ventilatore",
+ "heat": "Caldo",
+ "heat_cool": "Caldo/Freddo",
+ "off": "Spento"
+ },
+ "configurator": {
+ "configure": "Configura",
+ "configured": "Configurato"
+ },
+ "cover": {
+ "closed": "Chiuso",
+ "closing": "In chiusura",
+ "open": "Aperto",
+ "opening": "In apertura",
+ "stopped": "Arrestato"
+ },
+ "default": {
+ "off": "Spento",
+ "on": "Acceso",
+ "unavailable": "Non disponibile",
+ "unknown": "Sconosciuto"
+ },
+ "device_tracker": {
+ "home": "A casa",
+ "not_home": "Fuori casa"
+ },
+ "fan": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "group": {
+ "closed": "Chiuso",
+ "closing": "Chiusura",
+ "home": "A casa",
+ "locked": "Bloccato",
+ "not_home": "Fuori casa",
+ "off": "Spento",
+ "ok": "OK",
+ "on": "Acceso",
+ "open": "Aperto",
+ "opening": "Apertura",
+ "problem": "Problema",
+ "stopped": "Fermato",
+ "unlocked": "Sbloccato"
+ },
+ "input_boolean": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "light": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "lock": {
+ "locked": "Bloccato",
+ "unlocked": "Sbloccato"
+ },
+ "media_player": {
+ "idle": "Inattivo",
+ "off": "Spento",
+ "on": "Acceso",
+ "paused": "In pausa",
+ "playing": "In riproduzione",
+ "standby": "Pausa"
+ },
+ "person": {
+ "home": "A casa",
+ "not_home": "Fuori casa"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Problema"
+ },
+ "remote": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "scene": {
+ "scening": "Sceneggiando"
+ },
+ "script": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "sensor": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "sun": {
+ "above_horizon": "Sopra l'orizzonte",
+ "below_horizon": "Sotto l'orizzonte"
+ },
+ "switch": {
+ "off": "Spento",
+ "on": "Acceso"
+ },
+ "timer": {
+ "active": "attivo",
+ "idle": "inattivo",
+ "paused": "in pausa"
+ },
+ "vacuum": {
+ "cleaning": "Pulendo",
+ "docked": "In base",
+ "error": "Errore",
+ "idle": "Inattivo",
+ "off": "Spento",
+ "on": "Acceso",
+ "paused": "In pausa",
+ "returning": "Ritorno alla base"
+ },
+ "weather": {
+ "clear-night": "Sereno, notte",
+ "cloudy": "Nuvoloso",
+ "exceptional": "Eccezionale",
+ "fog": "Nebbia",
+ "hail": "Grandine",
+ "lightning": "Temporale",
+ "lightning-rainy": "Temporale, piovoso",
+ "partlycloudy": "Parzialmente nuvoloso",
+ "pouring": "Piogge intense",
+ "rainy": "Piovoso",
+ "snowy": "Nevoso",
+ "snowy-rainy": "Nevoso, piovoso",
+ "sunny": "Soleggiato",
+ "windy": "Ventoso",
+ "windy-variant": "Ventoso"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Disattivo",
+ "initializing": "Avvio",
+ "ready": "Pronto",
+ "sleeping": "In attesa"
+ },
+ "query_stage": {
+ "dead": "Disattivo ({query_stage})",
+ "initializing": "Avvio ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/ja.json b/cast/src/translations/ja.json
new file mode 100644
index 0000000000..8f6c60a8be
--- /dev/null
+++ b/cast/src/translations/ja.json
@@ -0,0 +1,207 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "triggered": "\u30c8\u30ea\u30ac\u30fc"
+ },
+ "automation": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\u901a\u5e38",
+ "on": "\u4f4e"
+ },
+ "cold": {
+ "off": "\u901a\u5e38",
+ "on": "\u4f4e\u6e29"
+ },
+ "connectivity": {
+ "off": "\u5207\u65ad",
+ "on": "\u63a5\u7d9a\u6e08"
+ },
+ "default": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "door": {
+ "off": "\u9589\u9396",
+ "on": "\u958b\u653e"
+ },
+ "garage_door": {
+ "off": "\u9589\u9396",
+ "on": "\u958b\u653e"
+ },
+ "gas": {
+ "off": "\u672a\u691c\u51fa",
+ "on": "\u691c\u51fa"
+ },
+ "heat": {
+ "off": "\u6b63\u5e38",
+ "on": "\u9ad8\u6e29"
+ },
+ "lock": {
+ "off": "\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f",
+ "on": "\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093"
+ },
+ "moisture": {
+ "off": "\u30c9\u30e9\u30a4",
+ "on": "\u30a6\u30a7\u30c3\u30c8"
+ },
+ "motion": {
+ "off": "\u672a\u691c\u51fa",
+ "on": "\u691c\u51fa"
+ },
+ "occupancy": {
+ "off": "\u672a\u691c\u51fa",
+ "on": "\u691c\u51fa"
+ },
+ "opening": {
+ "off": "\u9589\u9396",
+ "on": "\u958b\u653e"
+ },
+ "presence": {
+ "off": "\u5916\u51fa",
+ "on": "\u5728\u5b85"
+ },
+ "problem": {
+ "off": "OK"
+ },
+ "safety": {
+ "off": "\u5b89\u5168",
+ "on": "\u5371\u967a"
+ },
+ "smoke": {
+ "off": "\u672a\u691c\u51fa",
+ "on": "\u691c\u51fa"
+ },
+ "sound": {
+ "off": "\u672a\u691c\u51fa",
+ "on": "\u691c\u51fa"
+ },
+ "vibration": {
+ "off": "\u672a\u691c\u51fa",
+ "on": "\u691c\u51fa"
+ },
+ "window": {
+ "off": "\u9589\u9396",
+ "on": "\u958b\u653e"
+ }
+ },
+ "calendar": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "camera": {
+ "idle": "\u30a2\u30a4\u30c9\u30eb"
+ },
+ "climate": {
+ "auto": "\u30aa\u30fc\u30c8",
+ "cool": "\u51b7\u623f",
+ "dry": "\u30c9\u30e9\u30a4",
+ "fan_only": "\u30d5\u30a1\u30f3\u306e\u307f",
+ "heat": "\u6696\u623f",
+ "off": "\u30aa\u30d5"
+ },
+ "configurator": {
+ "configure": "\u8a2d\u5b9a",
+ "configured": "\u8a2d\u5b9a\u6e08\u307f"
+ },
+ "cover": {
+ "closed": "\u9589\u9396",
+ "opening": "\u6249"
+ },
+ "default": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3",
+ "unavailable": "\u5229\u7528\u4e0d\u53ef",
+ "unknown": "\u4e0d\u660e"
+ },
+ "device_tracker": {
+ "home": "\u5728\u5b85",
+ "not_home": "\u5916\u51fa"
+ },
+ "fan": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "group": {
+ "closed": "\u9589\u9396",
+ "home": "\u5728\u5b85",
+ "locked": "\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f",
+ "not_home": "\u5916\u51fa",
+ "off": "\u30aa\u30d5",
+ "ok": "OK",
+ "on": "\u30aa\u30f3",
+ "opening": "\u6249"
+ },
+ "input_boolean": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "light": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "media_player": {
+ "idle": "\u30a2\u30a4\u30c9\u30eb",
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3",
+ "paused": "\u4e00\u6642\u505c\u6b62",
+ "playing": "\u518d\u751f\u4e2d"
+ },
+ "person": {
+ "home": "\u5728\u5b85",
+ "not_home": "\u5916\u51fa"
+ },
+ "plant": {
+ "ok": "OK"
+ },
+ "remote": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "script": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "sensor": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "sun": {
+ "above_horizon": "\u5730\u5e73\u7dda\u306e\u4e0a",
+ "below_horizon": "\u5730\u5e73\u7dda\u3088\u308a\u4e0b"
+ },
+ "switch": {
+ "off": "\u30aa\u30d5",
+ "on": "\u30aa\u30f3"
+ },
+ "weather": {
+ "clear-night": "\u6674\u308c\u305f\u591c",
+ "cloudy": "\u66c7\u308a",
+ "fog": "\u9727",
+ "hail": "\u96f9",
+ "lightning": "\u96f7",
+ "lightning-rainy": "\u96f7\u96e8",
+ "partlycloudy": "\u6674\u308c\u6642\u3005\u66c7\u308a",
+ "pouring": "\u5927\u96e8",
+ "rainy": "\u96e8",
+ "snowy": "\u96ea",
+ "snowy-rainy": "\u307f\u305e\u308c",
+ "sunny": "\u6674\u308c",
+ "windy": "\u5f37\u98a8"
+ },
+ "zwave": {
+ "default": {
+ "initializing": "\u521d\u671f\u5316\u4e2d",
+ "ready": "\u6e96\u5099\u5b8c\u4e86",
+ "sleeping": "\u30b9\u30ea\u30fc\u30d7"
+ },
+ "query_stage": {
+ "dead": " ({query_stage})",
+ "initializing": "\u521d\u671f\u5316\u4e2d ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/ko.json b/cast/src/translations/ko.json
new file mode 100644
index 0000000000..4f2d4bae2b
--- /dev/null
+++ b/cast/src/translations/ko.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\uacbd\ube44\uc911",
+ "armed_away": "\uacbd\ube44\uc911(\uc678\ucd9c)",
+ "armed_custom_bypass": "\uacbd\ube44\uc911(\uc0ac\uc6a9\uc790 \uc6b0\ud68c)",
+ "armed_home": "\uacbd\ube44\uc911(\uc7ac\uc2e4)",
+ "armed_night": "\uacbd\ube44\uc911(\uc57c\uac04)",
+ "arming": "\uacbd\ube44\uc911",
+ "disarmed": "\ud574\uc81c\ub428",
+ "disarming": "\ud574\uc81c\uc911",
+ "pending": "\ubcf4\ub958\uc911",
+ "triggered": "\uc791\ub3d9\ub428"
+ },
+ "automation": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\ubcf4\ud1b5",
+ "on": "\ub0ae\uc74c"
+ },
+ "cold": {
+ "off": "\ubcf4\ud1b5",
+ "on": "\uc800\uc628"
+ },
+ "connectivity": {
+ "off": "\uc5f0\uacb0\ud574\uc81c\ub428",
+ "on": "\uc5f0\uacb0\ub428"
+ },
+ "default": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "door": {
+ "off": "\ub2eb\ud798",
+ "on": "\uc5f4\ub9bc"
+ },
+ "garage_door": {
+ "off": "\ub2eb\ud798",
+ "on": "\uc5f4\ub9bc"
+ },
+ "gas": {
+ "off": "\uc774\uc0c1\uc5c6\uc74c",
+ "on": "\uac10\uc9c0\ub428"
+ },
+ "heat": {
+ "off": "\ubcf4\ud1b5",
+ "on": "\uace0\uc628"
+ },
+ "lock": {
+ "off": "\uc7a0\uae40",
+ "on": "\ud574\uc81c"
+ },
+ "moisture": {
+ "off": "\uac74\uc870\ud568",
+ "on": "\uc2b5\ud568"
+ },
+ "motion": {
+ "off": "\uc774\uc0c1\uc5c6\uc74c",
+ "on": "\uac10\uc9c0\ub428"
+ },
+ "occupancy": {
+ "off": "\uc774\uc0c1\uc5c6\uc74c",
+ "on": "\uac10\uc9c0\ub428"
+ },
+ "opening": {
+ "off": "\ub2eb\ud798",
+ "on": "\uc5f4\ub9bc"
+ },
+ "presence": {
+ "off": "\uc678\ucd9c",
+ "on": "\uc7ac\uc2e4"
+ },
+ "problem": {
+ "off": "\ubb38\uc81c\uc5c6\uc74c",
+ "on": "\ubb38\uc81c\uc788\uc74c"
+ },
+ "safety": {
+ "off": "\uc548\uc804",
+ "on": "\uc704\ud5d8"
+ },
+ "smoke": {
+ "off": "\uc774\uc0c1\uc5c6\uc74c",
+ "on": "\uac10\uc9c0\ub428"
+ },
+ "sound": {
+ "off": "\uc774\uc0c1\uc5c6\uc74c",
+ "on": "\uac10\uc9c0\ub428"
+ },
+ "vibration": {
+ "off": "\uc774\uc0c1\uc5c6\uc74c",
+ "on": "\uac10\uc9c0\ub428"
+ },
+ "window": {
+ "off": "\ub2eb\ud798",
+ "on": "\uc5f4\ub9bc"
+ }
+ },
+ "calendar": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "camera": {
+ "idle": "\ub300\uae30\uc911",
+ "recording": "\ub179\ud654\uc911",
+ "streaming": "\uc2a4\ud2b8\ub9ac\ubc0d"
+ },
+ "climate": {
+ "auto": "\uc790\ub3d9",
+ "cool": "\ub0c9\ubc29",
+ "dry": "\uc81c\uc2b5",
+ "fan_only": "\uc1a1\ud48d",
+ "heat": "\ub09c\ubc29",
+ "heat_cool": "\ub0c9\ub09c\ubc29",
+ "off": "\uaebc\uc9d0"
+ },
+ "configurator": {
+ "configure": "\uc124\uc815",
+ "configured": "\uc124\uc815\ub428"
+ },
+ "cover": {
+ "closed": "\ub2eb\ud798",
+ "closing": "\ub2eb\ub294\uc911",
+ "open": "\uc5f4\ub9bc",
+ "opening": "\uc5ec\ub294\uc911",
+ "stopped": "\uba48\ucda4"
+ },
+ "default": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0",
+ "unavailable": "\uc0ac\uc6a9\ubd88\uac00",
+ "unknown": "\uc54c\uc218\uc5c6\uc74c"
+ },
+ "device_tracker": {
+ "home": "\uc7ac\uc2e4",
+ "not_home": "\uc678\ucd9c"
+ },
+ "fan": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "group": {
+ "closed": "\ub2eb\ud798",
+ "closing": "\ub2eb\ub294\uc911",
+ "home": "\uc7ac\uc2e4",
+ "locked": "\uc7a0\uae40",
+ "not_home": "\uc678\ucd9c",
+ "off": "\uaebc\uc9d0",
+ "ok": "\ubb38\uc81c\uc5c6\uc74c",
+ "on": "\ucf1c\uc9d0",
+ "open": "\uc5f4\ub9bc",
+ "opening": "\uc5ec\ub294\uc911",
+ "problem": "\ubb38\uc81c\uc788\uc74c",
+ "stopped": "\uba48\ucda4",
+ "unlocked": "\ud574\uc81c"
+ },
+ "input_boolean": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "light": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "lock": {
+ "locked": "\uc7a0\uae40",
+ "unlocked": "\ud574\uc81c"
+ },
+ "media_player": {
+ "idle": "\ub300\uae30\uc911",
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0",
+ "paused": "\uc77c\uc2dc\uc911\uc9c0",
+ "playing": "\uc7ac\uc0dd\uc911",
+ "standby": "\uc900\ube44\uc911"
+ },
+ "person": {
+ "home": "\uc7ac\uc2e4",
+ "not_home": "\uc678\ucd9c"
+ },
+ "plant": {
+ "ok": "\ubb38\uc81c\uc5c6\uc74c",
+ "problem": "\ubb38\uc81c\uc788\uc74c"
+ },
+ "remote": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "scene": {
+ "scening": "\uc52c \uad6c\uc131\uc911"
+ },
+ "script": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "sensor": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "sun": {
+ "above_horizon": "\uc8fc\uac04",
+ "below_horizon": "\uc57c\uac04"
+ },
+ "switch": {
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0"
+ },
+ "timer": {
+ "active": "\ud65c\uc131\ud654",
+ "idle": "\ub300\uae30\uc911",
+ "paused": "\uc77c\uc2dc\uc911\uc9c0\ub428"
+ },
+ "vacuum": {
+ "cleaning": "\uccad\uc18c\uc911",
+ "docked": "\ucda9\uc804\uc911",
+ "error": "\uc791\ub3d9 \uc624\ub958",
+ "idle": "\ub300\uae30\uc911",
+ "off": "\uaebc\uc9d0",
+ "on": "\ucf1c\uc9d0",
+ "paused": "\uc77c\uc2dc\uc911\uc9c0\ub428",
+ "returning": "\ucda9\uc804 \ubcf5\uadc0 \uc911"
+ },
+ "weather": {
+ "clear-night": "\ub9d1\uc74c (\ubc24)",
+ "cloudy": "\ud750\ub9bc",
+ "exceptional": "\uc608\uc678\uc0ac\ud56d",
+ "fog": "\uc548\uac1c",
+ "hail": "\uc6b0\ubc15",
+ "lightning": "\ubc88\uac1c",
+ "lightning-rainy": "\ub1cc\uc6b0",
+ "partlycloudy": "\ub300\uccb4\ub85c \ud750\ub9bc",
+ "pouring": "\ud638\uc6b0",
+ "rainy": "\ube44",
+ "snowy": "\ub208",
+ "snowy-rainy": "\uc9c4\ub208\uac1c\ube44",
+ "sunny": "\ub9d1\uc74c",
+ "windy": "\ubc14\ub78c",
+ "windy-variant": "\ubc14\ub78c"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\uc751\ub2f5\uc5c6\uc74c",
+ "initializing": "\ucd08\uae30\ud654\uc911",
+ "ready": "\uc900\ube44",
+ "sleeping": "\uc808\uc804\ubaa8\ub4dc"
+ },
+ "query_stage": {
+ "dead": "\uc751\ub2f5\uc5c6\uc74c ({query_stage})",
+ "initializing": "\ucd08\uae30\ud654\uc911 ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/lb.json b/cast/src/translations/lb.json
new file mode 100644
index 0000000000..19f7b03981
--- /dev/null
+++ b/cast/src/translations/lb.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Aktiv\u00e9iert",
+ "armed_away": "Aktiv\u00e9iert \u00cbnnerwee",
+ "armed_custom_bypass": "Aktiv, Benotzerdefin\u00e9iert",
+ "armed_home": "Aktiv\u00e9iert Doheem",
+ "armed_night": "Aktiv\u00e9iert Nuecht",
+ "arming": "Aktiv\u00e9ieren",
+ "disarmed": "Desaktiv\u00e9iert",
+ "disarming": "Desaktiv\u00e9ieren",
+ "pending": "Ustoend",
+ "triggered": "Ausgel\u00e9ist"
+ },
+ "automation": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normal",
+ "on": "Niddreg"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "Kal"
+ },
+ "connectivity": {
+ "off": "Net Verbonnen",
+ "on": "Verbonnen"
+ },
+ "default": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "door": {
+ "off": "Zou",
+ "on": "Op"
+ },
+ "garage_door": {
+ "off": "Zou",
+ "on": "Op"
+ },
+ "gas": {
+ "off": "Kloer",
+ "on": "Detekt\u00e9iert"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Waarm"
+ },
+ "lock": {
+ "off": "Gespaart",
+ "on": "Net gespaart"
+ },
+ "moisture": {
+ "off": "Dr\u00e9chen",
+ "on": "Naass"
+ },
+ "motion": {
+ "off": "Roueg",
+ "on": "Detekt\u00e9iert"
+ },
+ "occupancy": {
+ "off": "Roueg",
+ "on": "Detekt\u00e9iert"
+ },
+ "opening": {
+ "off": "Zou",
+ "on": "Op"
+ },
+ "presence": {
+ "off": "\u00cbnnerwee",
+ "on": "Doheem"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Problem"
+ },
+ "safety": {
+ "off": "S\u00e9cher",
+ "on": "Ons\u00e9cher"
+ },
+ "smoke": {
+ "off": "Kloer",
+ "on": "Detekt\u00e9iert"
+ },
+ "sound": {
+ "off": "Roueg",
+ "on": "Detekt\u00e9iert"
+ },
+ "vibration": {
+ "off": "Kloer",
+ "on": "Detekt\u00e9iert"
+ },
+ "window": {
+ "off": "Zou",
+ "on": "Op"
+ }
+ },
+ "calendar": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "camera": {
+ "idle": "Roueg",
+ "recording": "H\u00eblt Op",
+ "streaming": "Streamt"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Kill",
+ "dry": "Dr\u00e9chen",
+ "fan_only": "N\u00ebmme Ventilator",
+ "heat": "Heizen",
+ "heat_cool": "H\u00ebtzen/Ofkillen",
+ "off": "Aus"
+ },
+ "configurator": {
+ "configure": "Astellen",
+ "configured": "Agestallt"
+ },
+ "cover": {
+ "closed": "Zou",
+ "closing": "G\u00ebtt zougemaach",
+ "open": "Op",
+ "opening": "G\u00ebtt opgemaach",
+ "stopped": "Gestoppt"
+ },
+ "default": {
+ "off": "Aus",
+ "on": "Un",
+ "unavailable": "Net erreechbar",
+ "unknown": "Onbekannt"
+ },
+ "device_tracker": {
+ "home": "Doheem",
+ "not_home": "\u00cbnnerwee"
+ },
+ "fan": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "group": {
+ "closed": "Zou",
+ "closing": "G\u00ebtt zougemaach",
+ "home": "Doheem",
+ "locked": "Gespaart",
+ "not_home": "\u00cbnnerwee",
+ "off": "Aus",
+ "ok": "OK",
+ "on": "Un",
+ "open": "Op",
+ "opening": "G\u00ebtt opgemaach",
+ "problem": "Problem",
+ "stopped": "Gestoppt",
+ "unlocked": "Net gespaart"
+ },
+ "input_boolean": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "light": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "lock": {
+ "locked": "Gespaart",
+ "unlocked": "Net gespaart"
+ },
+ "media_player": {
+ "idle": "Waart",
+ "off": "Aus",
+ "on": "Un",
+ "paused": "Pauseiert",
+ "playing": "Spillt",
+ "standby": "Standby"
+ },
+ "person": {
+ "home": "Doheem",
+ "not_home": "\u00cbnnerwee"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Problem"
+ },
+ "remote": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "scene": {
+ "scening": "Zeen"
+ },
+ "script": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "sensor": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "sun": {
+ "above_horizon": "Iwwert dem Horizont",
+ "below_horizon": "\u00cbnnert dem Horizont"
+ },
+ "switch": {
+ "off": "Aus",
+ "on": "Un"
+ },
+ "timer": {
+ "active": "Aktiv",
+ "idle": "Waart",
+ "paused": "Pauseiert"
+ },
+ "vacuum": {
+ "cleaning": "Botzt",
+ "docked": "Agedockt",
+ "error": "Feeler",
+ "idle": "Waart",
+ "off": "Aus",
+ "on": "Un",
+ "paused": "Pauseiert",
+ "returning": "K\u00ebnnt zur Statioun zer\u00e9ck"
+ },
+ "weather": {
+ "clear-night": "Kloer, Nuecht",
+ "cloudy": "Wollekeg",
+ "exceptional": "Aussergew\u00e9inlech",
+ "fog": "Niwwel",
+ "hail": "Kn\u00ebppelsteng",
+ "lightning": "Bl\u00ebtz",
+ "lightning-rainy": "Bl\u00ebtz, Reen",
+ "partlycloudy": "Liicht wollekeg",
+ "pouring": "Schloreen",
+ "rainy": "Reen",
+ "snowy": "Schn\u00e9i",
+ "snowy-rainy": "Schn\u00e9i, Reen",
+ "sunny": "Sonneg",
+ "windy": "L\u00ebfteg",
+ "windy-variant": "L\u00ebfteg"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Net Ereechbar",
+ "initializing": "Initialis\u00e9iert",
+ "ready": "Bereet",
+ "sleeping": "Schl\u00e9ift"
+ },
+ "query_stage": {
+ "dead": "Net Ereechbar ({query_stage})",
+ "initializing": "Initialis\u00e9iert ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/lt.json b/cast/src/translations/lt.json
new file mode 100644
index 0000000000..08c9d57d67
--- /dev/null
+++ b/cast/src/translations/lt.json
@@ -0,0 +1,138 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "U\u017erakinta",
+ "armed_home": "Nam\u0173 apsauga \u012fjungta",
+ "arming": "Saugojimo re\u017eimo \u012fjungimas",
+ "disarmed": "Atrakinta",
+ "disarming": "Saugojimo re\u017eimo i\u0161jungimas",
+ "pending": "Laukiama",
+ "triggered": "Aktyvinta"
+ },
+ "automation": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "binary_sensor": {
+ "connectivity": {
+ "off": "Atsijung\u0119s",
+ "on": "Prisijung\u0119s"
+ },
+ "default": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "door": {
+ "off": "U\u017edaryta",
+ "on": "Atidaryta"
+ },
+ "garage_door": {
+ "off": "U\u017edaryta",
+ "on": "Atidaryta"
+ },
+ "gas": {
+ "off": "Neaptikta",
+ "on": "Aptikta"
+ },
+ "moisture": {
+ "off": "Sausa",
+ "on": "\u0160lapia"
+ },
+ "motion": {
+ "off": "Nejuda",
+ "on": "Aptiktas judesys"
+ },
+ "occupancy": {
+ "off": "Laisva",
+ "on": "U\u017eimta"
+ },
+ "opening": {
+ "off": "U\u017edaryta",
+ "on": "Atidaryta"
+ },
+ "safety": {
+ "off": "Saugu",
+ "on": "Nesaugu"
+ },
+ "smoke": {
+ "off": "Neaptikta",
+ "on": "Aptikta"
+ },
+ "sound": {
+ "off": "Tylu",
+ "on": "Aptikta"
+ },
+ "vibration": {
+ "off": "Neaptikta",
+ "on": "Aptikta"
+ },
+ "window": {
+ "off": "U\u017edaryta",
+ "on": "Atidaryta"
+ }
+ },
+ "calendar": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "camera": {
+ "idle": "Laukimo re\u017eimas",
+ "recording": "\u012era\u0161ymas",
+ "streaming": "Transliuojama"
+ },
+ "climate": {
+ "off": "I\u0161jungta"
+ },
+ "default": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta",
+ "unavailable": "(nepasiekiamas)",
+ "unknown": "Ne\u017einoma"
+ },
+ "fan": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "group": {
+ "off": "I\u0161jungta",
+ "ok": "Ok",
+ "on": "\u012ejungta"
+ },
+ "input_boolean": {
+ "on": "\u012ejungta"
+ },
+ "media_player": {
+ "on": "\u012ejungta"
+ },
+ "person": {
+ "home": "Namuose",
+ "not_home": "I\u0161vyk\u0119s"
+ },
+ "remote": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "script": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "sensor": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "switch": {
+ "off": "I\u0161jungta",
+ "on": "\u012ejungta"
+ },
+ "timer": {
+ "active": "aktyvus",
+ "paused": "pristabdytas"
+ },
+ "zwave": {
+ "query_stage": {
+ "dead": " ({query_stage})",
+ "initializing": " ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/lv.json b/cast/src/translations/lv.json
new file mode 100644
index 0000000000..a43bf3065f
--- /dev/null
+++ b/cast/src/translations/lv.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Piesl\u0113gta",
+ "armed_away": "Piesl\u0113gta uz promb\u016btni",
+ "armed_custom_bypass": "Piesl\u0113gts piel\u0101gots apvedce\u013c\u0161",
+ "armed_home": "Piesl\u0113gta m\u0101j\u0101s",
+ "armed_night": "Piesl\u0113gta uz nakti",
+ "arming": "Piesl\u0113dzas",
+ "disarmed": "Atsl\u0113gta",
+ "disarming": "Atsl\u0113dzas",
+ "pending": "Gaida",
+ "triggered": "Aktiviz\u0113ta"
+ },
+ "automation": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Norm\u0101ls",
+ "on": "Zems"
+ },
+ "cold": {
+ "off": "Norm\u0101ls",
+ "on": "Auksts"
+ },
+ "connectivity": {
+ "off": "Atvienots",
+ "on": "Piesl\u0113dzies"
+ },
+ "default": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts"
+ },
+ "door": {
+ "off": "Aizv\u0113rtas",
+ "on": "Atv\u0113rtas"
+ },
+ "garage_door": {
+ "off": "Aizv\u0113rtas",
+ "on": "Atv\u0113rtas"
+ },
+ "gas": {
+ "off": "Br\u012bvs",
+ "on": "Sajusta"
+ },
+ "heat": {
+ "off": "Norm\u0101ls",
+ "on": "Karsts"
+ },
+ "lock": {
+ "off": "Sl\u0113gts",
+ "on": "Atsl\u0113gts"
+ },
+ "moisture": {
+ "off": "Sauss",
+ "on": "Slapj\u0161"
+ },
+ "motion": {
+ "off": "Br\u012bvs",
+ "on": "Sajusta"
+ },
+ "occupancy": {
+ "off": "Br\u012bvs",
+ "on": "Aiz\u0146emts"
+ },
+ "opening": {
+ "off": "Aizv\u0113rts",
+ "on": "Atv\u0113rts"
+ },
+ "presence": {
+ "off": "Promb\u016btne",
+ "on": "M\u0101j\u0101s"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Probl\u0113ma"
+ },
+ "safety": {
+ "off": "Dro\u0161i",
+ "on": "Nedro\u0161i"
+ },
+ "smoke": {
+ "off": "Br\u012bvs",
+ "on": "Sajusta"
+ },
+ "sound": {
+ "off": "Br\u012bvs",
+ "on": "Sajusts"
+ },
+ "vibration": {
+ "off": "Br\u012bvs",
+ "on": "Sajusts"
+ },
+ "window": {
+ "off": "Aizv\u0113rts",
+ "on": "Atv\u0113rts"
+ }
+ },
+ "calendar": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts"
+ },
+ "camera": {
+ "idle": "D\u012bkst\u0101ve",
+ "recording": "Ieraksta",
+ "streaming": "Straum\u0113"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Dzes\u0113\u0161ana",
+ "dry": "Sauss",
+ "fan_only": "Tikai ventilators",
+ "heat": "Sild\u012b\u0161ana",
+ "heat_cool": "Sild\u012bt / Atdzes\u0113t",
+ "off": "Izsl\u0113gts"
+ },
+ "configurator": {
+ "configure": "Konfigur\u0113t",
+ "configured": "Konfigur\u0113ts"
+ },
+ "cover": {
+ "closed": "Sl\u0113gts",
+ "closing": "Sl\u0113dzas",
+ "open": "Atv\u0113rts",
+ "opening": "Atveras",
+ "stopped": "Aptur\u0113ts"
+ },
+ "default": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts",
+ "unavailable": "Nepieejams",
+ "unknown": "Nezin\u0101ms"
+ },
+ "device_tracker": {
+ "home": "M\u0101j\u0101s",
+ "not_home": "Prom"
+ },
+ "fan": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts"
+ },
+ "group": {
+ "closed": "Sl\u0113gta",
+ "closing": "Sl\u0113dzas",
+ "home": "M\u0101j\u0101s",
+ "locked": "Blo\u0137\u0113ta",
+ "not_home": "Promb\u016btn\u0113",
+ "off": "Izsl\u0113gta",
+ "ok": "OK",
+ "on": "Iesl\u0113gta",
+ "open": "Atv\u0113rta",
+ "opening": "Atveras",
+ "problem": "Probl\u0113ma",
+ "stopped": "Aptur\u0113ta",
+ "unlocked": "Atblo\u0137\u0113ta"
+ },
+ "input_boolean": {
+ "off": "Izsl\u0113gta",
+ "on": "Iesl\u0113gta"
+ },
+ "light": {
+ "off": "Izsl\u0113gta",
+ "on": "Iesl\u0113gta"
+ },
+ "lock": {
+ "locked": "Aizsl\u0113gts",
+ "unlocked": "Atsl\u0113gts"
+ },
+ "media_player": {
+ "idle": "D\u012bkst\u0101v\u0113",
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts",
+ "paused": "Aptur\u0113ts",
+ "playing": "Atska\u0146o",
+ "standby": "Gaid\u012b\u0161anas re\u017e\u012bm\u0101"
+ },
+ "person": {
+ "home": "M\u0101j\u0101s",
+ "not_home": "Promb\u016btne"
+ },
+ "plant": {
+ "ok": "Labi",
+ "problem": "Probl\u0113ma"
+ },
+ "remote": {
+ "off": "Izsl\u0113gta",
+ "on": "Iesl\u0113gts"
+ },
+ "scene": {
+ "scening": "Ainas rad\u012b\u0161ana"
+ },
+ "script": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts"
+ },
+ "sensor": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts"
+ },
+ "sun": {
+ "above_horizon": "Virs horizonta",
+ "below_horizon": "Zem horizonta"
+ },
+ "switch": {
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts"
+ },
+ "timer": {
+ "active": "akt\u012bvs",
+ "idle": "d\u012bkst\u0101ve",
+ "paused": "aptur\u0113ts"
+ },
+ "vacuum": {
+ "cleaning": "Notiek uzkop\u0161ana",
+ "docked": "Pie doka",
+ "error": "K\u013c\u016bda",
+ "idle": "D\u012bkst\u0101v\u0113",
+ "off": "Izsl\u0113gts",
+ "on": "Iesl\u0113gts",
+ "paused": "Aptur\u0113ts",
+ "returning": "Ce\u013c\u0101 pie doka"
+ },
+ "weather": {
+ "clear-night": "Skaidrs, nakts",
+ "cloudy": "M\u0101ko\u0146ains",
+ "exceptional": "Iz\u0146\u0113muma k\u0101rt\u0101",
+ "fog": "Migla",
+ "hail": "Krusa",
+ "lightning": "Zibens",
+ "lightning-rainy": "Zibens, lietus",
+ "partlycloudy": "Da\u013c\u0113ji apm\u0101cies",
+ "pouring": "Lietusg\u0101ze",
+ "rainy": "Lietains",
+ "snowy": "Sniegs",
+ "snowy-rainy": "Sniegs, lietus",
+ "sunny": "Saulains",
+ "windy": "V\u0113jains",
+ "windy-variant": "V\u0113jains"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Beigta",
+ "initializing": "Inicializ\u0113",
+ "ready": "Gatavs",
+ "sleeping": "Gu\u013c"
+ },
+ "query_stage": {
+ "dead": "Beigta ({query_stage})",
+ "initializing": "Inicializ\u0113 ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/nb.json b/cast/src/translations/nb.json
new file mode 100644
index 0000000000..9daa20705c
--- /dev/null
+++ b/cast/src/translations/nb.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Armert",
+ "armed_away": "Armert borte",
+ "armed_custom_bypass": "Armert tilpasset unntak",
+ "armed_home": "Armert hjemme",
+ "armed_night": "Armert natt",
+ "arming": "Armerer",
+ "disarmed": "Avsl\u00e5tt",
+ "disarming": "Skrur av",
+ "pending": "Venter",
+ "triggered": "Utl\u00f8st"
+ },
+ "automation": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normalt",
+ "on": "Lavt"
+ },
+ "cold": {
+ "off": "",
+ "on": "Kald"
+ },
+ "connectivity": {
+ "off": "Frakoblet",
+ "on": "Tilkoblet"
+ },
+ "default": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "door": {
+ "off": "Lukket",
+ "on": "\u00c5pen"
+ },
+ "garage_door": {
+ "off": "Lukket",
+ "on": "\u00c5pen"
+ },
+ "gas": {
+ "off": "Klar",
+ "on": "Oppdaget"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Varm"
+ },
+ "lock": {
+ "off": "L\u00e5st",
+ "on": "Ul\u00e5st"
+ },
+ "moisture": {
+ "off": "T\u00f8rr",
+ "on": "Fuktig"
+ },
+ "motion": {
+ "off": "Klar",
+ "on": "Oppdaget"
+ },
+ "occupancy": {
+ "off": "Klar",
+ "on": "Oppdaget"
+ },
+ "opening": {
+ "off": "Lukket",
+ "on": "\u00c5pen"
+ },
+ "presence": {
+ "off": "Borte",
+ "on": "Hjemme"
+ },
+ "problem": {
+ "off": "",
+ "on": ""
+ },
+ "safety": {
+ "off": "Sikker",
+ "on": "Usikker"
+ },
+ "smoke": {
+ "off": "Klar",
+ "on": "Oppdaget"
+ },
+ "sound": {
+ "off": "Klar",
+ "on": "Oppdaget"
+ },
+ "vibration": {
+ "off": "Klar",
+ "on": "Oppdaget"
+ },
+ "window": {
+ "off": "Lukket",
+ "on": "\u00c5pent"
+ }
+ },
+ "calendar": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "camera": {
+ "idle": "Inaktiv",
+ "recording": "Opptak",
+ "streaming": "Str\u00f8mmer"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Kj\u00f8ling",
+ "dry": "T\u00f8rr",
+ "fan_only": "Kun vifte",
+ "heat": "Varme",
+ "heat_cool": "Varme/kj\u00f8ling",
+ "off": "Av"
+ },
+ "configurator": {
+ "configure": "Konfigurer",
+ "configured": "Konfigurert"
+ },
+ "cover": {
+ "closed": "Lukket",
+ "closing": "Lukker",
+ "open": "\u00c5pen",
+ "opening": "\u00c5pner",
+ "stopped": "Stoppet"
+ },
+ "default": {
+ "off": "Av",
+ "on": "P\u00e5",
+ "unavailable": "Utilgjengelig",
+ "unknown": "Ukjent"
+ },
+ "device_tracker": {
+ "home": "Hjemme",
+ "not_home": "Borte"
+ },
+ "fan": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "group": {
+ "closed": "Lukket",
+ "closing": "Lukker",
+ "home": "Hjemme",
+ "locked": "L\u00e5st",
+ "not_home": "Borte",
+ "off": "Av",
+ "ok": "",
+ "on": "P\u00e5",
+ "open": "\u00c5pen",
+ "opening": "\u00c5pner",
+ "problem": "Problem",
+ "stopped": "Stoppet",
+ "unlocked": "Ul\u00e5st"
+ },
+ "input_boolean": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "light": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "lock": {
+ "locked": "L\u00e5st",
+ "unlocked": "Ul\u00e5st"
+ },
+ "media_player": {
+ "idle": "Inaktiv",
+ "off": "Av",
+ "on": "P\u00e5",
+ "paused": "Pauset",
+ "playing": "Spiller",
+ "standby": "Avventer"
+ },
+ "person": {
+ "home": "Hjemme",
+ "not_home": "Borte"
+ },
+ "plant": {
+ "ok": "",
+ "problem": "Problem"
+ },
+ "remote": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "scene": {
+ "scening": "Scenende"
+ },
+ "script": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "sensor": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "sun": {
+ "above_horizon": "Over horisonten",
+ "below_horizon": "Under horisonten"
+ },
+ "switch": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "timer": {
+ "active": "aktiv",
+ "idle": "inaktiv",
+ "paused": "pauset"
+ },
+ "vacuum": {
+ "cleaning": "Rengj\u00f8r",
+ "docked": "Dokket",
+ "error": "Feil",
+ "idle": "Inaktiv",
+ "off": "Av",
+ "on": "P\u00e5",
+ "paused": "Pauset",
+ "returning": "Returner til dokk"
+ },
+ "weather": {
+ "clear-night": "Klart, natt",
+ "cloudy": "Skyet",
+ "exceptional": "Eksepsjonell",
+ "fog": "T\u00e5ke",
+ "hail": "Hagl",
+ "lightning": "Lyn",
+ "lightning-rainy": "Lyn, regn",
+ "partlycloudy": "Delvis skyet",
+ "pouring": "Kraftig nedb\u00f8r",
+ "rainy": "Regn",
+ "snowy": "Sn\u00f8",
+ "snowy-rainy": "Sludd",
+ "sunny": "Solfylt",
+ "windy": "Vind",
+ "windy-variant": "Vind"
+ },
+ "zwave": {
+ "default": {
+ "dead": "D\u00f8d",
+ "initializing": "Initialiserer",
+ "ready": "Klar",
+ "sleeping": "Sover"
+ },
+ "query_stage": {
+ "dead": "D\u00f8d ({query_stage})",
+ "initializing": "Initialiserer ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/nl.json b/cast/src/translations/nl.json
new file mode 100644
index 0000000000..9c69c17bef
--- /dev/null
+++ b/cast/src/translations/nl.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Ingeschakeld",
+ "armed_away": "Ingeschakeld afwezig",
+ "armed_custom_bypass": "Ingeschakeld met overbrugging(en)",
+ "armed_home": "Ingeschakeld thuis",
+ "armed_night": "Ingeschakeld nacht",
+ "arming": "Schakelt in",
+ "disarmed": "Uitgeschakeld",
+ "disarming": "Schakelt uit",
+ "pending": "In wacht",
+ "triggered": "Geactiveerd"
+ },
+ "automation": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normaal",
+ "on": "Laag"
+ },
+ "cold": {
+ "off": "Normaal",
+ "on": "Koud"
+ },
+ "connectivity": {
+ "off": "Verbroken",
+ "on": "Verbonden"
+ },
+ "default": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "door": {
+ "off": "Dicht",
+ "on": "Open"
+ },
+ "garage_door": {
+ "off": "Dicht",
+ "on": "Open"
+ },
+ "gas": {
+ "off": "Niet gedetecteerd",
+ "on": "Gedetecteerd"
+ },
+ "heat": {
+ "off": "Normaal",
+ "on": "Heet"
+ },
+ "lock": {
+ "off": "Vergrendeld",
+ "on": "Ontgrendeld"
+ },
+ "moisture": {
+ "off": "Droog",
+ "on": "Vochtig"
+ },
+ "motion": {
+ "off": "Niet gedetecteerd",
+ "on": "Gedetecteerd"
+ },
+ "occupancy": {
+ "off": "Niet gedetecteerd",
+ "on": "Gedetecteerd"
+ },
+ "opening": {
+ "off": "Gesloten",
+ "on": "Open"
+ },
+ "presence": {
+ "off": "Afwezig",
+ "on": "Thuis"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Probleem"
+ },
+ "safety": {
+ "off": "Veilig",
+ "on": "Onveilig"
+ },
+ "smoke": {
+ "off": "Niet gedetecteerd",
+ "on": "Gedetecteerd"
+ },
+ "sound": {
+ "off": "Niet gedetecteerd",
+ "on": "Gedetecteerd"
+ },
+ "vibration": {
+ "off": "Niet gedetecteerd",
+ "on": "Gedetecteerd"
+ },
+ "window": {
+ "off": "Dicht",
+ "on": "Open"
+ }
+ },
+ "calendar": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "camera": {
+ "idle": "Inactief",
+ "recording": "Opnemen",
+ "streaming": "Streamen"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Koelen",
+ "dry": "Droog",
+ "fan_only": "Alleen ventilatie",
+ "heat": "Verwarmen",
+ "heat_cool": "Verwarmen/Koelen",
+ "off": "Uit"
+ },
+ "configurator": {
+ "configure": "Configureer",
+ "configured": "Geconfigureerd"
+ },
+ "cover": {
+ "closed": "Gesloten",
+ "closing": "Sluit",
+ "open": "Open",
+ "opening": "Opent",
+ "stopped": "Gestopt"
+ },
+ "default": {
+ "off": "Uit",
+ "on": "Aan",
+ "unavailable": "Niet beschikbaar",
+ "unknown": "Onbekend"
+ },
+ "device_tracker": {
+ "home": "Thuis",
+ "not_home": "Afwezig"
+ },
+ "fan": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "group": {
+ "closed": "Gesloten",
+ "closing": "Sluiten",
+ "home": "Thuis",
+ "locked": "Vergrendeld",
+ "not_home": "Afwezig",
+ "off": "Uit",
+ "ok": "OK",
+ "on": "Aan",
+ "open": "Open",
+ "opening": "Openen",
+ "problem": "Probleem",
+ "stopped": "Gestopt",
+ "unlocked": "Ontgrendeld"
+ },
+ "input_boolean": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "light": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "lock": {
+ "locked": "Vergrendeld",
+ "unlocked": "Ontgrendeld"
+ },
+ "media_player": {
+ "idle": "Inactief",
+ "off": "Uit",
+ "on": "Aan",
+ "paused": "Gepauzeerd",
+ "playing": "Afspelen",
+ "standby": "Standby"
+ },
+ "person": {
+ "home": "Thuis",
+ "not_home": "Afwezig"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Probleem"
+ },
+ "remote": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "scene": {
+ "scening": "Sc\u00e8nes"
+ },
+ "script": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "sensor": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "sun": {
+ "above_horizon": "Boven de horizon",
+ "below_horizon": "Onder de horizon"
+ },
+ "switch": {
+ "off": "Uit",
+ "on": "Aan"
+ },
+ "timer": {
+ "active": "actief",
+ "idle": "inactief",
+ "paused": "gepauzeerd"
+ },
+ "vacuum": {
+ "cleaning": "Reinigen",
+ "docked": "Gedockt",
+ "error": "Fout",
+ "idle": "Inactief",
+ "off": "Uit",
+ "on": "Aan",
+ "paused": "Gepauseerd",
+ "returning": "Terugkeren naar dock"
+ },
+ "weather": {
+ "clear-night": "Helder, nacht",
+ "cloudy": "Bewolkt",
+ "exceptional": "Uitzonderlijk",
+ "fog": "Mist",
+ "hail": "Hagel",
+ "lightning": "Bliksem",
+ "lightning-rainy": "Bliksem, regenachtig",
+ "partlycloudy": "Gedeeltelijk bewolkt",
+ "pouring": "Regen",
+ "rainy": "Regenachtig",
+ "snowy": "Sneeuwachtig",
+ "snowy-rainy": "Sneeuw-, regenachtig",
+ "sunny": "Zonnig",
+ "windy": "Winderig",
+ "windy-variant": "Winderig"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Onbereikbaar",
+ "initializing": "Initialiseren",
+ "ready": "Gereed",
+ "sleeping": "Slaapt"
+ },
+ "query_stage": {
+ "dead": "Onbereikbaar ({query_stage})",
+ "initializing": "Initialiseren ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/nn.json b/cast/src/translations/nn.json
new file mode 100644
index 0000000000..afe791aab5
--- /dev/null
+++ b/cast/src/translations/nn.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "P\u00e5sl\u00e5tt",
+ "armed_away": "P\u00e5 for borte",
+ "armed_custom_bypass": "Armert tilpassa unntak",
+ "armed_home": "P\u00e5 for heime",
+ "armed_night": "P\u00e5 for natta",
+ "arming": "Skrur p\u00e5",
+ "disarmed": "Avsl\u00e5tt",
+ "disarming": "Skrur av",
+ "pending": "I vente av",
+ "triggered": "Utl\u00f8yst"
+ },
+ "automation": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normalt",
+ "on": "L\u00e5gt"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "Kald"
+ },
+ "connectivity": {
+ "off": "Fr\u00e5kopla",
+ "on": "Tilkopla"
+ },
+ "default": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "door": {
+ "off": "Lukka",
+ "on": "Open"
+ },
+ "garage_door": {
+ "off": "Lukka",
+ "on": "Open"
+ },
+ "gas": {
+ "off": "Ikkje oppdaga",
+ "on": "Oppdaga"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Varm"
+ },
+ "lock": {
+ "off": "L\u00e5st",
+ "on": "Ul\u00e5st"
+ },
+ "moisture": {
+ "off": "T\u00f8rr",
+ "on": "V\u00e5t"
+ },
+ "motion": {
+ "off": "Ikkje oppdaga",
+ "on": "Oppdaga"
+ },
+ "occupancy": {
+ "off": "Ikkje oppdaga",
+ "on": "Oppdaga"
+ },
+ "opening": {
+ "off": "Lukka",
+ "on": "Open"
+ },
+ "presence": {
+ "off": "Borte",
+ "on": "Heime"
+ },
+ "problem": {
+ "off": "Ok",
+ "on": "Problem"
+ },
+ "safety": {
+ "off": "Sikker",
+ "on": "Usikker"
+ },
+ "smoke": {
+ "off": "Ikkje oppdaga",
+ "on": "Oppdaga"
+ },
+ "sound": {
+ "off": "Ikkje oppdaga",
+ "on": "Oppdaga"
+ },
+ "vibration": {
+ "off": "Ikkje oppdaga",
+ "on": "Oppdaga"
+ },
+ "window": {
+ "off": "Lukka",
+ "on": "Open"
+ }
+ },
+ "calendar": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "camera": {
+ "idle": "Inaktiv",
+ "recording": "Opptak",
+ "streaming": "Str\u00f8ymer"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Kj\u00f8le",
+ "dry": "T\u00f8rr",
+ "fan_only": "Berre vifte",
+ "heat": "Varme",
+ "heat_cool": "Oppvarming/Nedkj\u00f8ling",
+ "off": "Av"
+ },
+ "configurator": {
+ "configure": "Konfigurerer",
+ "configured": "Konfigurert"
+ },
+ "cover": {
+ "closed": "Lukka",
+ "closing": "Lukkar",
+ "open": "Open",
+ "opening": "Opnar",
+ "stopped": "Stoppa"
+ },
+ "default": {
+ "off": "Av",
+ "on": "P\u00e5",
+ "unavailable": "Utilgjengelig",
+ "unknown": "Ukjent"
+ },
+ "device_tracker": {
+ "home": "Heime",
+ "not_home": "Borte"
+ },
+ "fan": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "group": {
+ "closed": "Lukka",
+ "closing": "Lukkar",
+ "home": "Heime",
+ "locked": "L\u00e5st",
+ "not_home": "Borte",
+ "off": "Av",
+ "ok": "Ok",
+ "on": "P\u00e5",
+ "open": "Open",
+ "opening": "Opnar",
+ "problem": "Problem",
+ "stopped": "Stoppa",
+ "unlocked": "Ul\u00e5st"
+ },
+ "input_boolean": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "light": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "lock": {
+ "locked": "L\u00e5st",
+ "unlocked": "Ul\u00e5st"
+ },
+ "media_player": {
+ "idle": "Inaktiv",
+ "off": "Av",
+ "on": "P\u00e5",
+ "paused": "Pausa",
+ "playing": "Spelar",
+ "standby": "Avventer"
+ },
+ "person": {
+ "home": "Heime",
+ "not_home": "Borte "
+ },
+ "plant": {
+ "ok": "Ok",
+ "problem": "Problem"
+ },
+ "remote": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "scene": {
+ "scening": "Scenande"
+ },
+ "script": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "sensor": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "sun": {
+ "above_horizon": "Over horisonten",
+ "below_horizon": "Under horisonten"
+ },
+ "switch": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "timer": {
+ "active": "aktiv",
+ "idle": "tomgang",
+ "paused": "pausa"
+ },
+ "vacuum": {
+ "cleaning": "Reingjer",
+ "docked": "Parkert",
+ "error": "Feil",
+ "idle": "Tomgang",
+ "off": "Av",
+ "on": "P\u00e5",
+ "paused": "Pausa",
+ "returning": "G\u00e5 tilbake til ladestasjonen"
+ },
+ "weather": {
+ "clear-night": "Klart, natt",
+ "cloudy": "Overskya",
+ "exceptional": "Utmerka",
+ "fog": "T\u00e5ke",
+ "hail": "Hagl",
+ "lightning": "Lyn",
+ "lightning-rainy": "Lyn, regn",
+ "partlycloudy": "Delvis overskya",
+ "pouring": "P\u00f8sande",
+ "rainy": "Regn",
+ "snowy": "Sn\u00f8",
+ "snowy-rainy": "Sn\u00f8, regn",
+ "sunny": "Mykje sol",
+ "windy": "Vind",
+ "windy-variant": "Vind"
+ },
+ "zwave": {
+ "default": {
+ "dead": "D\u00f8d",
+ "initializing": "Initialiserer",
+ "ready": "Klar",
+ "sleeping": "S\u00f8v"
+ },
+ "query_stage": {
+ "dead": "D\u00f8d ({query_stage})",
+ "initializing": "Initialiserer ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/pl.json b/cast/src/translations/pl.json
new file mode 100644
index 0000000000..71f5c5fc45
--- /dev/null
+++ b/cast/src/translations/pl.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "uzbrojony",
+ "armed_away": "uzbrojony (poza domem)",
+ "armed_custom_bypass": "uzbrojony (cz\u0119\u015bciowo)",
+ "armed_home": "uzbrojony (w domu)",
+ "armed_night": "uzbrojony (noc)",
+ "arming": "uzbrajanie",
+ "disarmed": "rozbrojony",
+ "disarming": "rozbrajanie",
+ "pending": "oczekuje",
+ "triggered": "wyzwolony"
+ },
+ "automation": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "na\u0142adowana",
+ "on": "roz\u0142adowana"
+ },
+ "cold": {
+ "off": "normalnie",
+ "on": "zimno"
+ },
+ "connectivity": {
+ "off": "offline",
+ "on": "online"
+ },
+ "default": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "door": {
+ "off": "zamkni\u0119te",
+ "on": "otwarte"
+ },
+ "garage_door": {
+ "off": "zamkni\u0119ta",
+ "on": "otwarta"
+ },
+ "gas": {
+ "off": "brak",
+ "on": "wykryto"
+ },
+ "heat": {
+ "off": "normalnie",
+ "on": "gor\u0105co"
+ },
+ "lock": {
+ "off": "zamkni\u0119ty",
+ "on": "otwarty"
+ },
+ "moisture": {
+ "off": "brak wilgoci",
+ "on": "wilgo\u0107"
+ },
+ "motion": {
+ "off": "brak",
+ "on": "wykryto"
+ },
+ "occupancy": {
+ "off": "brak",
+ "on": "wykryto"
+ },
+ "opening": {
+ "off": "zamkni\u0119te",
+ "on": "otwarte"
+ },
+ "presence": {
+ "off": "poza domem",
+ "on": "w domu"
+ },
+ "problem": {
+ "off": "ok",
+ "on": "problem"
+ },
+ "safety": {
+ "off": "brak zagro\u017cenia",
+ "on": "zagro\u017cenie"
+ },
+ "smoke": {
+ "off": "brak",
+ "on": "wykryto"
+ },
+ "sound": {
+ "off": "brak",
+ "on": "wykryto"
+ },
+ "vibration": {
+ "off": "brak",
+ "on": "wykryto"
+ },
+ "window": {
+ "off": "zamkni\u0119te",
+ "on": "otwarte"
+ }
+ },
+ "calendar": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "camera": {
+ "idle": "nieaktywna",
+ "recording": "nagrywanie",
+ "streaming": "strumieniowanie"
+ },
+ "climate": {
+ "auto": "automatyczny",
+ "cool": "ch\u0142odzenie",
+ "dry": "osuszanie",
+ "fan_only": "tylko wentylator",
+ "heat": "grzanie",
+ "heat_cool": "grzanie/ch\u0142odzenie",
+ "off": "wy\u0142\u0105czony"
+ },
+ "configurator": {
+ "configure": "Skonfiguruj",
+ "configured": "skonfigurowany"
+ },
+ "cover": {
+ "closed": "zamkni\u0119ta",
+ "closing": "zamykanie",
+ "open": "otwarta",
+ "opening": "otwieranie",
+ "stopped": "zatrzymany"
+ },
+ "default": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony",
+ "unavailable": "niedost\u0119pny",
+ "unknown": "nieznany"
+ },
+ "device_tracker": {
+ "home": "w domu",
+ "not_home": "poza domem"
+ },
+ "fan": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "group": {
+ "closed": "zamkni\u0119te",
+ "closing": "zamykanie",
+ "home": "w domu",
+ "locked": "zamkni\u0119ty",
+ "not_home": "poza domem",
+ "off": "wy\u0142\u0105czony",
+ "ok": "ok",
+ "on": "w\u0142\u0105czony",
+ "open": "otwarte",
+ "opening": "otwieranie",
+ "problem": "problem",
+ "stopped": "zatrzymany",
+ "unlocked": "otwarty"
+ },
+ "input_boolean": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "light": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "lock": {
+ "locked": "zamkni\u0119ty",
+ "unlocked": "otwarty"
+ },
+ "media_player": {
+ "idle": "nieaktywny",
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony",
+ "paused": "wstrzymany",
+ "playing": "odtwarzanie",
+ "standby": "tryb czuwania"
+ },
+ "person": {
+ "home": "w domu",
+ "not_home": "poza domem"
+ },
+ "plant": {
+ "ok": "ok",
+ "problem": "problem"
+ },
+ "remote": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "scene": {
+ "scening": "sceny"
+ },
+ "script": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "sensor": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "sun": {
+ "above_horizon": "powy\u017cej horyzontu",
+ "below_horizon": "poni\u017cej horyzontu"
+ },
+ "switch": {
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony"
+ },
+ "timer": {
+ "active": "aktywny",
+ "idle": "nieaktywny",
+ "paused": "wstrzymany"
+ },
+ "vacuum": {
+ "cleaning": "sprz\u0105tanie",
+ "docked": "w stacji dokuj\u0105cej",
+ "error": "b\u0142\u0105d",
+ "idle": "nieaktywny",
+ "off": "wy\u0142\u0105czony",
+ "on": "w\u0142\u0105czony",
+ "paused": "wstrzymany",
+ "returning": "powr\u00f3t do stacji dokuj\u0105cej"
+ },
+ "weather": {
+ "clear-night": "pogodnie, noc",
+ "cloudy": "pochmurno",
+ "exceptional": "wyj\u0105tkowy",
+ "fog": "mg\u0142a",
+ "hail": "grad",
+ "lightning": "b\u0142yskawice",
+ "lightning-rainy": "burza",
+ "partlycloudy": "cz\u0119\u015bciowe zachmurzenie",
+ "pouring": "ulewa",
+ "rainy": "deszczowo",
+ "snowy": "\u015bnie\u017cnie",
+ "snowy-rainy": "\u015bnie\u017cnie, deszczowo",
+ "sunny": "s\u0142onecznie",
+ "windy": "wietrznie",
+ "windy-variant": "wietrznie"
+ },
+ "zwave": {
+ "default": {
+ "dead": "martwy",
+ "initializing": "inicjalizacja",
+ "ready": "gotowy",
+ "sleeping": "u\u015bpiony"
+ },
+ "query_stage": {
+ "dead": "martwy ({query_stage})",
+ "initializing": "inicjalizacja ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/pt-BR.json b/cast/src/translations/pt-BR.json
new file mode 100644
index 0000000000..d9a302bc85
--- /dev/null
+++ b/cast/src/translations/pt-BR.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Armado",
+ "armed_away": "Armado ausente",
+ "armed_custom_bypass": "Armado em \u00e1reas espec\u00edficas",
+ "armed_home": "Armado casa",
+ "armed_night": "Armado noite",
+ "arming": "Armando",
+ "disarmed": "Desarmado",
+ "disarming": "Desarmando",
+ "pending": "Pendente",
+ "triggered": "Acionado"
+ },
+ "automation": {
+ "off": "Desligado",
+ "on": "Ativa"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normal",
+ "on": "Fraca"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "Frio"
+ },
+ "connectivity": {
+ "off": "Desconectado",
+ "on": "Conectado"
+ },
+ "default": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "door": {
+ "off": "Fechado",
+ "on": "Aberto"
+ },
+ "garage_door": {
+ "off": "Fechado",
+ "on": "Aberto"
+ },
+ "gas": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Quente"
+ },
+ "lock": {
+ "off": "Trancado",
+ "on": "Desbloqueado"
+ },
+ "moisture": {
+ "off": "Seco",
+ "on": "Molhado"
+ },
+ "motion": {
+ "off": "Desligado",
+ "on": "Detectado"
+ },
+ "occupancy": {
+ "off": "Desocupado",
+ "on": "Detectado"
+ },
+ "opening": {
+ "off": "Fechado",
+ "on": "Aberto"
+ },
+ "presence": {
+ "off": "Ausente",
+ "on": "Em casa"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Problema"
+ },
+ "safety": {
+ "off": "Seguro",
+ "on": "N\u00e3o seguro"
+ },
+ "smoke": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "sound": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "vibration": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "window": {
+ "off": "Fechado",
+ "on": "Aberto"
+ }
+ },
+ "calendar": {
+ "off": "Inativo",
+ "on": "Ativo"
+ },
+ "camera": {
+ "idle": "Ocioso",
+ "recording": "Gravando",
+ "streaming": "Transmitindo"
+ },
+ "climate": {
+ "auto": "Autom\u00e1tico",
+ "cool": "Frio",
+ "dry": "Seco",
+ "fan_only": "Apenas ventilador",
+ "heat": "Quente",
+ "heat_cool": "Quente/Frio",
+ "off": "Desligado"
+ },
+ "configurator": {
+ "configure": "Configurar",
+ "configured": "Configurado"
+ },
+ "cover": {
+ "closed": "Fechado",
+ "closing": "Fechando",
+ "open": "Aberto",
+ "opening": "Abrindo",
+ "stopped": "Parado"
+ },
+ "default": {
+ "off": "Desligado",
+ "on": "Ligado",
+ "unavailable": "Indispon\u00edvel",
+ "unknown": "Desconhecido"
+ },
+ "device_tracker": {
+ "home": "Em casa",
+ "not_home": "Ausente"
+ },
+ "fan": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "group": {
+ "closed": "Fechado",
+ "closing": "Fechando",
+ "home": "Em casa",
+ "locked": "Trancado",
+ "not_home": "Ausente",
+ "off": "Desligado",
+ "ok": "OK",
+ "on": "Ligado",
+ "open": "Aberto",
+ "opening": "Abrindo",
+ "problem": "Problema",
+ "stopped": "Parado",
+ "unlocked": "Destrancado"
+ },
+ "input_boolean": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "light": {
+ "off": "Desligada",
+ "on": "Ligada"
+ },
+ "lock": {
+ "locked": "Trancado",
+ "unlocked": "Destrancado"
+ },
+ "media_player": {
+ "idle": "Ocioso",
+ "off": "Desligado",
+ "on": "Ligado",
+ "paused": "Pausado",
+ "playing": "Tocando",
+ "standby": "Em espera"
+ },
+ "person": {
+ "home": "Em casa",
+ "not_home": "Ausente"
+ },
+ "plant": {
+ "ok": "Ok",
+ "problem": "Problema"
+ },
+ "remote": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "scene": {
+ "scening": "Ativa"
+ },
+ "script": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "sensor": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "sun": {
+ "above_horizon": "Acima do horizonte",
+ "below_horizon": "Abaixo do horizonte"
+ },
+ "switch": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "timer": {
+ "active": "ativo",
+ "idle": "ocioso",
+ "paused": "Pausado"
+ },
+ "vacuum": {
+ "cleaning": "Limpando",
+ "docked": "Baseado",
+ "error": "Erro",
+ "idle": "Em espera",
+ "off": "Desligado",
+ "on": "Ligado",
+ "paused": "Pausado",
+ "returning": "Retornando para base"
+ },
+ "weather": {
+ "clear-night": "Noite clara",
+ "cloudy": "Nublado",
+ "exceptional": "Excepcional",
+ "fog": "Nevoeiro",
+ "hail": "Granizo",
+ "lightning": "Raios",
+ "lightning-rainy": "Raios, chuvoso",
+ "partlycloudy": "Parcialmente nublado",
+ "pouring": "Torrencial",
+ "rainy": "Chuvoso",
+ "snowy": "Neve",
+ "snowy-rainy": "Neve, chuva",
+ "sunny": "Ensolarado",
+ "windy": "Ventoso",
+ "windy-variant": "Ventoso"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Morto",
+ "initializing": "Iniciando",
+ "ready": "Pronto",
+ "sleeping": "Dormindo"
+ },
+ "query_stage": {
+ "dead": "Morto ({query_stage})",
+ "initializing": "Iniciando ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/pt.json b/cast/src/translations/pt.json
new file mode 100644
index 0000000000..f2cc147743
--- /dev/null
+++ b/cast/src/translations/pt.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Armado",
+ "armed_away": "Armado ausente",
+ "armed_custom_bypass": "Armado com desvio personalizado",
+ "armed_home": "Armado Casa",
+ "armed_night": "Armado noite",
+ "arming": "A armar",
+ "disarmed": "Desarmado",
+ "disarming": "A desarmar",
+ "pending": "Pendente",
+ "triggered": "Despoletado"
+ },
+ "automation": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normal",
+ "on": "Baixo"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "Frio"
+ },
+ "connectivity": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "default": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "door": {
+ "off": "Fechada",
+ "on": "Aberta"
+ },
+ "garage_door": {
+ "off": "Fechada",
+ "on": "Aberta"
+ },
+ "gas": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Quente"
+ },
+ "lock": {
+ "off": "Trancada",
+ "on": "Destrancada"
+ },
+ "moisture": {
+ "off": "Seco",
+ "on": "H\u00famido"
+ },
+ "motion": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "occupancy": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "opening": {
+ "off": "Fechado",
+ "on": "Aberto"
+ },
+ "presence": {
+ "off": "Fora",
+ "on": "Casa"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Problema"
+ },
+ "safety": {
+ "off": "Seguro",
+ "on": "Inseguro"
+ },
+ "smoke": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "sound": {
+ "off": "Limpo",
+ "on": "Detectado"
+ },
+ "vibration": {
+ "off": "Limpo",
+ "on": "Detetado"
+ },
+ "window": {
+ "off": "Fechada",
+ "on": "Aberta"
+ }
+ },
+ "calendar": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "camera": {
+ "idle": "Em espera",
+ "recording": "A gravar",
+ "streaming": "A enviar"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Frio",
+ "dry": "Desumidificar",
+ "fan_only": "Apenas ventilar",
+ "heat": "Quente",
+ "heat_cool": "Calor / Frio",
+ "off": "Desligado"
+ },
+ "configurator": {
+ "configure": "Configurar",
+ "configured": "Configurado"
+ },
+ "cover": {
+ "closed": "Fechada",
+ "closing": "A fechar",
+ "open": "Aberta",
+ "opening": "A abrir",
+ "stopped": "Parado"
+ },
+ "default": {
+ "off": "Desligado",
+ "on": "Ligado",
+ "unavailable": "Indispon\u00edvel",
+ "unknown": "Desconhecido"
+ },
+ "device_tracker": {
+ "home": "Casa",
+ "not_home": "Fora"
+ },
+ "fan": {
+ "off": "Desligada",
+ "on": "Ligado"
+ },
+ "group": {
+ "closed": "Fechada",
+ "closing": "A fechar",
+ "home": "Casa",
+ "locked": "Bloqueado",
+ "not_home": "Fora",
+ "off": "Desligado",
+ "ok": "OK",
+ "on": "Ligado",
+ "open": "Aberta",
+ "opening": "A abrir",
+ "problem": "Problema",
+ "stopped": "Parado",
+ "unlocked": "Desbloqueado"
+ },
+ "input_boolean": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "light": {
+ "off": "Desligada",
+ "on": "Ligada"
+ },
+ "lock": {
+ "locked": "Trancada",
+ "unlocked": "Destrancada"
+ },
+ "media_player": {
+ "idle": "Em espera",
+ "off": "Desligado",
+ "on": "Ligado",
+ "paused": "Em pausa",
+ "playing": "A reproduzir",
+ "standby": "Em espera"
+ },
+ "person": {
+ "home": "Casa",
+ "not_home": "Ausente"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Problema"
+ },
+ "remote": {
+ "off": "Desativado",
+ "on": "Ligado"
+ },
+ "scene": {
+ "scening": "Cenas"
+ },
+ "script": {
+ "off": "Desativado",
+ "on": "Ligado"
+ },
+ "sensor": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "sun": {
+ "above_horizon": "Acima do horizonte",
+ "below_horizon": "Abaixo do horizonte"
+ },
+ "switch": {
+ "off": "Desligado",
+ "on": "Ligado"
+ },
+ "timer": {
+ "active": "ativo",
+ "idle": "Em espera",
+ "paused": "Em pausa"
+ },
+ "vacuum": {
+ "cleaning": "A limpar",
+ "docked": "Encaixado",
+ "error": "Erro",
+ "idle": "Em espera",
+ "off": "Desligado",
+ "on": "Ligado",
+ "paused": "Em pausa",
+ "returning": "A regressar \u00e0 doca"
+ },
+ "weather": {
+ "clear-night": "Limpo, Noite",
+ "cloudy": "Nublado",
+ "exceptional": "Excepcional",
+ "fog": "Nevoeiro",
+ "hail": "Granizo",
+ "lightning": "Rel\u00e2mpago",
+ "lightning-rainy": "Rel\u00e2mpagos, chuva",
+ "partlycloudy": "Parcialmente nublado",
+ "pouring": "Chuva forte",
+ "rainy": "Chuva",
+ "snowy": "Neve",
+ "snowy-rainy": "Neve, chuva",
+ "sunny": "Sol",
+ "windy": "Vento fraco",
+ "windy-variant": "Vento fraco"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Morto",
+ "initializing": "A inicializar",
+ "ready": "Pronto",
+ "sleeping": "Adormecido"
+ },
+ "query_stage": {
+ "dead": "Morto ({query_stage})",
+ "initializing": "A inicializar ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/ro.json b/cast/src/translations/ro.json
new file mode 100644
index 0000000000..c6cd24da00
--- /dev/null
+++ b/cast/src/translations/ro.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Armat",
+ "armed_away": "Armat plecat",
+ "armed_custom_bypass": "Armare personalizat\u0103",
+ "armed_home": "Armat acas\u0103",
+ "armed_night": "Armat noaptea",
+ "arming": "Armare",
+ "disarmed": "Dezarmat",
+ "disarming": "Dezarmare",
+ "pending": "\u00cen a\u0219teptare",
+ "triggered": "Declan\u0219at"
+ },
+ "automation": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normal",
+ "on": "Sc\u0103zuta"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "Rece"
+ },
+ "connectivity": {
+ "off": "Deconectat",
+ "on": "Conectat"
+ },
+ "default": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "door": {
+ "off": "\u00cenchis",
+ "on": "Deschis"
+ },
+ "garage_door": {
+ "off": "\u00cenchis",
+ "on": "Deschis"
+ },
+ "gas": {
+ "off": "Liber",
+ "on": "Detec\u021bie"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Fierbinte"
+ },
+ "lock": {
+ "off": "Blocat",
+ "on": "Deblocat"
+ },
+ "moisture": {
+ "off": "Uscat",
+ "on": "Umed"
+ },
+ "motion": {
+ "off": "Liber",
+ "on": "Detec\u021bie"
+ },
+ "occupancy": {
+ "off": "Liber",
+ "on": "Detec\u021bie"
+ },
+ "opening": {
+ "off": "\u00cenchis",
+ "on": "Deschis"
+ },
+ "presence": {
+ "off": "Plecat",
+ "on": "Acas\u0103"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Problem\u0103"
+ },
+ "safety": {
+ "off": "Sigur",
+ "on": "Nesigur"
+ },
+ "smoke": {
+ "off": "Liber",
+ "on": "Detec\u021bie"
+ },
+ "sound": {
+ "off": "Liber",
+ "on": "Detec\u021bie"
+ },
+ "vibration": {
+ "off": "Liber",
+ "on": "Detec\u021bie"
+ },
+ "window": {
+ "off": "\u00cenchis",
+ "on": "Deschis"
+ }
+ },
+ "calendar": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "camera": {
+ "idle": "Inactiv",
+ "recording": "\u00cenregistrare",
+ "streaming": "Streaming"
+ },
+ "climate": {
+ "auto": "Auto",
+ "cool": "Rece",
+ "dry": "Uscat",
+ "fan_only": "Numai ventilator",
+ "heat": "C\u0103ldur\u0103",
+ "heat_cool": "\u00cenc\u0103lzire / R\u0103cire",
+ "off": "Oprit"
+ },
+ "configurator": {
+ "configure": "Configureaz\u0103",
+ "configured": "Configurat"
+ },
+ "cover": {
+ "closed": "\u00cenchis",
+ "closing": "\u00cenchidere",
+ "open": "Deschis",
+ "opening": "Deschidere",
+ "stopped": "Oprit"
+ },
+ "default": {
+ "off": "Oprit",
+ "on": "Pornit",
+ "unavailable": "Indisponibil",
+ "unknown": "Necunoscut"
+ },
+ "device_tracker": {
+ "home": "Acas\u0103",
+ "not_home": "Plecat"
+ },
+ "fan": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "group": {
+ "closed": "\u00cenchis",
+ "closing": "\u00cenchidere",
+ "home": "Acas\u0103",
+ "locked": "Blocat",
+ "not_home": "Plecat",
+ "off": "Oprit",
+ "ok": "OK",
+ "on": "Pornit",
+ "open": "Deschis",
+ "opening": "Deschidere",
+ "problem": "Problem\u0103",
+ "stopped": "Oprit",
+ "unlocked": "Deblocat"
+ },
+ "input_boolean": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "light": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "lock": {
+ "locked": "Blocat",
+ "unlocked": "Deblocat"
+ },
+ "media_player": {
+ "idle": "Inactiv",
+ "off": "Oprit",
+ "on": "Pornit",
+ "paused": "\u00cen pauz\u0103",
+ "playing": "Ruleaz\u0103",
+ "standby": "\u00cen a\u0219teptare"
+ },
+ "person": {
+ "home": "Acas\u0103",
+ "not_home": "Plecat"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Problem\u0103"
+ },
+ "remote": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "scene": {
+ "scening": "Scen\u0103"
+ },
+ "script": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "sensor": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "sun": {
+ "above_horizon": "Deasupra orizontului",
+ "below_horizon": "Sub orizont"
+ },
+ "switch": {
+ "off": "Oprit",
+ "on": "Pornit"
+ },
+ "timer": {
+ "active": "activ",
+ "idle": "inactiv",
+ "paused": "\u00cen pauz\u0103"
+ },
+ "vacuum": {
+ "cleaning": "Cur\u0103\u021bare",
+ "docked": "Andocat",
+ "error": "Eroare",
+ "idle": "Inactiv",
+ "off": "Oprit",
+ "on": "Pornit",
+ "paused": "\u00centrerupt",
+ "returning": "\u00cen curs de \u00eentoarcere la doc"
+ },
+ "weather": {
+ "clear-night": "Noapte senin\u0103",
+ "cloudy": "Noros",
+ "exceptional": "Excep\u0163ional",
+ "fog": "Cea\u0163\u0103",
+ "hail": "Grindin\u0103",
+ "lightning": "Des\u0103rc\u0103ri electrice",
+ "lightning-rainy": "Ploaie cu desc\u0103rc\u0103ri electrice",
+ "partlycloudy": "Par\u021bial noros",
+ "pouring": "Avers\u0103",
+ "rainy": "Ploios",
+ "snowy": "Z\u0103pad\u0103",
+ "snowy-rainy": "Lapovi\u021b\u0103 \u0219i ninsoare",
+ "sunny": "\u00eensorit",
+ "windy": "Vant",
+ "windy-variant": "Vant"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Inactiv",
+ "initializing": "Se ini\u021bializeaz\u0103",
+ "ready": "Disponibil",
+ "sleeping": "Adormit"
+ },
+ "query_stage": {
+ "dead": "Inactiv ({query_stage})",
+ "initializing": "Se ini\u021bializeaz\u0103 ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/ru.json b/cast/src/translations/ru.json
new file mode 100644
index 0000000000..70d4d0a611
--- /dev/null
+++ b/cast/src/translations/ru.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u043e\u0439",
+ "armed_away": "\u041e\u0445\u0440\u0430\u043d\u0430 (\u043d\u0435 \u0434\u043e\u043c\u0430)",
+ "armed_custom_bypass": "\u041e\u0445\u0440\u0430\u043d\u0430 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438",
+ "armed_home": "\u041e\u0445\u0440\u0430\u043d\u0430 (\u0434\u043e\u043c\u0430)",
+ "armed_night": "\u041e\u0445\u0440\u0430\u043d\u0430 (\u043d\u043e\u0447\u044c)",
+ "arming": "\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0443",
+ "disarmed": "\u0421\u043d\u044f\u0442\u043e \u0441 \u043e\u0445\u0440\u0430\u043d\u044b",
+ "disarming": "\u0421\u043d\u044f\u0442\u0438\u0435 \u0441 \u043e\u0445\u0440\u0430\u043d\u044b",
+ "pending": "\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043e\u0445\u0440\u0430\u043d\u0443",
+ "triggered": "\u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435"
+ },
+ "automation": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439",
+ "on": "\u041d\u0438\u0437\u043a\u0438\u0439"
+ },
+ "cold": {
+ "off": "\u041d\u043e\u0440\u043c\u0430",
+ "on": "\u041e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435"
+ },
+ "connectivity": {
+ "off": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
+ "on": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e"
+ },
+ "default": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "door": {
+ "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u0430",
+ "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u0430"
+ },
+ "garage_door": {
+ "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u044b",
+ "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u044b"
+ },
+ "gas": {
+ "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d",
+ "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d"
+ },
+ "heat": {
+ "off": "\u041d\u043e\u0440\u043c\u0430",
+ "on": "\u041d\u0430\u0433\u0440\u0435\u0432"
+ },
+ "lock": {
+ "off": "\u0417\u0430\u043a\u0440\u044b\u0442",
+ "on": "\u041e\u0442\u043a\u0440\u044b\u0442"
+ },
+ "moisture": {
+ "off": "\u0421\u0443\u0445\u043e",
+ "on": "\u0412\u043b\u0430\u0436\u043d\u043e"
+ },
+ "motion": {
+ "off": "\u041d\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f ",
+ "on": "\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435"
+ },
+ "occupancy": {
+ "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e",
+ "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e"
+ },
+ "opening": {
+ "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e",
+ "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e"
+ },
+ "presence": {
+ "off": "\u041d\u0435 \u0434\u043e\u043c\u0430",
+ "on": "\u0414\u043e\u043c\u0430"
+ },
+ "problem": {
+ "off": "\u041e\u041a",
+ "on": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430"
+ },
+ "safety": {
+ "off": "\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e",
+ "on": "\u041d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e"
+ },
+ "smoke": {
+ "off": "\u041d\u0435\u0442 \u0434\u044b\u043c\u0430",
+ "on": "\u0414\u044b\u043c"
+ },
+ "sound": {
+ "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d",
+ "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d"
+ },
+ "vibration": {
+ "off": "\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430",
+ "on": "\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430"
+ },
+ "window": {
+ "off": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e",
+ "on": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e"
+ }
+ },
+ "calendar": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "camera": {
+ "idle": "\u0411\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
+ "recording": "\u0417\u0430\u043f\u0438\u0441\u044c",
+ "streaming": "\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f"
+ },
+ "climate": {
+ "auto": "\u0410\u0432\u0442\u043e",
+ "cool": "\u041e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435",
+ "dry": "\u041e\u0441\u0443\u0448\u0435\u043d\u0438\u0435",
+ "fan_only": "\u0412\u0435\u043d\u0442\u0438\u043b\u044f\u0446\u0438\u044f",
+ "heat": "\u041e\u0431\u043e\u0433\u0440\u0435\u0432",
+ "heat_cool": "\u041e\u0431\u043e\u0433\u0440\u0435\u0432 / \u041e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435",
+ "off": "\u0412\u044b\u043a\u043b"
+ },
+ "configurator": {
+ "configure": "\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c",
+ "configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e"
+ },
+ "cover": {
+ "closed": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e",
+ "closing": "\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f",
+ "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e",
+ "opening": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f",
+ "stopped": "\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e"
+ },
+ "default": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b",
+ "unavailable": "\u041d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e",
+ "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e"
+ },
+ "device_tracker": {
+ "home": "\u0414\u043e\u043c\u0430",
+ "not_home": "\u041d\u0435 \u0434\u043e\u043c\u0430"
+ },
+ "fan": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "group": {
+ "closed": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e",
+ "closing": "\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f",
+ "home": "\u0414\u043e\u043c\u0430",
+ "locked": "\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430",
+ "not_home": "\u041d\u0435 \u0434\u043e\u043c\u0430",
+ "off": "\u0412\u044b\u043a\u043b",
+ "ok": "\u041e\u041a",
+ "on": "\u0412\u043a\u043b",
+ "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e",
+ "opening": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f",
+ "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430",
+ "stopped": "\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e",
+ "unlocked": "\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430"
+ },
+ "input_boolean": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "light": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "lock": {
+ "locked": "\u0417\u0430\u043a\u0440\u044b\u0442",
+ "unlocked": "\u041e\u0442\u043a\u0440\u044b\u0442"
+ },
+ "media_player": {
+ "idle": "\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435",
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b",
+ "paused": "\u041f\u0430\u0443\u0437\u0430",
+ "playing": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435",
+ "standby": "\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435"
+ },
+ "person": {
+ "home": "\u0414\u043e\u043c\u0430",
+ "not_home": "\u041d\u0435 \u0434\u043e\u043c\u0430"
+ },
+ "plant": {
+ "ok": "\u041e\u041a",
+ "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430"
+ },
+ "remote": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "scene": {
+ "scening": "\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0441\u0446\u0435\u043d\u0435"
+ },
+ "script": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "sensor": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "sun": {
+ "above_horizon": "\u041d\u0430\u0434 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c",
+ "below_horizon": "\u0417\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c"
+ },
+ "switch": {
+ "off": "\u0412\u044b\u043a\u043b",
+ "on": "\u0412\u043a\u043b"
+ },
+ "timer": {
+ "active": "\u041e\u0442\u0441\u0447\u0451\u0442",
+ "idle": "\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435",
+ "paused": "\u041f\u0430\u0443\u0437\u0430"
+ },
+ "vacuum": {
+ "cleaning": "\u0423\u0431\u043e\u0440\u043a\u0430",
+ "docked": "\u0423 \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0438",
+ "error": "\u041e\u0448\u0438\u0431\u043a\u0430",
+ "idle": "\u0411\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
+ "off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d",
+ "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d",
+ "paused": "\u041f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d",
+ "returning": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0434\u043e\u043a-\u0441\u0442\u0430\u043d\u0446\u0438\u0438"
+ },
+ "weather": {
+ "clear-night": "\u042f\u0441\u043d\u043e, \u043d\u043e\u0447\u044c",
+ "cloudy": "\u041e\u0431\u043b\u0430\u0447\u043d\u043e",
+ "exceptional": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435",
+ "fog": "\u0422\u0443\u043c\u0430\u043d",
+ "hail": "\u0413\u0440\u0430\u0434",
+ "lightning": "\u041c\u043e\u043b\u043d\u0438\u044f",
+ "lightning-rainy": "\u041c\u043e\u043b\u043d\u0438\u044f, \u0434\u043e\u0436\u0434\u044c",
+ "partlycloudy": "\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0441\u0442\u044c",
+ "pouring": "\u041b\u0438\u0432\u0435\u043d\u044c",
+ "rainy": "\u0414\u043e\u0436\u0434\u044c",
+ "snowy": "\u0421\u043d\u0435\u0433",
+ "snowy-rainy": "\u0421\u043d\u0435\u0433 \u0441 \u0434\u043e\u0436\u0434\u0435\u043c",
+ "sunny": "\u042f\u0441\u043d\u043e",
+ "windy": "\u0412\u0435\u0442\u0440\u0435\u043d\u043e",
+ "windy-variant": "\u0412\u0435\u0442\u0440\u0435\u043d\u043e"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u041d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e",
+ "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f",
+ "ready": "\u0413\u043e\u0442\u043e\u0432",
+ "sleeping": "\u0420\u0435\u0436\u0438\u043c \u0441\u043d\u0430"
+ },
+ "query_stage": {
+ "dead": "\u041d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e ({query_stage})",
+ "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/sk.json b/cast/src/translations/sk.json
new file mode 100644
index 0000000000..6bd1a5b15d
--- /dev/null
+++ b/cast/src/translations/sk.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Akt\u00edvny",
+ "armed_away": "Akt\u00edvny v nepr\u00edtomnosti",
+ "armed_custom_bypass": "Zak\u00f3dovan\u00e9 prisp\u00f4soben\u00e9 vyl\u00fa\u010denie",
+ "armed_home": "Akt\u00edvny doma",
+ "armed_night": "Akt\u00edvny v noci",
+ "arming": "Aktivuje sa",
+ "disarmed": "Neakt\u00edvny",
+ "disarming": "Deaktivuje sa",
+ "pending": "\u010cak\u00e1 sa",
+ "triggered": "Spusten\u00fd"
+ },
+ "automation": {
+ "off": "Neakt\u00edvny",
+ "on": "Akt\u00edvna"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Norm\u00e1lna",
+ "on": "Slab\u00e1"
+ },
+ "cold": {
+ "off": "Norm\u00e1lny",
+ "on": "Studen\u00fd"
+ },
+ "connectivity": {
+ "off": "Odpojen\u00fd",
+ "on": "Pripojen\u00fd"
+ },
+ "default": {
+ "off": "Neakt\u00edvny",
+ "on": "Akt\u00edvny"
+ },
+ "door": {
+ "off": "Zatvoren\u00e9",
+ "on": "Otvoren\u00e9"
+ },
+ "garage_door": {
+ "off": "Zatvoren\u00e9",
+ "on": "Otvoren\u00e9"
+ },
+ "gas": {
+ "off": "\u017diadny plyn",
+ "on": "Zachyten\u00fd plyn"
+ },
+ "heat": {
+ "off": "Norm\u00e1lny",
+ "on": "Hor\u00faci"
+ },
+ "lock": {
+ "off": "Zamknut\u00fd",
+ "on": "Odomknut\u00fd"
+ },
+ "moisture": {
+ "off": "Sucho",
+ "on": "Vlhko"
+ },
+ "motion": {
+ "off": "K\u013eud",
+ "on": "Pohyb"
+ },
+ "occupancy": {
+ "off": "Vo\u013en\u00e9",
+ "on": "Obsaden\u00e9"
+ },
+ "opening": {
+ "off": "Zatvoren\u00e9",
+ "on": "Otvoren\u00e9"
+ },
+ "presence": {
+ "off": "Pre\u010d",
+ "on": "Doma"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Probl\u00e9m"
+ },
+ "safety": {
+ "off": "Zabezpe\u010den\u00e9",
+ "on": "Nezabezpe\u010den\u00e9"
+ },
+ "smoke": {
+ "off": "\u017diadny dym",
+ "on": "Zachyten\u00fd dym"
+ },
+ "sound": {
+ "off": "Ticho",
+ "on": "Zachyten\u00fd zvuk"
+ },
+ "vibration": {
+ "off": "K\u013eud",
+ "on": "Zachyten\u00e9 vibr\u00e1cie"
+ },
+ "window": {
+ "off": "Zatvoren\u00e9",
+ "on": "Otvoren\u00e9"
+ }
+ },
+ "calendar": {
+ "off": "Neakt\u00edvny",
+ "on": "Akt\u00edvny"
+ },
+ "camera": {
+ "idle": "Ne\u010dinn\u00e1",
+ "recording": "Z\u00e1znam",
+ "streaming": "Streamovanie"
+ },
+ "climate": {
+ "auto": "Automatika",
+ "cool": "Chladenie",
+ "dry": "Su\u0161enie",
+ "fan_only": "Iba ventil\u00e1tor",
+ "heat": "K\u00farenie",
+ "heat_cool": "Vykurovanie / Chladenie",
+ "off": "Vypnut\u00e9"
+ },
+ "configurator": {
+ "configure": "Konfigurova\u0165",
+ "configured": "Nakonfigurovan\u00e9"
+ },
+ "cover": {
+ "closed": "Zatvoren\u00e9",
+ "closing": "Zatv\u00e1ra sa",
+ "open": "Otvoren\u00e9",
+ "opening": "Otv\u00e1ra sa",
+ "stopped": "Zastaven\u00e9"
+ },
+ "default": {
+ "off": "Neakt\u00edvny",
+ "on": "Akt\u00edvny",
+ "unavailable": "Nedostupn\u00fd",
+ "unknown": "Nezn\u00e1my"
+ },
+ "device_tracker": {
+ "home": "Doma",
+ "not_home": "Pre\u010d"
+ },
+ "fan": {
+ "off": "Neakt\u00edvny",
+ "on": "Zapnut\u00fd"
+ },
+ "group": {
+ "closed": "Zatvoren\u00e1",
+ "closing": "Zatv\u00e1ra sa",
+ "home": "Doma",
+ "locked": "Zamknut\u00e1",
+ "not_home": "Pre\u010d",
+ "off": "Vypnut\u00e1",
+ "ok": "OK",
+ "on": "Zapnut\u00e1",
+ "open": "Otvoren\u00e1",
+ "opening": "Otv\u00e1ra sa",
+ "problem": "Probl\u00e9m",
+ "stopped": "Zastaven\u00e9",
+ "unlocked": "Odomknut\u00e1"
+ },
+ "input_boolean": {
+ "off": "Vypnut\u00e9",
+ "on": "Zapnut\u00e9"
+ },
+ "light": {
+ "off": "Vypnut\u00e9",
+ "on": "Zapnut\u00e9"
+ },
+ "lock": {
+ "locked": "Zamknut\u00fd",
+ "unlocked": "Odomknut\u00fd"
+ },
+ "media_player": {
+ "idle": "Ne\u010dinn\u00fd",
+ "off": "Vypnut\u00fd",
+ "on": "Zapnut\u00fd",
+ "paused": "Pozastaven\u00fd",
+ "playing": "Prehr\u00e1vanie",
+ "standby": "Pohotovostn\u00fd re\u017eim"
+ },
+ "person": {
+ "home": "Doma",
+ "not_home": "Pre\u010d"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Probl\u00e9m"
+ },
+ "remote": {
+ "off": "Vypnut\u00fd",
+ "on": "Zapnut\u00fd"
+ },
+ "scene": {
+ "scening": "Sc\u00e9novanie"
+ },
+ "script": {
+ "off": "Vypnut\u00fd",
+ "on": "Zapnut\u00fd"
+ },
+ "sensor": {
+ "off": "Neakt\u00edvny",
+ "on": "Akt\u00edvny"
+ },
+ "sun": {
+ "above_horizon": "Nad horizontom",
+ "below_horizon": "Za horizontom"
+ },
+ "switch": {
+ "off": "Vypnut\u00fd",
+ "on": "Zapnut\u00fd"
+ },
+ "timer": {
+ "active": "akt\u00edvny",
+ "idle": "ne\u010dinn\u00fd",
+ "paused": "pozastaven\u00fd"
+ },
+ "vacuum": {
+ "cleaning": "\u010cist\u00ed",
+ "docked": "V doku",
+ "error": "Chyba",
+ "idle": "Ne\u010dinn\u00fd",
+ "off": "Vypnut\u00fd",
+ "on": "Zapnut\u00fd",
+ "paused": "Pozastaven\u00fd",
+ "returning": "Vracia sa do doku"
+ },
+ "weather": {
+ "clear-night": "Jasno, v noci",
+ "cloudy": "Zamra\u010den\u00e9",
+ "exceptional": "V\u00fdnimo\u010dn\u00e9",
+ "fog": "Hmla",
+ "hail": "Krupobitie",
+ "lightning": "Blesky",
+ "lightning-rainy": "Blesky, da\u017edivo",
+ "partlycloudy": "\u010ciasto\u010dne zamra\u010den\u00e9",
+ "pouring": "Lej\u00faco",
+ "rainy": "Da\u017edivo",
+ "snowy": "Zasne\u017eeno",
+ "snowy-rainy": "Zasne\u017eeno, da\u017edivo",
+ "sunny": "slne\u010dno",
+ "windy": "Veterno",
+ "windy-variant": "Veterno"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Nereaguje",
+ "initializing": "Inicializ\u00e1cia",
+ "ready": "Pripraven\u00e9",
+ "sleeping": "\u00dasporn\u00fd re\u017eim"
+ },
+ "query_stage": {
+ "dead": "Nereaguje ({query_stage})",
+ "initializing": "Inicializ\u00e1cia ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/sl.json b/cast/src/translations/sl.json
new file mode 100644
index 0000000000..7fcf0b1f5a
--- /dev/null
+++ b/cast/src/translations/sl.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Omogo\u010den",
+ "armed_away": "Omogo\u010den-zunaj",
+ "armed_custom_bypass": "Vklopljen izjeme po meri",
+ "armed_home": "Omogo\u010den-doma",
+ "armed_night": "Omogo\u010den-no\u010d",
+ "arming": "Omogo\u010danje",
+ "disarmed": "Onemogo\u010den",
+ "disarming": "Onemogo\u010danje",
+ "pending": "V teku",
+ "triggered": "Spro\u017een"
+ },
+ "automation": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normalno",
+ "on": "Nizko"
+ },
+ "cold": {
+ "off": "Normalno",
+ "on": "Hladno"
+ },
+ "connectivity": {
+ "off": "Povezava prekinjena",
+ "on": "Povezan"
+ },
+ "default": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "door": {
+ "off": "Zaprto",
+ "on": "Odprto"
+ },
+ "garage_door": {
+ "off": "Zaprto",
+ "on": "Odprto"
+ },
+ "gas": {
+ "off": "\u010cisto",
+ "on": "Zaznano"
+ },
+ "heat": {
+ "off": "Normalno",
+ "on": "Vro\u010de"
+ },
+ "lock": {
+ "off": "Zaklenjeno",
+ "on": "Odklenjeno"
+ },
+ "moisture": {
+ "off": "Suho",
+ "on": "Mokro"
+ },
+ "motion": {
+ "off": "\u010cisto",
+ "on": "Zaznano"
+ },
+ "occupancy": {
+ "off": "\u010cisto",
+ "on": "Zaznano"
+ },
+ "opening": {
+ "off": "Zaprto",
+ "on": "Odprto"
+ },
+ "presence": {
+ "off": "Odsoten",
+ "on": "Doma"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "Te\u017eava"
+ },
+ "safety": {
+ "off": "Varno",
+ "on": "Nevarno"
+ },
+ "smoke": {
+ "off": "\u010cisto",
+ "on": "Zaznano"
+ },
+ "sound": {
+ "off": "\u010cisto",
+ "on": "Zaznano"
+ },
+ "vibration": {
+ "off": "\u010cisto",
+ "on": "Zaznano"
+ },
+ "window": {
+ "off": "Zaprto",
+ "on": "Odprto"
+ }
+ },
+ "calendar": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "camera": {
+ "idle": "V pripravljenosti",
+ "recording": "Snemanje",
+ "streaming": "Pretakanje"
+ },
+ "climate": {
+ "auto": "Samodejno",
+ "cool": "Mrzlo",
+ "dry": "Suho",
+ "fan_only": "Samo ventilator",
+ "heat": "Toplo",
+ "heat_cool": "Gretje/Hlajenje",
+ "off": "Izklju\u010den"
+ },
+ "configurator": {
+ "configure": "Konfiguriraj",
+ "configured": "Konfigurirano"
+ },
+ "cover": {
+ "closed": "Zaprto",
+ "closing": "Zapiranje",
+ "open": "Odprto",
+ "opening": "Odpiranje",
+ "stopped": "Ustavljeno"
+ },
+ "default": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen",
+ "unavailable": "Ni na voljo",
+ "unknown": "Neznano"
+ },
+ "device_tracker": {
+ "home": "Doma",
+ "not_home": "Odsoten"
+ },
+ "fan": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "group": {
+ "closed": "Zaprto",
+ "closing": "Zapiranje",
+ "home": "Doma",
+ "locked": "Zaklenjeno",
+ "not_home": "Odsoten",
+ "off": "Izklju\u010den",
+ "ok": "OK",
+ "on": "Vklopljen",
+ "open": "Odprto",
+ "opening": "Odpiranje",
+ "problem": "Te\u017eava",
+ "stopped": "Ustavljeno",
+ "unlocked": "Odklenjeno"
+ },
+ "input_boolean": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "light": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "lock": {
+ "locked": "Zaklenjeno",
+ "unlocked": "Odklenjeno"
+ },
+ "media_player": {
+ "idle": "V pripravljenosti",
+ "off": "Izklju\u010den",
+ "on": "Vklopljen",
+ "paused": "Na pavzi",
+ "playing": "Predvaja",
+ "standby": "V pripravljenosti"
+ },
+ "person": {
+ "home": "Doma",
+ "not_home": "Odsoten"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "Te\u017eava"
+ },
+ "remote": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "scene": {
+ "scening": "Nastavitev scene"
+ },
+ "script": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "sensor": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "sun": {
+ "above_horizon": "Nad obzorjem",
+ "below_horizon": "Pod obzorjem"
+ },
+ "switch": {
+ "off": "Izklju\u010den",
+ "on": "Vklopljen"
+ },
+ "timer": {
+ "active": "aktiven",
+ "idle": "V pripravljenosti",
+ "paused": "Na pavzi"
+ },
+ "vacuum": {
+ "cleaning": "\u010cistim",
+ "docked": "Priklju\u010den",
+ "error": "Napaka",
+ "idle": "V pripravljenosti",
+ "off": "Izklju\u010den",
+ "on": "Vklju\u010den",
+ "paused": "Zaustavljeno",
+ "returning": "Vra\u010dam se na postajo"
+ },
+ "weather": {
+ "clear-night": "Jasna, no\u010d",
+ "cloudy": "Obla\u010dno",
+ "exceptional": "Izjemno",
+ "fog": "Megla",
+ "hail": "To\u010da",
+ "lightning": "Grmenje",
+ "lightning-rainy": "Grmenje, de\u017eevno",
+ "partlycloudy": "Delno obla\u010dno",
+ "pouring": "Mo\u010dan de\u017e",
+ "rainy": "De\u017eevno",
+ "snowy": "Sne\u017eno",
+ "snowy-rainy": "Sne\u017eno, de\u017eevno",
+ "sunny": "Son\u010dno",
+ "windy": "Vetrovno",
+ "windy-variant": "Vetrovno"
+ },
+ "zwave": {
+ "default": {
+ "dead": "Mrtev",
+ "initializing": "Inicializacija",
+ "ready": "Pripravljen",
+ "sleeping": "Spanje"
+ },
+ "query_stage": {
+ "dead": "Mrtev ({query_stage})",
+ "initializing": "Inicializacija ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/sr-Latn.json b/cast/src/translations/sr-Latn.json
new file mode 100644
index 0000000000..68692676b8
--- /dev/null
+++ b/cast/src/translations/sr-Latn.json
@@ -0,0 +1,26 @@
+{
+ "state": {
+ "weather": {
+ "clear-night": "Vedra no\u0107",
+ "cloudy": "Obla\u010dno",
+ "fog": "Magla",
+ "hail": "Grad",
+ "lightning": "Grmljavina",
+ "lightning-rainy": "Grmljavina sa ki\u0161om",
+ "partlycloudy": "Delimi\u010dno obla\u010dno",
+ "pouring": "Pljusak",
+ "rainy": "Ki\u0161a",
+ "snowy": "Sneg",
+ "snowy-rainy": "Sneg i ki\u0161a",
+ "sunny": "Sun\u010dano",
+ "windy": "Vetrovito",
+ "windy-variant": "Vetrovito"
+ },
+ "zwave": {
+ "query_stage": {
+ "dead": " ({query_stage})",
+ "initializing": " ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/sr.json b/cast/src/translations/sr.json
new file mode 100644
index 0000000000..5ca0042383
--- /dev/null
+++ b/cast/src/translations/sr.json
@@ -0,0 +1,25 @@
+{
+ "state": {
+ "sun": {
+ "above_horizon": "Iznad horizonta",
+ "below_horizon": "Ispod horizonta"
+ },
+ "switch": {
+ "off": "Isklju\u010den",
+ "on": "Uklju\u010den"
+ },
+ "timer": {
+ "active": "\u0443\u043a\u0459\u0443\u0447\u0435\u043d",
+ "idle": "\u043d\u0435\u0430\u043a\u0442\u043d\u0430 \u0447\u0435\u043a\u0430\u045a\u0443"
+ },
+ "zwave": {
+ "default": {
+ "ready": "Spreman"
+ },
+ "query_stage": {
+ "dead": " ({query_stage})",
+ "initializing": " ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/sv.json b/cast/src/translations/sv.json
new file mode 100644
index 0000000000..fa3a8c0abb
--- /dev/null
+++ b/cast/src/translations/sv.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Larmat",
+ "armed_away": "Larmat",
+ "armed_custom_bypass": "Larm f\u00f6rbikopplat",
+ "armed_home": "Hemmalarmat",
+ "armed_night": "Nattlarmat",
+ "arming": "Tillkopplar",
+ "disarmed": "Avlarmat",
+ "disarming": "Fr\u00e5nkopplar",
+ "pending": "V\u00e4ntande",
+ "triggered": "Utl\u00f6st"
+ },
+ "automation": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normal",
+ "on": "L\u00e5g"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "Kallt"
+ },
+ "connectivity": {
+ "off": "Fr\u00e5nkopplad",
+ "on": "Ansluten"
+ },
+ "default": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "door": {
+ "off": "St\u00e4ngd",
+ "on": "\u00d6ppen"
+ },
+ "garage_door": {
+ "off": "St\u00e4ngd",
+ "on": "\u00d6ppen"
+ },
+ "gas": {
+ "off": "Klart",
+ "on": "Detekterad"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "Varmt"
+ },
+ "lock": {
+ "off": "L\u00e5st",
+ "on": "Ol\u00e5st"
+ },
+ "moisture": {
+ "off": "Torr",
+ "on": "Bl\u00f6t"
+ },
+ "motion": {
+ "off": "Klart",
+ "on": "Detekterad"
+ },
+ "occupancy": {
+ "off": "Tomt",
+ "on": "Detekterad"
+ },
+ "opening": {
+ "off": "St\u00e4ngd",
+ "on": "\u00d6ppen"
+ },
+ "presence": {
+ "off": "Borta",
+ "on": "Hemma"
+ },
+ "problem": {
+ "off": "Ok",
+ "on": "Problem"
+ },
+ "safety": {
+ "off": "S\u00e4ker",
+ "on": "Os\u00e4ker"
+ },
+ "smoke": {
+ "off": "Klart",
+ "on": "Detekterad"
+ },
+ "sound": {
+ "off": "Klart",
+ "on": "Detekterad"
+ },
+ "vibration": {
+ "off": "Klart",
+ "on": "Detekterad"
+ },
+ "window": {
+ "off": "St\u00e4ngt",
+ "on": "\u00d6ppet"
+ }
+ },
+ "calendar": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "camera": {
+ "idle": "Inaktiv",
+ "recording": "Spelar in",
+ "streaming": "Str\u00f6mmar"
+ },
+ "climate": {
+ "auto": "Automatisk",
+ "cool": "Kyla",
+ "dry": "Avfuktning",
+ "fan_only": "Endast fl\u00e4kt",
+ "heat": "V\u00e4rme",
+ "heat_cool": "V\u00e4rme/Kyla",
+ "off": "Av"
+ },
+ "configurator": {
+ "configure": "Konfigurera",
+ "configured": "Konfigurerad"
+ },
+ "cover": {
+ "closed": "St\u00e4ngd",
+ "closing": "St\u00e4nger",
+ "open": "\u00d6ppen",
+ "opening": "\u00d6ppnar",
+ "stopped": "Stoppad"
+ },
+ "default": {
+ "off": "Av",
+ "on": "P\u00e5",
+ "unavailable": "Otillg\u00e4nglig",
+ "unknown": "Ok\u00e4nd"
+ },
+ "device_tracker": {
+ "home": "Hemma",
+ "not_home": "Borta"
+ },
+ "fan": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "group": {
+ "closed": "St\u00e4ngd",
+ "closing": "St\u00e4nger",
+ "home": "Hemma",
+ "locked": "L\u00e5st",
+ "not_home": "Borta",
+ "off": "Av",
+ "ok": "Ok",
+ "on": "P\u00e5",
+ "open": "\u00d6ppen",
+ "opening": "\u00d6ppnar",
+ "problem": "Problem",
+ "stopped": "Stoppad",
+ "unlocked": "Ol\u00e5st"
+ },
+ "input_boolean": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "light": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "lock": {
+ "locked": "L\u00e5st",
+ "unlocked": "Ol\u00e5st"
+ },
+ "media_player": {
+ "idle": "Inaktiv",
+ "off": "Av",
+ "on": "P\u00e5",
+ "paused": "Pausad",
+ "playing": "Spelar",
+ "standby": "Vilol\u00e4ge"
+ },
+ "person": {
+ "home": "Hemma",
+ "not_home": "Borta"
+ },
+ "plant": {
+ "ok": "Ok",
+ "problem": "Problem"
+ },
+ "remote": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "scene": {
+ "scening": "Scenario"
+ },
+ "script": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "sensor": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "sun": {
+ "above_horizon": "Ovanf\u00f6r horisonten",
+ "below_horizon": "Nedanf\u00f6r horisonten"
+ },
+ "switch": {
+ "off": "Av",
+ "on": "P\u00e5"
+ },
+ "timer": {
+ "active": "aktiv",
+ "idle": "inaktiv",
+ "paused": "pausad"
+ },
+ "vacuum": {
+ "cleaning": "St\u00e4dar",
+ "docked": "Dockad",
+ "error": "Fel",
+ "idle": "Inaktiv",
+ "off": "Av",
+ "on": "P\u00e5",
+ "paused": "Pausad",
+ "returning": "\u00c5terg\u00e5r till docka"
+ },
+ "weather": {
+ "clear-night": "Klart, natt",
+ "cloudy": "Molnigt",
+ "exceptional": "Exceptionellt",
+ "fog": "Dimma",
+ "hail": "Hagel",
+ "lightning": "\u00c5ska",
+ "lightning-rainy": "\u00c5ska, regnigt",
+ "partlycloudy": "Delvis molnigt",
+ "pouring": "\u00d6sregn",
+ "rainy": "Regnigt",
+ "snowy": "Sn\u00f6igt",
+ "snowy-rainy": "Sn\u00f6igt, regnigt",
+ "sunny": "Soligt",
+ "windy": "Bl\u00e5sigt",
+ "windy-variant": "Bl\u00e5sigt"
+ },
+ "zwave": {
+ "default": {
+ "dead": "D\u00f6d",
+ "initializing": "Initierar",
+ "ready": "Redo",
+ "sleeping": "Sovande"
+ },
+ "query_stage": {
+ "dead": "D\u00f6d ({query_stage})",
+ "initializing": "Initierar ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/ta.json b/cast/src/translations/ta.json
new file mode 100644
index 0000000000..0e0c361f67
--- /dev/null
+++ b/cast/src/translations/ta.json
@@ -0,0 +1,194 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b85\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1",
+ "armed_away": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7",
+ "armed_custom_bypass": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa \u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf",
+ "armed_home": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0bae\u0bc1\u0b95\u0baa\u0bcd\u0baa\u0bc1",
+ "armed_night": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b87\u0bb0\u0bb5\u0bbf\u0bb2\u0bcd",
+ "arming": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b85\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0ba4\u0bc1",
+ "disarmed": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0b85\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
+ "disarming": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bc8 \u0b92\u0bb2\u0bbf \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bae\u0bcd",
+ "pending": "\u0ba8\u0bbf\u0bb2\u0bc1\u0bb5\u0bc8\u0baf\u0bbf\u0bb2\u0bcd",
+ "triggered": "\u0ba4\u0bc2\u0ba3\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1"
+ },
+ "automation": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd "
+ },
+ "binary_sensor": {
+ "default": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd "
+ },
+ "gas": {
+ "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1",
+ "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "heat": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b9a\u0bc2\u0b9f\u0bbe\u0ba9"
+ },
+ "moisture": {
+ "off": "\u0b89\u0bb2\u0bb0\u0bcd",
+ "on": "\u0b88\u0bb0\u0bae\u0bcd"
+ },
+ "motion": {
+ "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ",
+ "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "occupancy": {
+ "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ",
+ "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "opening": {
+ "off": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
+ "on": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1"
+ },
+ "presence": {
+ "off": "\u0ba4\u0bca\u0bb2\u0bc8\u0bb5\u0bbf\u0bb2\u0bcd",
+ "on": "\u0bae\u0bc1\u0b95\u0baa\u0bcd\u0baa\u0bc1"
+ },
+ "problem": {
+ "off": "\u0b9a\u0bb0\u0bbf",
+ "on": "\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb2\u0bcd"
+ },
+ "safety": {
+ "off": "\u0baa\u0bbe\u0ba4\u0bc1\u0b95\u0bbe\u0baa\u0bcd\u0baa\u0bbe\u0ba9",
+ "on": "\u0baa\u0bbe\u0ba4\u0bc1\u0b95\u0bbe\u0baa\u0bcd\u0baa\u0bb1\u0bcd\u0bb1"
+ },
+ "smoke": {
+ "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ",
+ "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "sound": {
+ "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ",
+ "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "vibration": {
+ "off": "\u0ba4\u0bc6\u0bb3\u0bbf\u0bb5\u0bc1 ",
+ "on": "\u0b95\u0ba3\u0bcd\u0b9f\u0bb1\u0bbf\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "window": {
+ "off": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1",
+ "on": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1"
+ }
+ },
+ "calendar": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd "
+ },
+ "camera": {
+ "idle": "\u0baa\u0ba3\u0bbf\u0baf\u0bbf\u0ba9\u0bcd\u0bb1\u0bbf",
+ "recording": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc1",
+ "streaming": "\u0bb8\u0bcd\u0b9f\u0bcd\u0bb0\u0bc0\u0bae\u0bbf\u0b99\u0bcd"
+ },
+ "climate": {
+ "auto": "\u0ba4\u0bbe\u0ba9\u0bbe\u0b95 \u0b87\u0baf\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bb2\u0bcd",
+ "cool": "\u0b95\u0bc1\u0bb3\u0bbf\u0bb0\u0bcd",
+ "dry": "\u0b89\u0bb2\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4",
+ "fan_only": "\u0bb5\u0bbf\u0b9a\u0bbf\u0bb1\u0bbf \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bcd",
+ "heat": "\u0bb5\u0bc6\u0baa\u0bcd\u0baa\u0bae\u0bcd",
+ "off": "\u0b86\u0b83\u0baa\u0bcd"
+ },
+ "configurator": {
+ "configure": "\u0b89\u0bb3\u0bcd\u0bb3\u0bae\u0bc8",
+ "configured": "\u0b89\u0bb3\u0bcd\u0bb3\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "cover": {
+ "closed": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
+ "closing": "\u0bae\u0bc2\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1",
+ "open": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1",
+ "opening": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0ba4\u0bc1",
+ "stopped": "\u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "default": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd",
+ "unavailable": "\u0b95\u0bbf\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8",
+ "unknown": "\u0ba4\u0bc6\u0bb0\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8"
+ },
+ "device_tracker": {
+ "home": "\u0bae\u0bc1\u0b95\u0baa\u0bcd\u0baa\u0bc1",
+ "not_home": "\u0ba4\u0bca\u0bb2\u0bc8\u0bb5\u0bbf\u0bb2\u0bcd"
+ },
+ "fan": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0bb5\u0bbf\u0b9a\u0bbf\u0bb1\u0bbf \u0b86\u0ba9\u0bcd"
+ },
+ "group": {
+ "closed": "\u0bae\u0bc2\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 ",
+ "closing": "\u0bae\u0bc2\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1 ",
+ "home": "\u0bb5\u0bc0\u0b9f\u0bcd\u0b9f\u0bbf\u0bb2\u0bcd",
+ "locked": "\u0baa\u0bc2\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 ",
+ "not_home": "\u0ba4\u0bca\u0bb2\u0bc8\u0bb5\u0bbf\u0bb2\u0bcd",
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "ok": "\u0b9a\u0bb0\u0bbf",
+ "on": "\u0b86\u0ba9\u0bcd",
+ "open": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 ",
+ "opening": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0ba4\u0bc1 ",
+ "problem": "\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb2\u0bcd",
+ "stopped": "\u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 ",
+ "unlocked": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1 "
+ },
+ "input_boolean": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd"
+ },
+ "light": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd"
+ },
+ "lock": {
+ "locked": "\u0baa\u0bc2\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
+ "unlocked": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1"
+ },
+ "media_player": {
+ "idle": "\u0baa\u0ba3\u0bbf\u0baf\u0bbf\u0ba9\u0bcd\u0bb1\u0bbf",
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd",
+ "paused": "\u0b87\u0b9f\u0bc8\u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1",
+ "playing": "\u0bb5\u0bbf\u0bb3\u0bc8\u0baf\u0bbe\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd",
+ "standby": "\u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1"
+ },
+ "plant": {
+ "ok": "\u0b9a\u0bb0\u0bbf",
+ "problem": "\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb2\u0bcd"
+ },
+ "remote": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd"
+ },
+ "scene": {
+ "scening": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf"
+ },
+ "script": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd"
+ },
+ "sensor": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd"
+ },
+ "sun": {
+ "above_horizon": "\u0ba4\u0bca\u0b9f\u0bc1\u0bb5\u0bbe\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb2\u0bc7",
+ "below_horizon": "\u0ba4\u0bca\u0b9f\u0bc1\u0bb5\u0bbe\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1\u0b95\u0bcd \u0b95\u0bc0\u0bb4\u0bc7"
+ },
+ "switch": {
+ "off": "\u0b86\u0b83\u0baa\u0bcd",
+ "on": "\u0b86\u0ba9\u0bcd"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u0b87\u0bb1\u0ba8\u0bcd\u0ba4\u0bc1\u0bb5\u0bbf\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1",
+ "initializing": "\u0ba4\u0bc1\u0bb5\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1",
+ "ready": "\u0ba4\u0baf\u0bbe\u0bb0\u0bcd",
+ "sleeping": "\u0ba4\u0bc2\u0b99\u0bcd\u0b95\u0bc1\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba4\u0bc1"
+ },
+ "query_stage": {
+ "dead": "\u0b87\u0bb1\u0ba8\u0bcd\u0ba4\u0bc1\u0bb5\u0bbf\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1 ({query_stage})",
+ "initializing": "\u0ba4\u0bc1\u0bb5\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1 ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/te.json b/cast/src/translations/te.json
new file mode 100644
index 0000000000..10ffa559b5
--- /dev/null
+++ b/cast/src/translations/te.json
@@ -0,0 +1,235 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c35\u0c41\u0c02\u0c26\u0c3f",
+ "armed_away": "\u0c07\u0c02\u0c1f \u0c2c\u0c2f\u0c1f \u0c2d\u0c26\u0c4d\u0c30\u0c24",
+ "armed_custom_bypass": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c15\u0c38\u0c4d\u0c1f\u0c2e\u0c4d \u0c2c\u0c48\u0c2a\u0c3e\u0c38\u0c4d",
+ "armed_home": "\u0c38\u0c46\u0c15\u0c4d\u0c2f\u0c42\u0c30\u0c3f\u0c1f\u0c40 \u0c38\u0c3f\u0c38\u0c4d\u0c1f\u0c2e\u0c4d \u0c06\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f",
+ "armed_night": "\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f \u0c2a\u0c42\u0c1f \u0c2d\u0c26\u0c4d\u0c30\u0c24",
+ "arming": "\u0c2d\u0c26\u0c4d\u0c30\u0c3f\u0c02\u0c1a\u0c41\u0c1f",
+ "disarmed": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c32\u0c47\u0c26\u0c41",
+ "disarming": "\u0c2d\u0c26\u0c4d\u0c30\u0c24 \u0c24\u0c40\u0c38\u0c3f\u0c35\u0c47\u0c2f\u0c41\u0c1f",
+ "pending": "\u0c2a\u0c46\u0c02\u0c21\u0c3f\u0c02\u0c17\u0c4d",
+ "triggered": "\u0c0a\u0c2a\u0c02\u0c26\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f"
+ },
+ "automation": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\u0c38\u0c3e\u0c27\u0c3e\u0c30\u0c23",
+ "on": "\u0c24\u0c15\u0c4d\u0c15\u0c41\u0c35"
+ },
+ "cold": {
+ "on": "\u0c1a\u0c32\u0c4d\u0c32\u0c28\u0c3f"
+ },
+ "connectivity": {
+ "off": "\u0c21\u0c3f\u0c38\u0c4d\u0c15\u0c28\u0c46\u0c15\u0c4d\u0c1f\u0c4d",
+ "on": "\u0c15\u0c28\u0c46\u0c15\u0c4d\u0c1f\u0c4d"
+ },
+ "default": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "door": {
+ "off": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f",
+ "on": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f"
+ },
+ "garage_door": {
+ "off": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f",
+ "on": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f"
+ },
+ "gas": {
+ "off": "\u0c17\u0c4d\u0c2f\u0c3e\u0c38\u0c4d \u0c06\u0c2b\u0c4d",
+ "on": "\u0c17\u0c4d\u0c2f\u0c3e\u0c38\u0c4d \u0c06\u0c28\u0c4d"
+ },
+ "heat": {
+ "off": "\u0c38\u0c3e\u0c27\u0c3e\u0c30\u0c23",
+ "on": "\u0c35\u0c47\u0c21\u0c3f"
+ },
+ "lock": {
+ "off": "\u0c32\u0c3e\u0c15\u0c4d \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f",
+ "on": "\u0c32\u0c3e\u0c15\u0c4d \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c32\u0c47\u0c26\u0c41"
+ },
+ "moisture": {
+ "off": "\u0c2a\u0c4a\u0c21\u0c3f",
+ "on": "\u0c24\u0c21\u0c3f"
+ },
+ "motion": {
+ "off": "\u0c15\u0c26\u0c32\u0c3f\u0c15 \u0c32\u0c47\u0c26\u0c41",
+ "on": "\u0c15\u0c26\u0c32\u0c3f\u0c15 \u0c35\u0c41\u0c02\u0c26\u0c3f"
+ },
+ "occupancy": {
+ "off": "\u0c09\u0c28\u0c3f\u0c15\u0c3f\u0c21\u0c3f \u0c32\u0c47\u0c26\u0c41",
+ "on": "\u0c09\u0c28\u0c3f\u0c15\u0c3f\u0c21\u0c3f \u0c09\u0c02\u0c26\u0c3f"
+ },
+ "opening": {
+ "off": "\u0c2e\u0c42\u0c38\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f",
+ "on": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f"
+ },
+ "presence": {
+ "off": "\u0c2c\u0c2f\u0c1f",
+ "on": "\u0c07\u0c02\u0c1f"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "\u0c38\u0c2e\u0c38\u0c4d\u0c2f"
+ },
+ "safety": {
+ "off": "\u0c15\u0c4d\u0c37\u0c47\u0c2e\u0c02",
+ "on": "\u0c15\u0c4d\u0c37\u0c47\u0c2e\u0c02 \u0c15\u0c3e\u0c26\u0c41"
+ },
+ "smoke": {
+ "off": "\u0c2a\u0c4a\u0c17 \u0c32\u0c47\u0c26\u0c41",
+ "on": "\u0c2a\u0c4a\u0c17 \u0c35\u0c41\u0c02\u0c26\u0c3f"
+ },
+ "sound": {
+ "off": "\u0c36\u0c2c\u0c4d\u0c27\u0c02 \u0c32\u0c47\u0c26\u0c41",
+ "on": "\u0c36\u0c2c\u0c4d\u0c27\u0c02 \u0c35\u0c41\u0c02\u0c26\u0c3f"
+ },
+ "vibration": {
+ "off": "\u0c15\u0c26\u0c32\u0c1f\u0c4d\u0c32\u0c47\u0c26\u0c41",
+ "on": "\u0c15\u0c26\u0c41\u0c32\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f"
+ },
+ "window": {
+ "off": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f",
+ "on": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f"
+ }
+ },
+ "calendar": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "camera": {
+ "idle": "\u0c10\u0c21\u0c3f\u0c32\u0c4d",
+ "recording": "\u0c30\u0c3f\u0c15\u0c3e\u0c30\u0c4d\u0c21\u0c3f\u0c02\u0c17\u0c4d",
+ "streaming": "\u0c2a\u0c4d\u0c30\u0c38\u0c3e\u0c30\u0c02"
+ },
+ "climate": {
+ "auto": "\u0c26\u0c3e\u0c28\u0c02\u0c24\u0c1f \u0c05\u0c26\u0c47",
+ "cool": "\u0c1a\u0c32\u0c4d\u0c32\u0c17\u0c3e",
+ "dry": "\u0c2a\u0c4a\u0c21\u0c3f",
+ "fan_only": "\u0c2b\u0c4d\u0c2f\u0c3e\u0c28\u0c4d \u0c2e\u0c3e\u0c24\u0c4d\u0c30\u0c2e\u0c47",
+ "heat": "\u0c35\u0c46\u0c1a\u0c4d\u0c1a\u0c17\u0c3e",
+ "off": "\u0c06\u0c2b\u0c4d"
+ },
+ "configurator": {
+ "configure": "\u0c15\u0c3e\u0c28\u0c4d\u0c2b\u0c3f\u0c17\u0c30\u0c4d",
+ "configured": "\u0c15\u0c3e\u0c28\u0c4d\u0c2b\u0c3f\u0c17\u0c30\u0c4d"
+ },
+ "cover": {
+ "closed": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f",
+ "closing": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f",
+ "open": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f",
+ "opening": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f",
+ "stopped": "\u0c06\u0c17\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f"
+ },
+ "default": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d",
+ "unavailable": "\u0c05\u0c02\u0c26\u0c41\u0c2c\u0c3e\u0c1f\u0c41\u0c32\u0c4b \u0c32\u0c47\u0c26\u0c41",
+ "unknown": "\u0c24\u0c46\u0c32\u0c3f\u0c2f\u0c26\u0c41"
+ },
+ "device_tracker": {
+ "home": "\u0c07\u0c02\u0c1f",
+ "not_home": "\u0c2c\u0c2f\u0c1f"
+ },
+ "fan": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "group": {
+ "closed": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c26\u0c3f",
+ "closing": "\u0c2e\u0c42\u0c38\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f",
+ "home": "\u0c07\u0c02\u0c1f",
+ "locked": "\u0c2e\u0c42\u0c38\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41",
+ "not_home": "\u0c2c\u0c2f\u0c1f",
+ "off": "\u0c06\u0c2b\u0c4d",
+ "ok": "\u0c05\u0c32\u0c3e\u0c17\u0c47",
+ "on": "\u0c06\u0c28\u0c4d",
+ "open": "\u0c24\u0c46\u0c30\u0c3f\u0c1a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f",
+ "opening": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c4b\u0c02\u0c26\u0c3f",
+ "problem": "\u0c38\u0c2e\u0c38\u0c4d\u0c2f",
+ "stopped": "\u0c06\u0c2a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f",
+ "unlocked": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41"
+ },
+ "input_boolean": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "light": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "lock": {
+ "locked": "\u0c2e\u0c42\u0c38\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41",
+ "unlocked": "\u0c24\u0c46\u0c30\u0c41\u0c1a\u0c3f \u0c35\u0c41\u0c02\u0c21\u0c41"
+ },
+ "media_player": {
+ "idle": "\u0c10\u0c21\u0c3f\u0c32\u0c4d",
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d",
+ "paused": "\u0c06\u0c2a\u0c3f\u0c35\u0c41\u0c02\u0c26\u0c3f",
+ "playing": "\u0c06\u0c21\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f",
+ "standby": "\u0c28\u0c3f\u0c32\u0c15\u0c21"
+ },
+ "plant": {
+ "ok": "\u0c05\u0c32\u0c3e\u0c17\u0c47",
+ "problem": "\u0c38\u0c2e\u0c38\u0c4d\u0c2f"
+ },
+ "remote": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "scene": {
+ "scening": "\u0c38\u0c40\u0c28\u0c3f\u0c02\u0c17\u0c4d"
+ },
+ "script": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "sensor": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "sun": {
+ "above_horizon": "\u0c39\u0c4b\u0c30\u0c3f\u0c1c\u0c4b\u0c28\u0c4d \u0c2a\u0c48\u0c28",
+ "below_horizon": "\u0c39\u0c4b\u0c30\u0c3f\u0c1c\u0c4b\u0c28\u0c4d \u0c15\u0c4d\u0c30\u0c3f\u0c02\u0c26"
+ },
+ "switch": {
+ "off": "\u0c06\u0c2b\u0c4d",
+ "on": "\u0c06\u0c28\u0c4d"
+ },
+ "vacuum": {
+ "cleaning": "\u0c36\u0c41\u0c2d\u0c4d\u0c30\u0c2a\u0c30\u0c41\u0c1a\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f"
+ },
+ "weather": {
+ "cloudy": "\u0c2e\u0c47\u0c18\u0c3e\u0c35\u0c43\u0c24\u0c02",
+ "fog": "\u0c2a\u0c4a\u0c17\u0c2e\u0c02\u0c1a\u0c41",
+ "hail": "\u0c35\u0c21\u0c17\u0c33\u0c4d\u0c33\u0c41",
+ "lightning": "\u0c2e\u0c46\u0c30\u0c41\u0c2a\u0c41\u0c32\u0c41",
+ "lightning-rainy": "\u0c2e\u0c46\u0c30\u0c41\u0c2a\u0c41, \u0c35\u0c30\u0c4d\u0c37\u0c02",
+ "partlycloudy": "\u0c2a\u0c3e\u0c15\u0c4d\u0c37\u0c3f\u0c15\u0c02\u0c17\u0c3e \u0c2e\u0c47\u0c18\u0c3e\u0c35\u0c43\u0c24\u0c02",
+ "pouring": "\u0c15\u0c41\u0c02\u0c2d\u0c35\u0c43\u0c37\u0c4d\u0c1f\u0c3f",
+ "rainy": "\u0c35\u0c30\u0c4d\u0c37\u0c02",
+ "snowy": "\u0c2e\u0c02\u0c1a\u0c41",
+ "snowy-rainy": "\u0c2e\u0c02\u0c1a\u0c41, \u0c35\u0c30\u0c4d\u0c37\u0c02",
+ "sunny": "\u0c0e\u0c02\u0c21",
+ "windy": "\u0c17\u0c3e\u0c32\u0c41\u0c32\u0c24\u0c4b",
+ "windy-variant": "\u0c17\u0c3e\u0c32\u0c41\u0c32\u0c24\u0c4b"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u0c2e\u0c43\u0c24 \u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c02",
+ "initializing": "\u0c38\u0c3f\u0c26\u0c4d\u0c27\u0c02 \u0c05\u0c35\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f",
+ "ready": "\u0c30\u0c46\u0c21\u0c40",
+ "sleeping": "\u0c28\u0c3f\u0c26\u0c4d\u0c30\u0c3f\u0c38\u0c4d\u0c24\u0c4b\u0c02\u0c26\u0c3f"
+ },
+ "query_stage": {
+ "dead": "\u0c2e\u0c43\u0c24 \u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c02 ({query_stage})",
+ "initializing": "\u0c38\u0c3f\u0c26\u0c4d\u0c27\u0c02 \u0c05\u0c35\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/th.json b/cast/src/translations/th.json
new file mode 100644
index 0000000000..a859e493aa
--- /dev/null
+++ b/cast/src/translations/th.json
@@ -0,0 +1,254 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19",
+ "armed_away": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19-\u0e42\u0e2b\u0e21\u0e14\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19",
+ "armed_custom_bypass": "\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e42\u0e14\u0e22\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07",
+ "armed_home": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19-\u0e42\u0e2b\u0e21\u0e14\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19",
+ "armed_night": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19-\u0e42\u0e2b\u0e21\u0e14\u0e01\u0e25\u0e32\u0e07\u0e04\u0e37\u0e19",
+ "arming": "\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19",
+ "disarmed": "\u0e1b\u0e25\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19",
+ "disarming": "\u0e1b\u0e25\u0e14\u0e01\u0e32\u0e23\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19",
+ "pending": "\u0e04\u0e49\u0e32\u0e07\u0e2d\u0e22\u0e39\u0e48",
+ "triggered": "\u0e16\u0e39\u0e01\u0e01\u0e23\u0e30\u0e15\u0e38\u0e49\u0e19"
+ },
+ "automation": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\u0e1b\u0e01\u0e15\u0e34",
+ "on": "\u0e15\u0e48\u0e33"
+ },
+ "cold": {
+ "off": "\u0e1b\u0e01\u0e15\u0e34",
+ "on": "\u0e2b\u0e19\u0e32\u0e27"
+ },
+ "connectivity": {
+ "off": "\u0e15\u0e31\u0e14\u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d",
+ "on": "\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e41\u0e25\u0e49\u0e27"
+ },
+ "default": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "door": {
+ "off": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "garage_door": {
+ "off": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "gas": {
+ "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e41\u0e01\u0e4a\u0e2a",
+ "on": "\u0e15\u0e23\u0e27\u0e08\u0e1e\u0e1a\u0e41\u0e01\u0e4a\u0e2a"
+ },
+ "heat": {
+ "off": "\u0e1b\u0e01\u0e15\u0e34",
+ "on": "\u0e23\u0e49\u0e2d\u0e19"
+ },
+ "lock": {
+ "off": "\u0e25\u0e47\u0e2d\u0e04\u0e2d\u0e22\u0e39\u0e48",
+ "on": "\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e04\u0e41\u0e25\u0e49\u0e27"
+ },
+ "moisture": {
+ "off": "\u0e41\u0e2b\u0e49\u0e07",
+ "on": "\u0e40\u0e1b\u0e35\u0e22\u0e01"
+ },
+ "motion": {
+ "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e44\u0e2b\u0e27",
+ "on": "\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e44\u0e2b\u0e27"
+ },
+ "occupancy": {
+ "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a",
+ "on": "\u0e1e\u0e1a"
+ },
+ "opening": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "presence": {
+ "off": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48",
+ "on": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19"
+ },
+ "problem": {
+ "off": "\u0e15\u0e01\u0e25\u0e07",
+ "on": "\u0e1b\u0e31\u0e0d\u0e2b\u0e32"
+ },
+ "safety": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "smoke": {
+ "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e04\u0e27\u0e31\u0e19",
+ "on": "\u0e1e\u0e1a\u0e04\u0e27\u0e31\u0e19"
+ },
+ "sound": {
+ "off": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e22\u0e34\u0e19",
+ "on": "\u0e44\u0e14\u0e49\u0e22\u0e34\u0e19"
+ },
+ "vibration": {
+ "off": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e19",
+ "on": "\u0e1e\u0e1a\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e19"
+ },
+ "window": {
+ "off": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ }
+ },
+ "calendar": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "camera": {
+ "idle": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "recording": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01",
+ "streaming": "\u0e2a\u0e15\u0e23\u0e35\u0e21\u0e21\u0e34\u0e48\u0e07"
+ },
+ "climate": {
+ "auto": "\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34",
+ "cool": "\u0e40\u0e22\u0e47\u0e19",
+ "dry": "\u0e41\u0e2b\u0e49\u0e07",
+ "fan_only": "\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e1e\u0e31\u0e14\u0e25\u0e21",
+ "heat": "\u0e23\u0e49\u0e2d\u0e19",
+ "heat_cool": "\u0e23\u0e49\u0e2d\u0e19/\u0e40\u0e22\u0e47\u0e19",
+ "off": "\u0e1b\u0e34\u0e14"
+ },
+ "configurator": {
+ "configure": "\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32",
+ "configured": "\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e41\u0e25\u0e49\u0e27"
+ },
+ "cover": {
+ "closed": "\u0e1b\u0e34\u0e14",
+ "closing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1b\u0e34\u0e14",
+ "open": "\u0e40\u0e1b\u0e34\u0e14",
+ "opening": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e1b\u0e34\u0e14",
+ "stopped": "\u0e2b\u0e22\u0e38\u0e14"
+ },
+ "default": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14",
+ "unavailable": "\u0e44\u0e21\u0e48\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "unknown": "\u0e44\u0e21\u0e48\u0e17\u0e23\u0e32\u0e1a\u0e2a\u0e16\u0e32\u0e19\u0e30"
+ },
+ "device_tracker": {
+ "home": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19",
+ "not_home": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48"
+ },
+ "fan": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "group": {
+ "closed": "\u0e1b\u0e34\u0e14\u0e41\u0e25\u0e49\u0e27",
+ "closing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1b\u0e34\u0e14",
+ "home": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19",
+ "locked": "\u0e25\u0e47\u0e2d\u0e04\u0e41\u0e25\u0e49\u0e27",
+ "not_home": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19",
+ "off": "\u0e1b\u0e34\u0e14",
+ "ok": "\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "on": "\u0e40\u0e1b\u0e34\u0e14",
+ "open": "\u0e40\u0e1b\u0e34\u0e14",
+ "opening": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e1b\u0e34\u0e14",
+ "problem": "\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32",
+ "stopped": "\u0e2b\u0e22\u0e38\u0e14\u0e41\u0e25\u0e49\u0e27",
+ "unlocked": "\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e04\u0e41\u0e25\u0e49\u0e27"
+ },
+ "input_boolean": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "light": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "lock": {
+ "locked": "\u0e25\u0e47\u0e2d\u0e04",
+ "unlocked": "\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e04"
+ },
+ "media_player": {
+ "idle": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14",
+ "paused": "\u0e2b\u0e22\u0e38\u0e14\u0e0a\u0e31\u0e48\u0e27\u0e04\u0e23\u0e32\u0e27",
+ "playing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e25\u0e48\u0e19",
+ "standby": "\u0e41\u0e2a\u0e15\u0e19\u0e14\u0e4c\u0e1a\u0e32\u0e22"
+ },
+ "person": {
+ "home": "\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19",
+ "not_home": "\u0e44\u0e21\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e49\u0e32\u0e19"
+ },
+ "plant": {
+ "ok": "\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "problem": "\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32"
+ },
+ "remote": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "scene": {
+ "scening": "\u0e0b\u0e35\u0e19"
+ },
+ "script": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "sensor": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "sun": {
+ "above_horizon": "\u0e40\u0e2b\u0e19\u0e37\u0e2d\u0e02\u0e2d\u0e1a\u0e1f\u0e49\u0e32",
+ "below_horizon": "\u0e15\u0e01\u0e14\u0e34\u0e19"
+ },
+ "switch": {
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14"
+ },
+ "timer": {
+ "active": "\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e2d\u0e22\u0e39\u0e48",
+ "idle": "\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "paused": "\u0e2b\u0e22\u0e38\u0e14\u0e0a\u0e31\u0e48\u0e27\u0e04\u0e23\u0e32\u0e27"
+ },
+ "vacuum": {
+ "cleaning": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e17\u0e33\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e30\u0e2d\u0e32\u0e14",
+ "docked": "\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d",
+ "error": "\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14",
+ "idle": "\u0e27\u0e48\u0e32\u0e07",
+ "off": "\u0e1b\u0e34\u0e14",
+ "on": "\u0e40\u0e1b\u0e34\u0e14",
+ "paused": "\u0e2b\u0e22\u0e38\u0e14\u0e0a\u0e31\u0e48\u0e27\u0e04\u0e23\u0e32\u0e27",
+ "returning": "\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e08\u0e38\u0e14\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d"
+ },
+ "weather": {
+ "clear-night": "\u0e1f\u0e49\u0e32\u0e42\u0e1b\u0e23\u0e48\u0e07, \u0e01\u0e25\u0e32\u0e07\u0e04\u0e37\u0e19",
+ "cloudy": "\u0e21\u0e35\u0e40\u0e21\u0e06\u0e21\u0e32\u0e01",
+ "fog": "\u0e2b\u0e21\u0e2d\u0e01",
+ "hail": "\u0e25\u0e39\u0e01\u0e40\u0e2b\u0e47\u0e1a",
+ "lightning": "\u0e1f\u0e49\u0e32\u0e41\u0e25\u0e1a",
+ "lightning-rainy": "\u0e1f\u0e49\u0e32\u0e41\u0e25\u0e1a, \u0e1d\u0e19\u0e15\u0e01",
+ "partlycloudy": "\u0e21\u0e35\u0e40\u0e21\u0e06\u0e1a\u0e32\u0e07\u0e2a\u0e48\u0e27\u0e19",
+ "pouring": "\u0e40\u0e17",
+ "rainy": "\u0e1d\u0e19",
+ "snowy": "\u0e2b\u0e34\u0e21\u0e30",
+ "snowy-rainy": "\u0e2b\u0e34\u0e21\u0e30, \u0e1d\u0e19",
+ "sunny": "\u0e41\u0e14\u0e14\u0e08\u0e31\u0e14",
+ "windy": "\u0e25\u0e21\u0e41\u0e23\u0e07",
+ "windy-variant": "\u0e25\u0e21\u0e41\u0e23\u0e07"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u0e44\u0e21\u0e48\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "initializing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19",
+ "ready": "\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
+ "sleeping": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2b\u0e25\u0e31\u0e1a"
+ },
+ "query_stage": {
+ "dead": "\u0e44\u0e21\u0e48\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 ({query_stage})",
+ "initializing": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19 ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/tr.json b/cast/src/translations/tr.json
new file mode 100644
index 0000000000..688665c5fd
--- /dev/null
+++ b/cast/src/translations/tr.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "Etkin",
+ "armed_away": "Etkin d\u0131\u015far\u0131da",
+ "armed_custom_bypass": "\u00d6zel alarm atlatmas\u0131",
+ "armed_home": "Etkin evde",
+ "armed_night": "Etkin gece",
+ "arming": "Etkinle\u015fiyor",
+ "disarmed": "Etkisiz",
+ "disarming": "Etkisizle\u015ftiriliyor",
+ "pending": "Beklemede",
+ "triggered": "Tetiklendi"
+ },
+ "automation": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "Normal",
+ "on": "D\u00fc\u015f\u00fck"
+ },
+ "cold": {
+ "off": "Normal",
+ "on": "So\u011fuk"
+ },
+ "connectivity": {
+ "off": "Ba\u011flant\u0131 kesildi",
+ "on": "Ba\u011fl\u0131"
+ },
+ "default": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "door": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "garage_door": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "gas": {
+ "off": "Temiz",
+ "on": "Alg\u0131land\u0131"
+ },
+ "heat": {
+ "off": "Normal",
+ "on": "S\u0131cak"
+ },
+ "lock": {
+ "off": "Kilit kapal\u0131",
+ "on": "Kilit a\u00e7\u0131k"
+ },
+ "moisture": {
+ "off": "Kuru",
+ "on": "Islak"
+ },
+ "motion": {
+ "off": "Temiz",
+ "on": "Alg\u0131land\u0131"
+ },
+ "occupancy": {
+ "off": "Temiz",
+ "on": "Alg\u0131land\u0131"
+ },
+ "opening": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "presence": {
+ "off": "D\u0131\u015farda",
+ "on": "Evde"
+ },
+ "problem": {
+ "off": "Tamam",
+ "on": "Sorun"
+ },
+ "safety": {
+ "off": "G\u00fcvenli",
+ "on": "G\u00fcvensiz"
+ },
+ "smoke": {
+ "off": "Temiz",
+ "on": "Alg\u0131land\u0131"
+ },
+ "sound": {
+ "off": "Temiz",
+ "on": "Alg\u0131land\u0131"
+ },
+ "vibration": {
+ "off": "Temiz",
+ "on": "Alg\u0131land\u0131"
+ },
+ "window": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ }
+ },
+ "calendar": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "camera": {
+ "idle": "Bo\u015fta",
+ "recording": "Kaydediliyor",
+ "streaming": "Yay\u0131n ak\u0131\u015f\u0131"
+ },
+ "climate": {
+ "auto": "Otomatik",
+ "cool": "Serin",
+ "dry": "Kuru",
+ "fan_only": "Sadece fan",
+ "heat": "S\u0131cak",
+ "heat_cool": "Is\u0131tma / So\u011futma",
+ "off": "Kapal\u0131"
+ },
+ "configurator": {
+ "configure": "Ayarla",
+ "configured": "Ayarland\u0131"
+ },
+ "cover": {
+ "closed": "Kapal\u0131",
+ "closing": "Kapan\u0131yor",
+ "open": "A\u00e7\u0131k",
+ "opening": "A\u00e7\u0131l\u0131yor",
+ "stopped": "Durduruldu"
+ },
+ "default": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k",
+ "unavailable": "Mevcut de\u011fil",
+ "unknown": "Bilinmeyen"
+ },
+ "device_tracker": {
+ "home": "Evde",
+ "not_home": "D\u0131\u015far\u0131da"
+ },
+ "fan": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "group": {
+ "closed": "Kapand\u0131",
+ "closing": "Kapan\u0131yor",
+ "home": "Evde",
+ "locked": "Kilitli",
+ "not_home": "D\u0131\u015far\u0131da",
+ "off": "Kapal\u0131",
+ "ok": "Tamam",
+ "on": "A\u00e7\u0131k",
+ "open": "A\u00e7\u0131k",
+ "opening": "A\u00e7\u0131l\u0131yor",
+ "problem": "Problem",
+ "stopped": "Durduruldu",
+ "unlocked": "Kilitli de\u011fil"
+ },
+ "input_boolean": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "light": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "lock": {
+ "locked": "Kilitli",
+ "unlocked": "Kilitli de\u011fil"
+ },
+ "media_player": {
+ "idle": "Bo\u015fta",
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k",
+ "paused": "Durduruldu",
+ "playing": "Oynuyor",
+ "standby": "Bekleme modu"
+ },
+ "person": {
+ "home": "Evde",
+ "not_home": "D\u0131\u015far\u0131da"
+ },
+ "plant": {
+ "ok": "Tamam",
+ "problem": "Problem"
+ },
+ "remote": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "scene": {
+ "scening": "senaryolar"
+ },
+ "script": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "sensor": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "sun": {
+ "above_horizon": "Ufkun \u00fczerinde",
+ "below_horizon": "Ufkun alt\u0131nda"
+ },
+ "switch": {
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k"
+ },
+ "timer": {
+ "active": "Aktif",
+ "idle": "Bo\u015fta",
+ "paused": "Durduruldu"
+ },
+ "vacuum": {
+ "cleaning": "Temizleniyor",
+ "docked": "Dock'da",
+ "error": "Hata",
+ "idle": "Bo\u015fta",
+ "off": "Kapal\u0131",
+ "on": "A\u00e7\u0131k",
+ "paused": "Durduruldu",
+ "returning": "Dock'a geri d\u00f6n\u00fc\u015f"
+ },
+ "weather": {
+ "clear-night": "A\u00e7\u0131k, gece",
+ "cloudy": "Bulutlu",
+ "exceptional": "Ola\u011fan\u00fcst\u00fc",
+ "fog": "Sis",
+ "hail": "Selam",
+ "lightning": "Y\u0131ld\u0131r\u0131m",
+ "lightning-rainy": "Y\u0131ld\u0131r\u0131m, ya\u011fmurlu",
+ "partlycloudy": "Par\u00e7al\u0131 bulutlu",
+ "pouring": "D\u00f6kme",
+ "rainy": "Ya\u011fmurlu",
+ "snowy": "Karl\u0131",
+ "snowy-rainy": "Karl\u0131, ya\u011fmurlu",
+ "sunny": "G\u00fcne\u015fli",
+ "windy": "R\u00fczgarl\u0131",
+ "windy-variant": "R\u00fczgarl\u0131"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u00d6l\u00fc",
+ "initializing": "Ba\u015flat\u0131l\u0131yor",
+ "ready": "Haz\u0131r",
+ "sleeping": "Uyuyor"
+ },
+ "query_stage": {
+ "dead": "\u00d6l\u00fc ({query_stage})",
+ "initializing": "Ba\u015flat\u0131l\u0131yor ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/uk.json b/cast/src/translations/uk.json
new file mode 100644
index 0000000000..259fce7b72
--- /dev/null
+++ b/cast/src/translations/uk.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430",
+ "armed_away": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430 (\u043d\u0435 \u0432\u0434\u043e\u043c\u0430)",
+ "armed_custom_bypass": "\u041e\u0445\u043e\u0440\u043e\u043d\u0430 \u0437 \u0432\u0438\u043d\u044f\u0442\u043a\u0430\u043c\u0438",
+ "armed_home": "\u0411\u0443\u0434\u0438\u043d\u043a\u043e\u0432\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0430",
+ "armed_night": "\u041d\u0456\u0447\u043d\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0430",
+ "arming": "\u0421\u0442\u0430\u0432\u043b\u044e \u043d\u0430 \u043e\u0445\u043e\u0440\u043e\u043d\u0443",
+ "disarmed": "\u0417\u043d\u044f\u0442\u043e",
+ "disarming": "\u0417\u043d\u044f\u0442\u0442\u044f",
+ "pending": "\u041e\u0447\u0456\u043a\u0443\u044e",
+ "triggered": "\u0422\u0440\u0438\u0432\u043e\u0433\u0430"
+ },
+ "automation": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0438\u0439",
+ "on": "\u041d\u0438\u0437\u044c\u043a\u0438\u0439"
+ },
+ "cold": {
+ "off": "\u041d\u043e\u0440\u043c\u0430",
+ "on": "\u041e\u0445\u043e\u043b\u043e\u0434\u0436\u0435\u043d\u043d\u044f"
+ },
+ "connectivity": {
+ "off": "\u0412\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
+ "on": "\u041f\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e"
+ },
+ "default": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "door": {
+ "off": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u0456",
+ "on": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u0456"
+ },
+ "garage_door": {
+ "off": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u0406",
+ "on": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0456"
+ },
+ "gas": {
+ "off": "\u0427\u0438\u0441\u0442\u043e",
+ "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0433\u0430\u0437"
+ },
+ "heat": {
+ "off": "\u041d\u043e\u0440\u043c\u0430",
+ "on": "\u041d\u0430\u0433\u0440\u0456\u0432\u0430\u043d\u043d\u044f"
+ },
+ "lock": {
+ "off": "\u0417\u0430\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e",
+ "on": "\u0420\u043e\u0437\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e"
+ },
+ "moisture": {
+ "off": "\u0421\u0443\u0445\u043e",
+ "on": "\u0412\u043e\u043b\u043e\u0433\u043e"
+ },
+ "motion": {
+ "off": "\u041d\u0435\u043c\u0430\u0454 \u0440\u0443\u0445\u0443",
+ "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0440\u0443\u0445"
+ },
+ "occupancy": {
+ "off": "\u0427\u0438\u0441\u0442\u043e",
+ "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u043d\u0456\u0441\u0442\u044c"
+ },
+ "opening": {
+ "off": "\u0417\u0430\u043a\u0440\u0438\u0442\u043e",
+ "on": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438\u0439"
+ },
+ "presence": {
+ "off": "\u041d\u0435 \u0432\u0434\u043e\u043c\u0430",
+ "on": "\u0412\u0434\u043e\u043c\u0430"
+ },
+ "problem": {
+ "off": "\u041e\u041a",
+ "on": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430"
+ },
+ "safety": {
+ "off": "\u0411\u0435\u0437\u043f\u0435\u0447\u043d\u043e",
+ "on": "\u041d\u0435\u0431\u0435\u0437\u043f\u0435\u0447\u043d\u043e"
+ },
+ "smoke": {
+ "off": "\u0427\u0438\u0441\u0442\u043e",
+ "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0434\u0438\u043c"
+ },
+ "sound": {
+ "off": "\u0427\u0438\u0441\u0442\u043e",
+ "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u043e \u0437\u0432\u0443\u043a"
+ },
+ "vibration": {
+ "off": "\u041d\u0435 \u0432\u0438\u044f\u0432\u043b\u0435\u043d\u043e",
+ "on": "\u0412\u0438\u044f\u0432\u043b\u0435\u043d\u0430 \u0432\u0456\u0431\u0440\u0430\u0446\u0456\u044f"
+ },
+ "window": {
+ "off": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u0435",
+ "on": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u0435"
+ }
+ },
+ "calendar": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "camera": {
+ "idle": "\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f",
+ "recording": "\u0417\u0430\u043f\u0438\u0441",
+ "streaming": "\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0456\u044f"
+ },
+ "climate": {
+ "auto": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0438\u0439",
+ "cool": "\u041e\u0445\u043e\u043b\u043e\u0434\u0436\u0435\u043d\u043d\u044f",
+ "dry": "\u041e\u0441\u0443\u0448\u0435\u043d\u043d\u044f",
+ "fan_only": "\u041b\u0438\u0448\u0435 \u0432\u0435\u043d\u0442\u0438\u043b\u044f\u0442\u043e\u0440",
+ "heat": "\u041e\u0431\u0456\u0433\u0440\u0456\u0432\u0430\u043d\u043d\u044f",
+ "heat_cool": "\u041e\u043f\u0430\u043b\u0435\u043d\u043d\u044f/\u041e\u0445\u043e\u043b\u043e\u0434\u0436\u0435\u043d\u043d\u044f",
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "configurator": {
+ "configure": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438",
+ "configured": "\u041d\u0430\u043b\u0430\u0448\u0442\u043e\u0432\u0430\u043d\u043e"
+ },
+ "cover": {
+ "closed": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u043e",
+ "closing": "\u0417\u0430\u043a\u0440\u0438\u0432\u0430\u0454\u0442\u044c\u0441\u044f",
+ "open": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u043e",
+ "opening": "\u0412\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0454\u0442\u044c\u0441\u044f",
+ "stopped": "\u041f\u0440\u0438\u0437\u0443\u043f\u0438\u043d\u0435\u043d\u043e"
+ },
+ "default": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e",
+ "unavailable": "\u041d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439",
+ "unknown": "\u041d\u0435\u0432\u0456\u0434\u043e\u043c\u043e"
+ },
+ "device_tracker": {
+ "home": "\u0412\u0434\u043e\u043c\u0430",
+ "not_home": "\u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439"
+ },
+ "fan": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "group": {
+ "closed": "\u0417\u0430\u0447\u0438\u043d\u0435\u043d\u043e",
+ "closing": "\u0417\u0430\u043a\u0440\u0438\u0432\u0430\u0454\u0442\u044c\u0441\u044f",
+ "home": "\u0412\u0434\u043e\u043c\u0430",
+ "locked": "\u0417\u0430\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e",
+ "not_home": "\u041d\u0435 \u0432\u0434\u043e\u043c\u0430",
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "ok": "\u041e\u041a",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e",
+ "open": "\u0412\u0456\u0434\u0447\u0438\u043d\u0435\u043d\u043e",
+ "opening": "\u0412\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0454\u0442\u044c\u0441\u044f",
+ "problem": "\u0425\u0430\u043b\u0435\u043f\u0430",
+ "stopped": "\u041f\u0440\u0438\u0437\u0443\u043f\u0438\u043d\u0435\u043d\u043e",
+ "unlocked": "\u0420\u043e\u0437\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e"
+ },
+ "input_boolean": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "light": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "lock": {
+ "locked": "\u0417\u0430\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e",
+ "unlocked": "\u0420\u043e\u0437\u0431\u043b\u043e\u043a\u043e\u0432\u0430\u043d\u043e"
+ },
+ "media_player": {
+ "idle": "\u0411\u0435\u0437\u0434\u0456\u044f\u043b\u044c\u043d\u0456\u0441\u0442\u044c",
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e",
+ "paused": "\u041f\u0440\u0438\u0437\u0443\u043f\u0438\u043d\u0435\u043d\u043e",
+ "playing": "\u041f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f",
+ "standby": "\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f"
+ },
+ "person": {
+ "home": "\u0412\u0434\u043e\u043c\u0430",
+ "not_home": "\u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439"
+ },
+ "plant": {
+ "ok": "\u0422\u0410\u041a",
+ "problem": "\u0425\u0430\u043b\u0435\u043f\u0430"
+ },
+ "remote": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "scene": {
+ "scening": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0446\u0435\u043d\u0438"
+ },
+ "script": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "sensor": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "sun": {
+ "above_horizon": "\u041d\u0430\u0434 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c",
+ "below_horizon": "\u0417\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u043e\u043c"
+ },
+ "switch": {
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e"
+ },
+ "timer": {
+ "active": "\u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439",
+ "idle": "\u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f",
+ "paused": "\u043d\u0430 \u043f\u0430\u0443\u0437\u0456"
+ },
+ "vacuum": {
+ "cleaning": "\u041f\u0440\u0438\u0431\u0438\u0440\u0430\u043d\u043d\u044f",
+ "docked": "\u041f\u0440\u0438\u0441\u0442\u0438\u043a\u043e\u0432\u0430\u043d\u043e",
+ "error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430",
+ "idle": "\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f",
+ "off": "\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043e",
+ "on": "\u0423\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043e",
+ "paused": "\u041f\u0440\u0438\u0437\u0443\u043f\u0438\u043d\u0435\u043d\u043e",
+ "returning": "\u041f\u043e\u0432\u0435\u0440\u043d\u0435\u043d\u043d\u044f \u0434\u043e \u0434\u043e\u043a\u0430"
+ },
+ "weather": {
+ "clear-night": "\u042f\u0441\u043d\u043e, \u043d\u0456\u0447",
+ "cloudy": "\u0425\u043c\u0430\u0440\u043d\u043e",
+ "exceptional": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f",
+ "fog": "\u0422\u0443\u043c\u0430\u043d",
+ "hail": "\u0413\u0440\u0430\u0434",
+ "lightning": "\u0411\u043b\u0438\u0441\u043a\u0430\u0432\u043a\u0430",
+ "lightning-rainy": "\u0411\u043b\u0438\u0441\u043a\u0430\u0432\u043a\u0430, \u0434\u043e\u0449",
+ "partlycloudy": "\u041d\u0435\u0432\u0435\u043b\u0438\u043a\u0430 \u0445\u043c\u0430\u0440\u043d\u0456\u0441\u0442\u044c",
+ "pouring": "\u0417\u043b\u0438\u0432\u0430",
+ "rainy": "\u0414\u043e\u0449\u043e\u0432\u0430",
+ "snowy": "\u0421\u043d\u0456\u0436\u043d\u043e",
+ "snowy-rainy": "\u0421\u043d\u0456\u0433, \u0434\u043e\u0449",
+ "sunny": "\u0421\u043e\u043d\u044f\u0447\u043d\u043e",
+ "windy": "\u0412\u0456\u0442\u0440\u044f\u043d\u043e",
+ "windy-variant": "\u0412\u0456\u0442\u0440\u044f\u043d\u043e"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u041d\u0435\u0440\u043e\u0431\u043e\u0447\u0430",
+ "initializing": "\u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f",
+ "ready": "\u0413\u043e\u0442\u043e\u0432\u0438\u0439",
+ "sleeping": "\u0421\u043f\u043b\u044f\u0447\u043a\u0430"
+ },
+ "query_stage": {
+ "dead": "\u041d\u0435\u0440\u043e\u0431\u043e\u0447\u0430 ({query_stage})",
+ "initializing": "\u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/vi.json b/cast/src/translations/vi.json
new file mode 100644
index 0000000000..d81fc7f798
--- /dev/null
+++ b/cast/src/translations/vi.json
@@ -0,0 +1,254 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "K\u00edch ho\u1ea1t an ninh",
+ "armed_away": "B\u1ea3o v\u1ec7 \u0111i v\u1eafng",
+ "armed_custom_bypass": "T\u00f9y ch\u1ec9nh b\u1ecf qua An ninh",
+ "armed_home": "B\u1ea3o v\u1ec7 \u1edf nh\u00e0",
+ "armed_night": "Ban \u0111\u00eam",
+ "arming": "K\u00edch ho\u1ea1t",
+ "disarmed": "V\u00f4 hi\u1ec7u h\u00f3a",
+ "disarming": "Gi\u1ea3i gi\u00e1p",
+ "pending": "\u0110ang ch\u1edd x\u1eed l\u00fd",
+ "triggered": "K\u00edch ho\u1ea1t"
+ },
+ "automation": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "B\u00ecnh th\u01b0\u1eddng",
+ "on": "Th\u1ea5p"
+ },
+ "cold": {
+ "off": "B\u00ecnh th\u01b0\u1eddng",
+ "on": "L\u1ea1nh"
+ },
+ "connectivity": {
+ "off": "\u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i",
+ "on": "\u0110\u00e3 k\u1ebft n\u1ed1i"
+ },
+ "default": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "door": {
+ "off": "\u0110\u00f3ng",
+ "on": "M\u1edf"
+ },
+ "garage_door": {
+ "off": "\u0110\u00f3ng",
+ "on": "M\u1edf"
+ },
+ "gas": {
+ "off": "Tr\u00f4\u0341ng tra\u0309i",
+ "on": "Ph\u00e1t hi\u1ec7n"
+ },
+ "heat": {
+ "off": "B\u00ecnh th\u01b0\u1eddng",
+ "on": "N\u00f3ng"
+ },
+ "lock": {
+ "off": "\u0110\u00e3 kho\u00e1",
+ "on": "M\u1edf kho\u00e1"
+ },
+ "moisture": {
+ "off": "Kh\u00f4",
+ "on": "\u01af\u1edbt"
+ },
+ "motion": {
+ "off": "Tr\u00f4\u0341ng tra\u0309i",
+ "on": "Ph\u00e1t hi\u1ec7n"
+ },
+ "occupancy": {
+ "off": "Tr\u00f4\u0341ng tra\u0309i",
+ "on": "Ph\u00e1t hi\u1ec7n"
+ },
+ "opening": {
+ "off": "\u0110\u00e3 \u0111\u00f3ng",
+ "on": "M\u1edf"
+ },
+ "presence": {
+ "off": "\u0110i v\u1eafng",
+ "on": "\u1ede nh\u00e0"
+ },
+ "problem": {
+ "off": "OK",
+ "on": "C\u00f3 v\u1ea5n \u0111\u1ec1"
+ },
+ "safety": {
+ "off": "An to\u00e0n",
+ "on": "Kh\u00f4ng an to\u00e0n"
+ },
+ "smoke": {
+ "off": "Tr\u00f4\u0341ng tra\u0309i",
+ "on": "Ph\u00e1t hi\u1ec7n"
+ },
+ "sound": {
+ "off": "Tr\u00f4\u0341ng tra\u0309i",
+ "on": "Ph\u00e1t hi\u1ec7n"
+ },
+ "vibration": {
+ "off": "Tr\u00f4\u0341ng tra\u0309i",
+ "on": "Ph\u00e1t hi\u1ec7n"
+ },
+ "window": {
+ "off": "\u0110\u00f3ng",
+ "on": "M\u1edf"
+ }
+ },
+ "calendar": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "camera": {
+ "idle": "Kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng",
+ "recording": "Ghi \u00e2m",
+ "streaming": "Ph\u00e1t tr\u1ef1c tuy\u1ebfn"
+ },
+ "climate": {
+ "auto": "T\u01b0\u0323 \u0111\u00f4\u0323ng",
+ "cool": "M\u00e1t m\u1ebb",
+ "dry": "Kh\u00f4",
+ "fan_only": "Ch\u1ec9 c\u00f3 qu\u1ea1t",
+ "heat": "Nhi\u1ec7t",
+ "heat_cool": "N\u00f3ng/L\u1ea1nh",
+ "off": "T\u1eaft"
+ },
+ "configurator": {
+ "configure": "C\u1ea5u h\u00ecnh",
+ "configured": "\u0110\u00e3 c\u1ea5u h\u00ecnh"
+ },
+ "cover": {
+ "closed": "\u0110\u00e3 \u0111\u00f3ng",
+ "closing": "\u0110ang \u0111\u00f3ng",
+ "open": "M\u1edf",
+ "opening": "\u0110ang m\u1edf",
+ "stopped": "\u0110\u00e3 d\u1eebng"
+ },
+ "default": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt",
+ "unavailable": "Kh\u00f4ng c\u00f3 s\u1eb5n",
+ "unknown": "Ch\u01b0a bi\u1ebft"
+ },
+ "device_tracker": {
+ "home": "\u1ede nh\u00e0",
+ "not_home": "\u0110i v\u1eafng"
+ },
+ "fan": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "group": {
+ "closed": "\u0110\u00e3 \u0111\u00f3ng",
+ "closing": "\u0110ang \u0111\u00f3ng",
+ "home": "\u1ede nh\u00e0",
+ "locked": "Kho\u00e1",
+ "not_home": "\u0110i v\u1eafng",
+ "off": "T\u1eaft",
+ "ok": "OK",
+ "on": "B\u1eadt",
+ "open": "M\u1edf",
+ "opening": "\u0110ang m\u1edf",
+ "problem": "V\u1ea5n \u0111\u1ec1",
+ "stopped": "\u0110\u00e3 d\u1eebng",
+ "unlocked": "M\u1edf kho\u00e1"
+ },
+ "input_boolean": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "light": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "lock": {
+ "locked": "\u0110\u00e3 kh\u00f3a",
+ "unlocked": "M\u1edf kh\u00f3a"
+ },
+ "media_player": {
+ "idle": "Kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng",
+ "off": "T\u1eaft",
+ "on": "B\u1eadt",
+ "paused": "T\u1ea1m d\u1eebng",
+ "playing": "\u0110ang ch\u01a1i",
+ "standby": "Ch\u1ebf \u0111\u1ed9 ch\u1edd"
+ },
+ "person": {
+ "home": "\u1ede nh\u00e0",
+ "not_home": "\u0110i v\u1eafng"
+ },
+ "plant": {
+ "ok": "OK",
+ "problem": "V\u1ea5n \u0111\u1ec1"
+ },
+ "remote": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "scene": {
+ "scening": "B\u1ed1i c\u1ea3nh"
+ },
+ "script": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "sensor": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "sun": {
+ "above_horizon": "Tr\u00ean \u0111\u01b0\u1eddng ch\u00e2n tr\u1eddi",
+ "below_horizon": "D\u01b0\u1edbi \u0111\u01b0\u1eddng ch\u00e2n tr\u1eddi"
+ },
+ "switch": {
+ "off": "T\u1eaft",
+ "on": "B\u1eadt"
+ },
+ "timer": {
+ "active": "ho\u1ea1t \u0111\u1ed9ng",
+ "idle": "nh\u00e0n r\u1ed7i",
+ "paused": "t\u1ea1m d\u1eebng"
+ },
+ "vacuum": {
+ "cleaning": "\u0110ang l\u00e0m s\u1ea1ch",
+ "docked": "\u0110\u00e3 v\u00e0o dock",
+ "error": "L\u1ed7i",
+ "idle": "Kh\u00f4ng ho\u1ea1t \u0111\u1ed9ng",
+ "off": "M\u1edf",
+ "on": "T\u1eaft",
+ "paused": "T\u1ea1m d\u1eebng",
+ "returning": "\u0110ang tr\u1edf l\u1ea1i dock"
+ },
+ "weather": {
+ "clear-night": "Tr\u1eddi trong, \u0111\u00eam",
+ "cloudy": "Nhi\u1ec1u m\u00e2y",
+ "fog": "S\u01b0\u01a1ng m\u00f9",
+ "hail": "M\u01b0a \u0111a\u0341",
+ "lightning": "S\u00e9t",
+ "lightning-rainy": "S\u00e9t, m\u01b0a",
+ "partlycloudy": "M\u00e2y r\u1ea3i r\u00e1c",
+ "pouring": "M\u01b0a l\u1edbn",
+ "rainy": "M\u01b0a",
+ "snowy": "Tuy\u1ebft",
+ "snowy-rainy": "Tuy\u1ebft, m\u01b0a",
+ "sunny": "N\u1eafng \u0111\u1eb9p",
+ "windy": "Gi\u00f3 nh\u1eb9",
+ "windy-variant": "Gi\u00f3 nh\u1eb9"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u0110\u00e3 t\u1eaft",
+ "initializing": "Kh\u1edfi t\u1ea1o",
+ "ready": "S\u1eb5n s\u00e0ng",
+ "sleeping": "Ng\u1ee7"
+ },
+ "query_stage": {
+ "dead": "\u0110\u00e3 t\u1eaft ({query_stage})",
+ "initializing": "Kh\u1edfi t\u1ea1o ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/zh-Hans.json b/cast/src/translations/zh-Hans.json
new file mode 100644
index 0000000000..d198a13d3e
--- /dev/null
+++ b/cast/src/translations/zh-Hans.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\u8b66\u6212",
+ "armed_away": "\u79bb\u5bb6\u8b66\u6212",
+ "armed_custom_bypass": "\u81ea\u5b9a\u4e49\u533a\u57df\u8b66\u6212",
+ "armed_home": "\u5728\u5bb6\u8b66\u6212",
+ "armed_night": "\u591c\u95f4\u8b66\u6212",
+ "arming": "\u8b66\u6212\u4e2d",
+ "disarmed": "\u8b66\u6212\u89e3\u9664",
+ "disarming": "\u8b66\u6212\u89e3\u9664",
+ "pending": "\u6302\u8d77",
+ "triggered": "\u5df2\u89e6\u53d1"
+ },
+ "automation": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00\u542f"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\u6b63\u5e38",
+ "on": "\u4f4e"
+ },
+ "cold": {
+ "off": "\u6b63\u5e38",
+ "on": "\u8fc7\u51b7"
+ },
+ "connectivity": {
+ "off": "\u5df2\u65ad\u5f00",
+ "on": "\u5df2\u8fde\u63a5"
+ },
+ "default": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00\u542f"
+ },
+ "door": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00\u542f"
+ },
+ "garage_door": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00\u542f"
+ },
+ "gas": {
+ "off": "\u6b63\u5e38",
+ "on": "\u89e6\u53d1"
+ },
+ "heat": {
+ "off": "\u6b63\u5e38",
+ "on": "\u8fc7\u70ed"
+ },
+ "lock": {
+ "off": "\u4e0a\u9501",
+ "on": "\u89e3\u9501"
+ },
+ "moisture": {
+ "off": "\u5e72\u71e5",
+ "on": "\u6e7f\u6da6"
+ },
+ "motion": {
+ "off": "\u672a\u89e6\u53d1",
+ "on": "\u89e6\u53d1"
+ },
+ "occupancy": {
+ "off": "\u672a\u89e6\u53d1",
+ "on": "\u5df2\u89e6\u53d1"
+ },
+ "opening": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00\u542f"
+ },
+ "presence": {
+ "off": "\u79bb\u5f00",
+ "on": "\u5728\u5bb6"
+ },
+ "problem": {
+ "off": "\u6b63\u5e38",
+ "on": "\u5f02\u5e38"
+ },
+ "safety": {
+ "off": "\u5b89\u5168",
+ "on": "\u5371\u9669"
+ },
+ "smoke": {
+ "off": "\u6b63\u5e38",
+ "on": "\u89e6\u53d1"
+ },
+ "sound": {
+ "off": "\u6b63\u5e38",
+ "on": "\u89e6\u53d1"
+ },
+ "vibration": {
+ "off": "\u6b63\u5e38",
+ "on": "\u89e6\u53d1"
+ },
+ "window": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00\u542f"
+ }
+ },
+ "calendar": {
+ "off": "\u5173",
+ "on": "\u5f00"
+ },
+ "camera": {
+ "idle": "\u5f85\u673a",
+ "recording": "\u5f55\u5236\u4e2d",
+ "streaming": "\u76d1\u63a7\u4e2d"
+ },
+ "climate": {
+ "auto": "\u81ea\u52a8",
+ "cool": "\u5236\u51b7",
+ "dry": "\u9664\u6e7f",
+ "fan_only": "\u4ec5\u9001\u98ce",
+ "heat": "\u5236\u70ed",
+ "heat_cool": "\u5236\u70ed/\u5236\u51b7",
+ "off": "\u5173"
+ },
+ "configurator": {
+ "configure": "\u8bbe\u7f6e",
+ "configured": "\u8bbe\u7f6e\u6210\u529f"
+ },
+ "cover": {
+ "closed": "\u5df2\u5173\u95ed",
+ "closing": "\u6b63\u5728\u5173\u95ed",
+ "open": "\u5df2\u6253\u5f00",
+ "opening": "\u6b63\u5728\u6253\u5f00",
+ "stopped": "\u5df2\u505c\u6b62"
+ },
+ "default": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00",
+ "unavailable": "\u4e0d\u53ef\u7528",
+ "unknown": "\u672a\u77e5"
+ },
+ "device_tracker": {
+ "home": "\u5728\u5bb6",
+ "not_home": "\u79bb\u5f00"
+ },
+ "fan": {
+ "off": "\u5173\u95ed",
+ "on": "\u5f00"
+ },
+ "group": {
+ "closed": "\u5df2\u5173\u95ed",
+ "closing": "\u6b63\u5728\u5173\u95ed",
+ "home": "\u5728\u5bb6",
+ "locked": "\u5df2\u9501\u5b9a",
+ "not_home": "\u79bb\u5f00",
+ "off": "\u5173\u95ed",
+ "ok": "\u6b63\u5e38",
+ "on": "\u5f00\u542f",
+ "open": "\u5f00\u542f",
+ "opening": "\u6b63\u5728\u6253\u5f00",
+ "problem": "\u5f02\u5e38",
+ "stopped": "\u5df2\u505c\u6b62",
+ "unlocked": "\u5df2\u89e3\u9501"
+ },
+ "input_boolean": {
+ "off": "\u5173",
+ "on": "\u5f00"
+ },
+ "light": {
+ "off": "\u5173",
+ "on": "\u5f00"
+ },
+ "lock": {
+ "locked": "\u9501\u5b9a",
+ "unlocked": "\u89e3\u9501"
+ },
+ "media_player": {
+ "idle": "\u7a7a\u95f2",
+ "off": "\u5173",
+ "on": "\u5f00",
+ "paused": "\u5df2\u6682\u505c",
+ "playing": "\u6b63\u5728\u64ad\u653e",
+ "standby": "\u5f85\u673a"
+ },
+ "person": {
+ "home": "\u5728\u5bb6",
+ "not_home": "\u79bb\u5f00"
+ },
+ "plant": {
+ "ok": "\u6b63\u5e38",
+ "problem": "\u5f02\u5e38"
+ },
+ "remote": {
+ "off": "\u5173",
+ "on": "\u5f00"
+ },
+ "scene": {
+ "scening": "\u573a\u666f\u542f\u7528\u4e2d"
+ },
+ "script": {
+ "off": "\u5173",
+ "on": "\u5f00"
+ },
+ "sensor": {
+ "off": "\u5173",
+ "on": "\u5f00"
+ },
+ "sun": {
+ "above_horizon": "\u65e5\u51fa",
+ "below_horizon": "\u65e5\u843d"
+ },
+ "switch": {
+ "off": "\u5173",
+ "on": "\u5f00"
+ },
+ "timer": {
+ "active": "\u6fc0\u6d3b",
+ "idle": "\u7a7a\u95f2",
+ "paused": "\u6682\u505c"
+ },
+ "vacuum": {
+ "cleaning": "\u6b63\u5728\u6e05\u626b",
+ "docked": "\u505c\u9760",
+ "error": "\u9519\u8bef",
+ "idle": "\u7a7a\u95f2",
+ "off": "\u5173\u95ed",
+ "on": "\u5f00\u542f",
+ "paused": "\u5df2\u6682\u505c",
+ "returning": "\u6b63\u5728\u8fd4\u56de"
+ },
+ "weather": {
+ "clear-night": "\u591c\u95f4\u6674\u6717",
+ "cloudy": "\u9634",
+ "exceptional": "\u7279\u6b8a",
+ "fog": "\u96fe",
+ "hail": "\u51b0\u96f9",
+ "lightning": "\u96f7\u7535",
+ "lightning-rainy": "\u96f7\u9635\u96e8",
+ "partlycloudy": "\u591a\u4e91",
+ "pouring": "\u66b4\u96e8",
+ "rainy": "\u96e8",
+ "snowy": "\u96ea",
+ "snowy-rainy": "\u96e8\u5939\u96ea",
+ "sunny": "\u6674",
+ "windy": "\u6709\u98ce",
+ "windy-variant": "\u6709\u98ce"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u65ad\u5f00",
+ "initializing": "\u521d\u59cb\u5316",
+ "ready": "\u5c31\u7eea",
+ "sleeping": "\u4f11\u7720"
+ },
+ "query_stage": {
+ "dead": "\u65ad\u5f00 ({query_stage})",
+ "initializing": "\u521d\u59cb\u5316 ({query_stage})"
+ }
+ }
+ }
+}
diff --git a/cast/src/translations/zh-Hant.json b/cast/src/translations/zh-Hant.json
new file mode 100644
index 0000000000..085100ecd5
--- /dev/null
+++ b/cast/src/translations/zh-Hant.json
@@ -0,0 +1,255 @@
+{
+ "state": {
+ "alarm_control_panel": {
+ "armed": "\u5df2\u8b66\u6212",
+ "armed_away": "\u96e2\u5bb6\u8b66\u6212",
+ "armed_custom_bypass": "\u8b66\u6212\u6a21\u5f0f\u72c0\u614b",
+ "armed_home": "\u5728\u5bb6\u8b66\u6212",
+ "armed_night": "\u591c\u9593\u8b66\u6212",
+ "arming": "\u8b66\u6212\u4e2d",
+ "disarmed": "\u8b66\u6212\u89e3\u9664",
+ "disarming": "\u89e3\u9664\u4e2d",
+ "pending": "\u7b49\u5f85\u4e2d",
+ "triggered": "\u5df2\u89f8\u767c"
+ },
+ "automation": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f"
+ },
+ "binary_sensor": {
+ "battery": {
+ "off": "\u96fb\u91cf\u6b63\u5e38",
+ "on": "\u96fb\u91cf\u4f4e"
+ },
+ "cold": {
+ "off": "\u4e0d\u51b7",
+ "on": "\u51b7"
+ },
+ "connectivity": {
+ "off": "\u5df2\u65b7\u7dda",
+ "on": "\u5df2\u9023\u7dda"
+ },
+ "default": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f"
+ },
+ "door": {
+ "off": "\u5df2\u95dc\u9589",
+ "on": "\u5df2\u958b\u555f"
+ },
+ "garage_door": {
+ "off": "\u95dc\u9589",
+ "on": "\u5df2\u958b\u555f"
+ },
+ "gas": {
+ "off": "\u672a\u89f8\u767c",
+ "on": "\u5df2\u89f8\u767c"
+ },
+ "heat": {
+ "off": "\u4e0d\u71b1",
+ "on": "\u71b1"
+ },
+ "lock": {
+ "off": "\u5df2\u4e0a\u9396",
+ "on": "\u5df2\u89e3\u9396"
+ },
+ "moisture": {
+ "off": "\u4e7e\u71e5",
+ "on": "\u6fd5\u6f64"
+ },
+ "motion": {
+ "off": "\u7121\u4eba",
+ "on": "\u6709\u4eba"
+ },
+ "occupancy": {
+ "off": "\u672a\u89f8\u767c",
+ "on": "\u5df2\u89f8\u767c"
+ },
+ "opening": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f"
+ },
+ "presence": {
+ "off": "\u96e2\u5bb6",
+ "on": "\u5728\u5bb6"
+ },
+ "problem": {
+ "off": "\u78ba\u5b9a",
+ "on": "\u554f\u984c"
+ },
+ "safety": {
+ "off": "\u5b89\u5168",
+ "on": "\u5371\u96aa"
+ },
+ "smoke": {
+ "off": "\u672a\u89f8\u767c",
+ "on": "\u5df2\u89f8\u767c"
+ },
+ "sound": {
+ "off": "\u5df2\u89e3\u9664",
+ "on": "\u5df2\u89f8\u767c"
+ },
+ "vibration": {
+ "off": "\u672a\u5075\u6e2c",
+ "on": "\u5075\u6e2c"
+ },
+ "window": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f"
+ }
+ },
+ "calendar": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f"
+ },
+ "camera": {
+ "idle": "\u5f85\u547d",
+ "recording": "\u9304\u5f71\u4e2d",
+ "streaming": "\u76e3\u63a7\u4e2d"
+ },
+ "climate": {
+ "auto": "\u81ea\u52d5",
+ "cool": "\u51b7\u6c23",
+ "dry": "\u9664\u6fd5\u6a21\u5f0f",
+ "fan_only": "\u50c5\u9001\u98a8",
+ "heat": "\u6696\u6c23",
+ "heat_cool": "\u6696\u6c23/\u51b7\u6c23",
+ "off": "\u95dc\u9589"
+ },
+ "configurator": {
+ "configure": "\u8a2d\u5b9a",
+ "configured": "\u8a2d\u5b9a\u6210\u529f"
+ },
+ "cover": {
+ "closed": "\u95dc\u9589",
+ "closing": "\u95dc\u9589\u4e2d",
+ "open": "\u958b\u555f",
+ "opening": "\u958b\u555f\u4e2d",
+ "stopped": "\u505c\u6b62"
+ },
+ "default": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f",
+ "unavailable": "\u4e0d\u53ef\u7528",
+ "unknown": "\u672a\u77e5"
+ },
+ "device_tracker": {
+ "home": "\u5728\u5bb6",
+ "not_home": "\u96e2\u5bb6"
+ },
+ "fan": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f"
+ },
+ "group": {
+ "closed": "\u95dc\u9589",
+ "closing": "\u95dc\u9589\u4e2d",
+ "home": "\u5728\u5bb6",
+ "locked": "\u9396",
+ "not_home": "\u96e2\u5bb6",
+ "off": "\u95dc\u9589",
+ "ok": "\u6b63\u5e38",
+ "on": "\u958b\u555f",
+ "open": "\u958b\u555f",
+ "opening": "\u958b\u555f\u4e2d",
+ "problem": "\u7570\u5e38",
+ "stopped": "\u505c\u6b62",
+ "unlocked": "\u5df2\u89e3\u9396"
+ },
+ "input_boolean": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f"
+ },
+ "light": {
+ "off": "\u5df2\u95dc\u71c8",
+ "on": "\u5df2\u958b\u71c8"
+ },
+ "lock": {
+ "locked": "\u5df2\u4e0a\u9396",
+ "unlocked": "\u5df2\u89e3\u9396"
+ },
+ "media_player": {
+ "idle": "\u9592\u7f6e",
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f",
+ "paused": "\u5df2\u66ab\u505c",
+ "playing": "\u64ad\u653e\u4e2d",
+ "standby": "\u5f85\u547d"
+ },
+ "person": {
+ "home": "\u5728\u5bb6",
+ "not_home": "\u96e2\u5bb6"
+ },
+ "plant": {
+ "ok": "\u5065\u5eb7",
+ "problem": "\u7570\u5e38"
+ },
+ "remote": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u5553"
+ },
+ "scene": {
+ "scening": "\u76ee\u524d\u5834\u666f"
+ },
+ "script": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u5553"
+ },
+ "sensor": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u5553"
+ },
+ "sun": {
+ "above_horizon": "\u65e5\u51fa\u6771\u6d77",
+ "below_horizon": "\u65e5\u843d\u897f\u5c71"
+ },
+ "switch": {
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u5553"
+ },
+ "timer": {
+ "active": "\u555f\u7528",
+ "idle": "\u9592\u7f6e",
+ "paused": "\u66ab\u505c"
+ },
+ "vacuum": {
+ "cleaning": "\u6e05\u6383\u4e2d",
+ "docked": "\u5145\u96fb\u4e2d",
+ "error": "\u932f\u8aa4",
+ "idle": "\u66ab\u505c",
+ "off": "\u95dc\u9589",
+ "on": "\u958b\u555f",
+ "paused": "\u66ab\u505c",
+ "returning": "\u8fd4\u56de\u5145\u96fb"
+ },
+ "weather": {
+ "clear-night": "\u6674\u7a7a\u3001\u591c\u9593",
+ "cloudy": "\u591a\u96f2",
+ "exceptional": "\u4f8b\u5916",
+ "fog": "\u6709\u9727",
+ "hail": "\u51b0\u96f9",
+ "lightning": "\u6709\u96f7",
+ "lightning-rainy": "\u6709\u96f7\u96e8",
+ "partlycloudy": "\u5c40\u90e8\u591a\u96f2",
+ "pouring": "\u5927\u96e8",
+ "rainy": "\u6709\u96e8",
+ "snowy": "\u6709\u96ea",
+ "snowy-rainy": "\u6709\u96ea\u3001\u6709\u96e8",
+ "sunny": "\u6674\u5929",
+ "windy": "\u6709\u98a8",
+ "windy-variant": "\u6709\u98a8"
+ },
+ "zwave": {
+ "default": {
+ "dead": "\u5931\u53bb\u9023\u7dda",
+ "initializing": "\u6b63\u5728\u521d\u59cb\u5316",
+ "ready": "\u6e96\u5099\u5c31\u7dd2",
+ "sleeping": "\u4f11\u7720\u4e2d"
+ },
+ "query_stage": {
+ "dead": "\u5931\u53bb\u9023\u7dda ({query_stage})",
+ "initializing": "\u6b63\u5728\u521d\u59cb\u5316 ( {query_stage} )"
+ }
+ }
+ }
+}
diff --git a/demo/src/stubs/lovelace.ts b/demo/src/stubs/lovelace.ts
index 3928e5eaf0..74a38bc428 100644
--- a/demo/src/stubs/lovelace.ts
+++ b/demo/src/stubs/lovelace.ts
@@ -17,6 +17,7 @@ export const mockLovelace = (
);
hass.mockWS("lovelace/config/save", () => Promise.resolve());
+ hass.mockWS("lovelace/resources", () => Promise.resolve([]));
};
customElements.whenDefined("hui-view").then(() => {
diff --git a/demo/src/stubs/translations.ts b/demo/src/stubs/translations.ts
index 615159343d..f654f19fc7 100644
--- a/demo/src/stubs/translations.ts
+++ b/demo/src/stubs/translations.ts
@@ -2,473 +2,6 @@ import { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockTranslations = (hass: MockHomeAssistant) => {
hass.mockWS("frontend/get_translations", () => ({
- resources: {
- "component.lifx.config.abort.no_devices_found":
- "No LIFX devices found on the network.",
- "component.lifx.config.abort.single_instance_allowed":
- "Only a single configuration of LIFX is possible.",
- "component.lifx.config.step.confirm.description":
- "Do you want to set up LIFX?",
- "component.lifx.config.step.confirm.title": "LIFX",
- "component.lifx.config.title": "LIFX",
- "component.hangouts.config.abort.already_configured":
- "Google Hangouts is already configured",
- "component.hangouts.config.abort.unknown": "Unknown error occurred.",
- "component.hangouts.config.error.invalid_2fa":
- "Invalid 2 Factor Authentication, please try again.",
- "component.hangouts.config.error.invalid_2fa_method":
- "Invalid 2FA Method (Verify on Phone).",
- "component.hangouts.config.error.invalid_login":
- "Invalid Login, please try again.",
- "component.hangouts.config.step.2fa.data.2fa": "2FA Pin",
- "component.hangouts.config.step.2fa.title": "2-Factor-Authentication",
- "component.hangouts.config.step.user.data.email": "E-Mail Address",
- "component.hangouts.config.step.user.data.password": "Password",
- "component.hangouts.config.step.user.title": "Google Hangouts Login",
- "component.hangouts.config.title": "Google Hangouts",
- "component.rainmachine.config.error.identifier_exists":
- "Account already registered",
- "component.rainmachine.config.error.invalid_credentials":
- "Invalid credentials",
- "component.rainmachine.config.step.user.data.ip_address":
- "Hostname or IP Address",
- "component.rainmachine.config.step.user.data.password": "Password",
- "component.rainmachine.config.step.user.data.port": "Port",
- "component.rainmachine.config.step.user.title":
- "Fill in your information",
- "component.rainmachine.config.title": "RainMachine",
- "component.homematicip_cloud.config.abort.already_configured":
- "Access point is already configured",
- "component.homematicip_cloud.config.abort.connection_aborted":
- "Could not connect to HMIP server",
- "component.homematicip_cloud.config.abort.unknown":
- "Unknown error occurred.",
- "component.homematicip_cloud.config.error.invalid_pin":
- "Invalid PIN, please try again.",
- "component.homematicip_cloud.config.error.press_the_button":
- "Please press the blue button.",
- "component.homematicip_cloud.config.error.register_failed":
- "Failed to register, please try again.",
- "component.homematicip_cloud.config.error.timeout_button":
- "Blue button press timeout, please try again.",
- "component.homematicip_cloud.config.step.init.data.hapid":
- "Access point ID (SGTIN)",
- "component.homematicip_cloud.config.step.init.data.name":
- "Name (optional, used as name prefix for all devices)",
- "component.homematicip_cloud.config.step.init.data.pin":
- "Pin Code (optional)",
- "component.homematicip_cloud.config.step.init.title":
- "Pick HomematicIP Access point",
- "component.homematicip_cloud.config.step.link.description":
- "Press the blue button on the access point and the submit button to register HomematicIP with Home Assistant.\n\n",
- "component.homematicip_cloud.config.step.link.title": "Link Access point",
- "component.homematicip_cloud.config.title": "HomematicIP Cloud",
- "component.daikin.config.abort.already_configured":
- "Device is already configured",
- "component.daikin.config.abort.device_fail":
- "Unexpected error creating device.",
- "component.daikin.config.abort.device_timeout":
- "Timeout connecting to the device.",
- "component.daikin.config.step.user.data.host": "Host",
- "component.daikin.config.step.user.description":
- "Enter IP address of your Daikin AC.",
- "component.daikin.config.step.user.title": "Configure Daikin AC",
- "component.daikin.config.title": "Daikin AC",
- "component.unifi.config.abort.already_configured":
- "Controller site is already configured",
- "component.unifi.config.abort.user_privilege":
- "User needs to be administrator",
- "component.unifi.config.error.faulty_credentials": "Bad user credentials",
- "component.unifi.config.error.service_unavailable":
- "No service available",
- "component.unifi.config.step.user.data.host": "Host",
- "component.unifi.config.step.user.data.password": "Password",
- "component.unifi.config.step.user.data.port": "Port",
- "component.unifi.config.step.user.data.site": "Site ID",
- "component.unifi.config.step.user.data.username": "User name",
- "component.unifi.config.step.user.data.verify_ssl":
- "Controller using proper certificate",
- "component.unifi.config.step.user.title": "Set up UniFi Controller",
- "component.unifi.config.title": "UniFi Controller",
- "component.nest.config.abort.already_setup":
- "You can only configure a single Nest account.",
- "component.nest.config.abort.authorize_url_fail":
- "Unknown error generating an authorize url.",
- "component.nest.config.abort.authorize_url_timeout":
- "Timeout generating authorize url.",
- "component.nest.config.abort.no_flows":
- "You need to configure Nest before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/integrations/nest/).",
- "component.nest.config.error.internal_error":
- "Internal error validating code",
- "component.nest.config.error.invalid_code": "Invalid code",
- "component.nest.config.error.timeout": "Timeout validating code",
- "component.nest.config.error.unknown": "Unknown error validating code",
- "component.nest.config.step.init.data.flow_impl": "Provider",
- "component.nest.config.step.init.description":
- "Pick via which authentication provider you want to authenticate with Nest.",
- "component.nest.config.step.init.title": "Authentication Provider",
- "component.nest.config.step.link.data.code": "Pin code",
- "component.nest.config.step.link.description":
- "To link your Nest account, [authorize your account]({url}).\n\nAfter authorization, copy-paste the provided pin code below.",
- "component.nest.config.step.link.title": "Link Nest Account",
- "component.nest.config.title": "Nest",
- "component.mailgun.config.abort.not_internet_accessible":
- "Your Home Assistant instance needs to be accessible from the internet to receive Mailgun messages.",
- "component.mailgun.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.mailgun.config.create_entry.default":
- "To send events to Home Assistant, you will need to setup [Webhooks with Mailgun]({mailgun_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data.",
- "component.mailgun.config.step.user.description":
- "Are you sure you want to set up Mailgun?",
- "component.mailgun.config.step.user.title": "Set up the Mailgun Webhook",
- "component.mailgun.config.title": "Mailgun",
- "component.tellduslive.config.abort.already_setup":
- "TelldusLive is already configured",
- "component.tellduslive.config.abort.authorize_url_fail":
- "Unknown error generating an authorize url.",
- "component.tellduslive.config.abort.authorize_url_timeout":
- "Timeout generating authorize url.",
- "component.tellduslive.config.abort.unknown": "Unknown error occurred",
- "component.tellduslive.config.error.auth_error":
- "Authentication error, please try again",
- "component.tellduslive.config.step.auth.description":
- "To link your TelldusLive account:\n 1. Click the link below\n 2. Login to Telldus Live\n 3. Authorize **{app_name}** (click **Yes**).\n 4. Come back here and click **SUBMIT**.\n\n [Link TelldusLive account]({auth_url})",
- "component.tellduslive.config.step.auth.title":
- "Authenticate against TelldusLive",
- "component.tellduslive.config.step.user.data.host": "Host",
- "component.tellduslive.config.step.user.title": "Pick endpoint.",
- "component.tellduslive.config.title": "Telldus Live",
- "component.esphome.config.abort.already_configured":
- "ESP is already configured",
- "component.esphome.config.error.connection_error":
- "Can't connect to ESP. Please make sure your YAML file contains an 'api:' line.",
- "component.esphome.config.error.invalid_password": "Invalid password!",
- "component.esphome.config.error.resolve_error":
- "Can't resolve address of the ESP. If this error persists, please set a static IP address: https://esphomelib.com/esphomeyaml/components/wifi.html#manual-ips",
- "component.esphome.config.step.authenticate.data.password": "Password",
- "component.esphome.config.step.authenticate.description":
- "Please enter the password you set in your configuration.",
- "component.esphome.config.step.authenticate.title": "Enter Password",
- "component.esphome.config.step.user.data.host": "Host",
- "component.esphome.config.step.user.data.port": "Port",
- "component.esphome.config.step.user.description":
- "Please enter connection settings of your [ESPHome](https://esphomelib.com/) node.",
- "component.esphome.config.step.user.title": "ESPHome",
- "component.esphome.config.title": "ESPHome",
- "component.luftdaten.config.error.communication_error":
- "Unable to communicate with the Luftdaten API",
- "component.luftdaten.config.error.invalid_sensor":
- "Sensor not available or invalid",
- "component.luftdaten.config.error.sensor_exists":
- "Sensor already registered",
- "component.luftdaten.config.step.user.data.show_on_map": "Show on map",
- "component.luftdaten.config.step.user.data.station_id":
- "Luftdaten Sensor ID",
- "component.luftdaten.config.step.user.title": "Define Luftdaten",
- "component.luftdaten.config.title": "Luftdaten",
- "component.upnp.config.abort.already_configured":
- "UPnP/IGD is already configured",
- "component.upnp.config.abort.incomplete_device":
- "Ignoring incomplete UPnP device",
- "component.upnp.config.abort.no_devices_discovered":
- "No UPnP/IGDs discovered",
- "component.upnp.config.abort.no_devices_found":
- "No UPnP/IGD devices found on the network.",
- "component.upnp.config.abort.no_sensors_or_port_mapping":
- "Enable at least sensors or port mapping",
- "component.upnp.config.abort.single_instance_allowed":
- "Only a single configuration of UPnP/IGD is necessary.",
- "component.upnp.config.step.confirm.description":
- "Do you want to set up UPnP/IGD?",
- "component.upnp.config.step.confirm.title": "UPnP/IGD",
- "component.upnp.config.step.init.title": "UPnP/IGD",
- "component.upnp.config.step.user.data.enable_port_mapping":
- "Enable port mapping for Home Assistant",
- "component.upnp.config.step.user.data.enable_sensors":
- "Add traffic sensors",
- "component.upnp.config.step.user.data.igd": "UPnP/IGD",
- "component.upnp.config.step.user.title":
- "Configuration options for the UPnP/IGD",
- "component.upnp.config.title": "UPnP/IGD",
- "component.point.config.abort.already_setup":
- "You can only configure a Point account.",
- "component.point.config.abort.authorize_url_fail":
- "Unknown error generating an authorize url.",
- "component.point.config.abort.authorize_url_timeout":
- "Timeout generating authorize url.",
- "component.point.config.abort.external_setup":
- "Point successfully configured from another flow.",
- "component.point.config.abort.no_flows":
- "You need to configure Point before being able to authenticate with it. [Please read the instructions](https://www.home-assistant.io/integrations/point/).",
- "component.point.config.create_entry.default":
- "Successfully authenticated with Minut for your Point device(s)",
- "component.point.config.error.follow_link":
- "Please follow the link and authenticate before pressing Submit",
- "component.point.config.error.no_token": "Not authenticated with Minut",
- "component.point.config.step.auth.description":
- "Please follow the link below and Accept access to your Minut account, then come back and press Submit below.\n\n[Link]({authorization_url})",
- "component.point.config.step.auth.title": "Authenticate Point",
- "component.point.config.step.user.data.flow_impl": "Provider",
- "component.point.config.step.user.description":
- "Pick via which authentication provider you want to authenticate with Point.",
- "component.point.config.step.user.title": "Authentication Provider",
- "component.point.config.title": "Minut Point",
- "component.auth.mfa_setup.notify.abort.no_available_service":
- "No notification services available.",
- "component.auth.mfa_setup.notify.error.invalid_code":
- "Invalid code, please try again.",
- "component.auth.mfa_setup.notify.step.init.description":
- "Please select one of the notification services:",
- "component.auth.mfa_setup.notify.step.init.title":
- "Set up one-time password delivered by notify component",
- "component.auth.mfa_setup.notify.step.setup.description":
- "A one-time password has been sent via **notify.{notify_service}**. Please enter it below:",
- "component.auth.mfa_setup.notify.step.setup.title": "Verify setup",
- "component.auth.mfa_setup.notify.title": "Notify One-Time Password",
- "component.auth.mfa_setup.totp.error.invalid_code":
- "Invalid code, please try again. If you get this error consistently, please make sure the clock of your Home Assistant system is accurate.",
- "component.auth.mfa_setup.totp.step.init.description":
- "To activate two factor authentication using time-based one-time passwords, scan the QR code with your authentication app. If you don't have one, we recommend either [Google Authenticator](https://support.google.com/accounts/answer/1066447) or [Authy](https://authy.com/).\n\n{qr_code}\n\nAfter scanning the code, enter the six digit code from your app to verify the setup. If you have problems scanning the QR code, do a manual setup with code **`{code}`**.",
- "component.auth.mfa_setup.totp.step.init.title":
- "Set up two-factor authentication using TOTP",
- "component.auth.mfa_setup.totp.title": "TOTP",
- "component.emulated_roku.config.abort.name_exists": "Name already exists",
- "component.emulated_roku.config.step.user.data.advertise_ip":
- "Advertise IP",
- "component.emulated_roku.config.step.user.data.advertise_port":
- "Advertise port",
- "component.emulated_roku.config.step.user.data.host_ip": "Host IP",
- "component.emulated_roku.config.step.user.data.listen_port":
- "Listen port",
- "component.emulated_roku.config.step.user.data.name": "Name",
- "component.emulated_roku.config.step.user.data.upnp_bind_multicast":
- "Bind multicast (True/False)",
- "component.emulated_roku.config.step.user.title":
- "Define server configuration",
- "component.emulated_roku.config.title": "EmulatedRoku",
- "component.owntracks.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.owntracks.config.create_entry.default":
- "\n\nOn Android, open [the OwnTracks app]({android_url}), go to preferences -> connection. Change the following settings:\n - Mode: Private HTTP\n - Host: {webhook_url}\n - Identification:\n - Username: ``\n - Device ID: ``\n\nOn iOS, open [the OwnTracks app]({ios_url}), tap (i) icon in top left -> settings. Change the following settings:\n - Mode: HTTP\n - URL: {webhook_url}\n - Turn on authentication\n - UserID: ``\n\n{secret}\n\nSee [the documentation]({docs_url}) for more information.",
- "component.owntracks.config.step.user.description":
- "Are you sure you want to set up OwnTracks?",
- "component.owntracks.config.step.user.title": "Set up OwnTracks",
- "component.owntracks.config.title": "OwnTracks",
- "component.zone.config.error.name_exists": "Name already exists",
- "component.zone.config.step.init.data.icon": "Icon",
- "component.zone.config.step.init.data.latitude": "Latitude",
- "component.zone.config.step.init.data.longitude": "Longitude",
- "component.zone.config.step.init.data.name": "Name",
- "component.zone.config.step.init.data.passive": "Passive",
- "component.zone.config.step.init.data.radius": "Radius",
- "component.zone.config.step.init.title": "Define zone parameters",
- "component.zone.config.title": "Zone",
- "component.hue.config.abort.all_configured":
- "All Philips Hue bridges are already configured",
- "component.hue.config.abort.already_configured":
- "Bridge is already configured",
- "component.hue.config.abort.cannot_connect":
- "Unable to connect to the bridge",
- "component.hue.config.abort.discover_timeout":
- "Unable to discover Hue bridges",
- "component.hue.config.abort.no_bridges":
- "No Philips Hue bridges discovered",
- "component.hue.config.abort.unknown": "Unknown error occurred",
- "component.hue.config.error.linking": "Unknown linking error occurred.",
- "component.hue.config.error.register_failed":
- "Failed to register, please try again",
- "component.hue.config.step.init.data.host": "Host",
- "component.hue.config.step.init.title": "Pick Hue bridge",
- "component.hue.config.step.link.description":
- "Press the button on the bridge to register Philips Hue with Home Assistant.\n\n",
- "component.hue.config.step.link.title": "Link Hub",
- "component.hue.config.title": "Philips Hue",
- "component.tradfri.config.abort.already_configured":
- "Bridge is already configured",
- "component.tradfri.config.error.cannot_connect":
- "Unable to connect to the gateway.",
- "component.tradfri.config.error.invalid_key":
- "Failed to register with provided key. If this keeps happening, try restarting the gateway.",
- "component.tradfri.config.error.timeout": "Timeout validating the code.",
- "component.tradfri.config.step.auth.data.host": "Host",
- "component.tradfri.config.step.auth.data.security_code": "Security Code",
- "component.tradfri.config.step.auth.description":
- "You can find the security code on the back of your gateway.",
- "component.tradfri.config.step.auth.title": "Enter security code",
- "component.tradfri.config.title": "IKEA TRÅDFRI",
- "component.mqtt.config.abort.single_instance_allowed":
- "Only a single configuration of MQTT is allowed.",
- "component.mqtt.config.error.cannot_connect":
- "Unable to connect to the broker.",
- "component.mqtt.config.step.broker.data.broker": "Broker",
- "component.mqtt.config.step.broker.data.discovery": "Enable discovery",
- "component.mqtt.config.step.broker.data.password": "Password",
- "component.mqtt.config.step.broker.data.port": "Port",
- "component.mqtt.config.step.broker.data.username": "Username",
- "component.mqtt.config.step.broker.description":
- "Please enter the connection information of your MQTT broker.",
- "component.mqtt.config.step.broker.title": "MQTT",
- "component.mqtt.config.step.hassio_confirm.data.discovery":
- "Enable discovery",
- "component.mqtt.config.step.hassio_confirm.description":
- "Do you want to configure Home Assistant to connect to the MQTT broker provided by the hass.io add-on {addon}?",
- "component.mqtt.config.step.hassio_confirm.title":
- "MQTT Broker via Hass.io add-on",
- "component.mqtt.config.title": "MQTT",
- "component.geofency.config.abort.not_internet_accessible":
- "Your Home Assistant instance needs to be accessible from the internet to receive messages from Geofency.",
- "component.geofency.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.geofency.config.create_entry.default":
- "To send events to Home Assistant, you will need to setup the webhook feature in Geofency.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details.",
- "component.geofency.config.step.user.description":
- "Are you sure you want to set up the Geofency Webhook?",
- "component.geofency.config.step.user.title":
- "Set up the Geofency Webhook",
- "component.geofency.config.title": "Geofency Webhook",
- "component.simplisafe.config.error.identifier_exists":
- "Account already registered",
- "component.simplisafe.config.error.invalid_credentials":
- "Invalid credentials",
- "component.simplisafe.config.step.user.data.code":
- "Code (for Home Assistant)",
- "component.simplisafe.config.step.user.data.password": "Password",
- "component.simplisafe.config.step.user.data.username": "Email Address",
- "component.simplisafe.config.step.user.title": "Fill in your information",
- "component.simplisafe.config.title": "SimpliSafe",
- "component.dialogflow.config.abort.not_internet_accessible":
- "Your Home Assistant instance needs to be accessible from the internet to receive Dialogflow messages.",
- "component.dialogflow.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.dialogflow.config.create_entry.default":
- "To send events to Home Assistant, you will need to setup [webhook integration of Dialogflow]({dialogflow_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) for further details.",
- "component.dialogflow.config.step.user.description":
- "Are you sure you want to set up Dialogflow?",
- "component.dialogflow.config.step.user.title":
- "Set up the Dialogflow Webhook",
- "component.dialogflow.config.title": "Dialogflow",
- "component.deconz.config.abort.already_configured":
- "Bridge is already configured",
- "component.deconz.config.abort.no_bridges":
- "No deCONZ bridges discovered",
- "component.deconz.config.abort.one_instance_only":
- "Component only supports one deCONZ instance",
- "component.deconz.config.error.no_key": "Couldn't get an API key",
- "component.deconz.config.step.init.data.host": "Host",
- "component.deconz.config.step.init.data.port": "Port",
- "component.deconz.config.step.init.title": "Define deCONZ gateway",
- "component.deconz.config.step.link.description":
- 'Unlock your deCONZ gateway to register with Home Assistant.\n\n1. Go to deCONZ system settings\n2. Press "Unlock Gateway" button',
- "component.deconz.config.step.link.title": "Link with deCONZ",
- "component.deconz.config.step.options.data.allow_clip_sensor":
- "Allow importing virtual sensors",
- "component.deconz.config.step.options.data.allow_deconz_groups":
- "Allow importing deCONZ groups",
- "component.deconz.config.step.options.title":
- "Extra configuration options for deCONZ",
- "component.deconz.config.title": "deCONZ Zigbee gateway",
- "component.openuv.config.error.identifier_exists":
- "Coordinates already registered",
- "component.openuv.config.error.invalid_api_key": "Invalid API key",
- "component.openuv.config.step.user.data.api_key": "OpenUV API Key",
- "component.openuv.config.step.user.data.elevation": "Elevation",
- "component.openuv.config.step.user.data.latitude": "Latitude",
- "component.openuv.config.step.user.data.longitude": "Longitude",
- "component.openuv.config.step.user.title": "Fill in your information",
- "component.openuv.config.title": "OpenUV",
- "component.locative.config.title": "Locative Webhook",
- "component.locative.config.step.user.title":
- "Set up the Locative Webhook",
- "component.locative.config.step.user.description":
- "Are you sure you want to set up the Locative Webhook?",
- "component.locative.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.locative.config.abort.not_internet_accessible":
- "Your Home Assistant instance needs to be accessible from the internet to receive messages from Geofency.",
- "component.locative.config.create_entry.default":
- "To send locations to Home Assistant, you will need to setup the webhook feature in the Locative app.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details.",
- "component.ios.config.abort.single_instance_allowed":
- "Only a single configuration of Home Assistant iOS is necessary.",
- "component.ios.config.step.confirm.description":
- "Do you want to set up the Home Assistant iOS component?",
- "component.ios.config.step.confirm.title": "Home Assistant iOS",
- "component.ios.config.title": "Home Assistant iOS",
- "component.smhi.config.error.name_exists": "Name already exists",
- "component.smhi.config.error.wrong_location": "Location Sweden only",
- "component.smhi.config.step.user.data.latitude": "Latitude",
- "component.smhi.config.step.user.data.longitude": "Longitude",
- "component.smhi.config.step.user.data.name": "Name",
- "component.smhi.config.step.user.title": "Location in Sweden",
- "component.smhi.config.title": "Swedish weather service (SMHI)",
- "component.sonos.config.abort.no_devices_found":
- "No Sonos devices found on the network.",
- "component.sonos.config.abort.single_instance_allowed":
- "Only a single configuration of Sonos is necessary.",
- "component.sonos.config.step.confirm.description":
- "Do you want to set up Sonos?",
- "component.sonos.config.step.confirm.title": "Sonos",
- "component.sonos.config.title": "Sonos",
- "component.ifttt.config.abort.not_internet_accessible":
- "Your Home Assistant instance needs to be accessible from the internet to receive IFTTT messages.",
- "component.ifttt.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.ifttt.config.create_entry.default":
- 'To send events to Home Assistant, you will need to use the "Make a web request" action from the [IFTTT Webhook applet]({applet_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data.',
- "component.ifttt.config.step.user.description":
- "Are you sure you want to set up IFTTT?",
- "component.ifttt.config.step.user.title":
- "Set up the IFTTT Webhook Applet",
- "component.ifttt.config.title": "IFTTT",
- "component.twilio.config.abort.not_internet_accessible":
- "Your Home Assistant instance needs to be accessible from the internet to receive Twilio messages.",
- "component.twilio.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.twilio.config.create_entry.default":
- "To send events to Home Assistant, you will need to setup [Webhooks with Twilio]({twilio_url}).\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data.",
- "component.twilio.config.step.user.description":
- "Are you sure you want to set up Twilio?",
- "component.twilio.config.step.user.title": "Set up the Twilio Webhook",
- "component.twilio.config.title": "Twilio",
- "component.zha.config.abort.single_instance_allowed":
- "Only a single configuration of ZHA is allowed.",
- "component.zha.config.error.cannot_connect":
- "Unable to connect to ZHA device.",
- "component.zha.config.step.user.data.radio_type": "Radio Type",
- "component.zha.config.step.user.data.usb_path": "USB Device Path",
- "component.zha.config.step.user.title": "ZHA",
- "component.zha.config.title": "ZHA",
- "component.gpslogger.config.title": "GPSLogger Webhook",
- "component.gpslogger.config.step.user.title":
- "Set up the GPSLogger Webhook",
- "component.gpslogger.config.step.user.description":
- "Are you sure you want to set up the GPSLogger Webhook?",
- "component.gpslogger.config.abort.one_instance_allowed":
- "Only a single instance is necessary.",
- "component.gpslogger.config.abort.not_internet_accessible":
- "Your Home Assistant instance needs to be accessible from the internet to receive messages from GPSLogger.",
- "component.gpslogger.config.create_entry.default":
- "To send events to Home Assistant, you will need to setup the webhook feature in GPSLogger.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details.",
- "component.zwave.config.abort.already_configured":
- "Z-Wave is already configured",
- "component.zwave.config.abort.one_instance_only":
- "Component only supports one Z-Wave instance",
- "component.zwave.config.error.option_error":
- "Z-Wave validation failed. Is the path to the USB stick correct?",
- "component.zwave.config.step.user.data.network_key":
- "Network Key (leave blank to auto-generate)",
- "component.zwave.config.step.user.data.usb_path": "USB Path",
- "component.zwave.config.step.user.description":
- "See https://www.home-assistant.io/docs/z-wave/installation/ for information on the configuration variables",
- "component.zwave.config.step.user.title": "Set up Z-Wave",
- "component.zwave.config.title": "Z-Wave",
- "component.cast.config.abort.no_devices_found":
- "No Google Cast devices found on the network.",
- "component.cast.config.abort.single_instance_allowed":
- "Only a single configuration of Google Cast is necessary.",
- "component.cast.config.step.confirm.description":
- "Do you want to set up Google Cast?",
- "component.cast.config.step.confirm.title": "Google Cast",
- "component.cast.config.title": "Google Cast",
- },
+ resources: {},
}));
};
diff --git a/package.json b/package.json
index bf87bfd3c5..f1a4726a5b 100644
--- a/package.json
+++ b/package.json
@@ -171,7 +171,6 @@
"map-stream": "^0.0.7",
"merge-stream": "^1.0.1",
"mocha": "^6.0.2",
- "npm": "^6.14.4",
"parse5": "^5.1.0",
"prettier": "^2.0.4",
"raw-loader": "^2.0.0",
diff --git a/public/static/images/weather/night.png b/public/static/images/weather/night.png
index d7e79d2ac9..d7661fab3f 100644
Binary files a/public/static/images/weather/night.png and b/public/static/images/weather/night.png differ
diff --git a/public/static/images/weather/partly-cloudy.png b/public/static/images/weather/partly-cloudy.png
index a39a400ba1..6c59f6cc93 100644
Binary files a/public/static/images/weather/partly-cloudy.png and b/public/static/images/weather/partly-cloudy.png differ
diff --git a/public/static/images/weather/sunny.png b/public/static/images/weather/sunny.png
index 6c67835dce..671611b73b 100644
Binary files a/public/static/images/weather/sunny.png and b/public/static/images/weather/sunny.png differ
diff --git a/setup.py b/setup.py
index dd3fd6e59e..1ca66681c8 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name="home-assistant-frontend",
- version="20200414.0",
+ version="20200422.0",
description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors",
diff --git a/src/common/config/version.ts b/src/common/config/version.ts
index cc6ccf7f7f..50339b9a8f 100644
--- a/src/common/config/version.ts
+++ b/src/common/config/version.ts
@@ -1,3 +1,12 @@
+let curVersion: string | undefined;
+
+export const setHAVersion = (version: string) => {
+ curVersion = version;
+};
+
+export const atLeastCachedVersion = (major: number, minor: number) =>
+ curVersion !== undefined && atLeastVersion(curVersion, major, minor);
+
export const atLeastVersion = (
version: string,
major: number,
diff --git a/src/common/entity/compute_state_display.ts b/src/common/entity/compute_state_display.ts
index 2159a4e69a..4d03b81b9c 100644
--- a/src/common/entity/compute_state_display.ts
+++ b/src/common/entity/compute_state_display.ts
@@ -4,8 +4,10 @@ import { formatDateTime } from "../datetime/format_date_time";
import { formatTime } from "../datetime/format_time";
import { LocalizeFunc } from "../translations/localize";
import { computeStateDomain } from "./compute_state_domain";
+import { UNKNOWN, UNAVAILABLE } from "../../data/entity";
+import { atLeastCachedVersion } from "../config/version";
-export const computeStateDisplay = (
+const legacyComputeStateDisplay = (
localize: LocalizeFunc,
stateObj: HassEntity,
language: string
@@ -84,3 +86,64 @@ export const computeStateDisplay = (
return display;
};
+
+export const computeStateDisplay = (
+ localize: LocalizeFunc,
+ stateObj: HassEntity,
+ language: string
+): string => {
+ if (__BACKWARDS_COMPAT__ && !atLeastCachedVersion(0, 109)) {
+ return legacyComputeStateDisplay(localize, stateObj, language);
+ }
+
+ // Real code.
+ if (stateObj.state === UNKNOWN || stateObj.state === UNAVAILABLE) {
+ return localize(`state.default.${stateObj.state}`);
+ }
+
+ if (stateObj.attributes.unit_of_measurement) {
+ return `${stateObj.state} ${stateObj.attributes.unit_of_measurement}`;
+ }
+
+ const domain = computeStateDomain(stateObj);
+
+ if (domain === "input_datetime") {
+ let date: Date;
+ if (!stateObj.attributes.has_time) {
+ date = new Date(
+ stateObj.attributes.year,
+ stateObj.attributes.month - 1,
+ stateObj.attributes.day
+ );
+ return formatDate(date, language);
+ }
+ if (!stateObj.attributes.has_date) {
+ const now = new Date();
+ date = new Date(
+ // Due to bugs.chromium.org/p/chromium/issues/detail?id=797548
+ // don't use artificial 1970 year.
+ now.getFullYear(),
+ now.getMonth(),
+ now.getDay(),
+ stateObj.attributes.hour,
+ stateObj.attributes.minute
+ );
+ return formatTime(date, language);
+ }
+
+ date = new Date(
+ stateObj.attributes.year,
+ stateObj.attributes.month - 1,
+ stateObj.attributes.day,
+ stateObj.attributes.hour,
+ stateObj.attributes.minute
+ );
+ return formatDateTime(date, language);
+ }
+
+ const deviceClass = stateObj.attributes.device_class || "_";
+ return (
+ localize(`component.${domain}.state.${deviceClass}.${stateObj.state}`) ||
+ stateObj.state
+ );
+};
diff --git a/src/common/entity/cover_icon.ts b/src/common/entity/cover_icon.ts
index faa7e29890..25d3c265a9 100644
--- a/src/common/entity/cover_icon.ts
+++ b/src/common/entity/cover_icon.ts
@@ -32,7 +32,16 @@ export const coverIcon = (state: HassEntity): string => {
case "damper":
return open ? "hass:circle" : "hass:circle-slice-8";
case "shutter":
- return open ? "hass:window-shutter-open" : "hass:window-shutter";
+ switch (state.state) {
+ case "opening":
+ return "hass:arrow-up-box";
+ case "closing":
+ return "hass:arrow-down-box";
+ case "closed":
+ return "hass:window-shutter";
+ default:
+ return "hass:window-shutter-open";
+ }
case "blind":
case "curtain":
switch (state.state) {
diff --git a/src/common/search/search-input.ts b/src/common/search/search-input.ts
index c04395a8f5..46f3745335 100644
--- a/src/common/search/search-input.ts
+++ b/src/common/search/search-input.ts
@@ -22,6 +22,9 @@ class SearchInput extends LitElement {
@property({ type: Boolean, attribute: "no-underline" })
public noUnderline = false;
+ @property({ type: Boolean })
+ public autofocus = false;
+
public focus() {
this.shadowRoot!.querySelector("paper-input")!.focus();
}
@@ -38,7 +41,7 @@ class SearchInput extends LitElement {
- ${this.hass.localize(`component.${entry.domain}.config.title`)}:
+ ${this.hass.localize(`component.${entry.domain}.title`)}:
${entry.title}
`;
diff --git a/src/data/config_entries.ts b/src/data/config_entries.ts
index 9d5388c5bf..527838ff3b 100644
--- a/src/data/config_entries.ts
+++ b/src/data/config_entries.ts
@@ -10,6 +10,10 @@ export interface ConfigEntry {
supports_options: boolean;
}
+export interface ConfigEntryMutableParams {
+ title: string;
+}
+
export interface ConfigEntrySystemOptions {
disable_new_entities: boolean;
}
@@ -17,6 +21,17 @@ export interface ConfigEntrySystemOptions {
export const getConfigEntries = (hass: HomeAssistant) =>
hass.callApi("GET", "config/config_entries/entry");
+export const updateConfigEntry = (
+ hass: HomeAssistant,
+ configEntryId: string,
+ updatedValues: Partial
+) =>
+ hass.callWS({
+ type: "config_entries/update",
+ entry_id: configEntryId,
+ ...updatedValues,
+ });
+
export const deleteConfigEntry = (hass: HomeAssistant, configEntryId: string) =>
hass.callApi<{
require_restart: boolean;
diff --git a/src/data/config_flow.ts b/src/data/config_flow.ts
index 268e3e04ae..fb256ec0fa 100644
--- a/src/data/config_flow.ts
+++ b/src/data/config_flow.ts
@@ -3,6 +3,7 @@ import { LocalizeFunc } from "../common/translations/localize";
import { debounce } from "../common/util/debounce";
import { HomeAssistant } from "../types";
import { DataEntryFlowProgress, DataEntryFlowStep } from "./data_entry_flow";
+import { domainToName } from "./integration";
export const DISCOVERY_SOURCES = ["unignore", "homekit", "ssdp", "zeroconf"];
@@ -75,7 +76,7 @@ export const localizeConfigFlowTitle = (
const placeholders = flow.context.title_placeholders || {};
const placeholderKeys = Object.keys(placeholders);
if (placeholderKeys.length === 0) {
- return localize(`component.${flow.handler}.config.title`);
+ return domainToName(localize, flow.handler);
}
const args: string[] = [];
placeholderKeys.forEach((key) => {
diff --git a/src/data/integration.ts b/src/data/integration.ts
index f322e96f10..9290775bcd 100644
--- a/src/data/integration.ts
+++ b/src/data/integration.ts
@@ -1,10 +1,32 @@
import { LocalizeFunc } from "../common/translations/localize";
+import { HomeAssistant } from "../types";
-export const integrationDocsUrl = (domain: string) =>
- `https://www.home-assistant.io/integrations/${domain}`;
+export interface IntegrationManifest {
+ is_built_in: boolean;
+ domain: string;
+ name: string;
+ config_flow: boolean;
+ documentation: string;
+ dependencies?: string[];
+ after_dependencies?: string[];
+ codeowners?: string[];
+ requirements?: string[];
+ ssdp?: Array<{ manufacturer?: string; modelName?: string; st?: string }>;
+ zeroconf?: string[];
+ homekit?: { models: string[] };
+ quality_scale?: string;
+}
export const integrationIssuesUrl = (domain: string) =>
`https://github.com/home-assistant/home-assistant/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+${domain}%22`;
export const domainToName = (localize: LocalizeFunc, domain: string) =>
- localize(`domain.${domain}`) || domain;
+ localize(`component.${domain}.title`) || domain;
+
+export const fetchIntegrationManifests = (hass: HomeAssistant) =>
+ hass.callWS({ type: "manifest/list" });
+
+export const fetchIntegrationManifest = (
+ hass: HomeAssistant,
+ integration: string
+) => hass.callWS({ type: "manifest/get", integration });
diff --git a/src/data/mqtt.ts b/src/data/mqtt.ts
index d91b32ce13..d00f9f2415 100644
--- a/src/data/mqtt.ts
+++ b/src/data/mqtt.ts
@@ -7,6 +7,31 @@ export interface MQTTMessage {
retain: number;
}
+export interface MQTTTopicDebugInfo {
+ topic: string;
+ messages: MQTTMessage[];
+}
+
+export interface MQTTDiscoveryDebugInfo {
+ topic: string;
+ payload: string;
+}
+
+export interface MQTTEntityDebugInfo {
+ entity_id: string;
+ discovery_data: MQTTDiscoveryDebugInfo;
+ subscriptions: MQTTTopicDebugInfo[];
+}
+
+export interface MQTTTriggerDebugInfo {
+ discovery_data: MQTTDiscoveryDebugInfo;
+}
+
+export interface MQTTDeviceDebugInfo {
+ entities: MQTTEntityDebugInfo[];
+ triggers: MQTTTriggerDebugInfo[];
+}
+
export const subscribeMQTTTopic = (
hass: HomeAssistant,
topic: string,
@@ -26,3 +51,12 @@ export const removeMQTTDeviceEntry = (
type: "mqtt/device/remove",
device_id: deviceId,
});
+
+export const fetchMQTTDebugInfo = (
+ hass: HomeAssistant,
+ deviceId: string
+): Promise =>
+ hass.callWS({
+ type: "mqtt/device/debug_info",
+ device_id: deviceId,
+ });
diff --git a/src/data/system_log.ts b/src/data/system_log.ts
index 9257c31080..865558ebb9 100644
--- a/src/data/system_log.ts
+++ b/src/data/system_log.ts
@@ -19,4 +19,6 @@ export const fetchSystemLog = (hass: HomeAssistant) =>
export const getLoggedErrorIntegration = (item: LoggedError) =>
item.name.startsWith("homeassistant.components.")
? item.name.split(".")[2]
+ : item.name.startsWith("custom_components.")
+ ? item.name.split(".")[1]
: undefined;
diff --git a/src/data/translation.ts b/src/data/translation.ts
index f2ce1a7c1a..a713ccd256 100644
--- a/src/data/translation.ts
+++ b/src/data/translation.ts
@@ -11,6 +11,14 @@ declare global {
}
}
+export type TranslationCategory =
+ | "title"
+ | "state"
+ | "config"
+ | "options"
+ | "device_automation"
+ | "mfa_setup";
+
export const fetchTranslationPreferences = (hass: HomeAssistant) =>
fetchFrontendUserData(hass.connection, "language");
@@ -20,6 +28,23 @@ export const saveTranslationPreferences = (
) => saveFrontendUserData(hass.connection, "language", data);
export const getHassTranslations = async (
+ hass: HomeAssistant,
+ language: string,
+ category: TranslationCategory,
+ integration?: string,
+ config_flow?: boolean
+): Promise<{}> => {
+ const result = await hass.callWS<{ resources: {} }>({
+ type: "frontend/get_translations",
+ language,
+ category,
+ integration,
+ config_flow,
+ });
+ return result.resources;
+};
+
+export const getHassTranslationsPre109 = async (
hass: HomeAssistant,
language: string
): Promise<{}> => {
diff --git a/src/data/weather.ts b/src/data/weather.ts
index 3c7b2d351a..45b6423e37 100644
--- a/src/data/weather.ts
+++ b/src/data/weather.ts
@@ -1,24 +1,24 @@
-import { HomeAssistant } from "../types";
+import { HomeAssistant, WeatherEntity } from "../types";
export const weatherImages = {
"clear-night": "/static/images/weather/night.png",
cloudy: "/static/images/weather/cloudy.png",
- fog: "/static/images/weather/cloudy.png",
- hail: "/static/images/weather/rainy.png",
lightning: "/static/images/weather/lightning.png",
"lightning-rainy": "/static/images/weather/lightning-rainy.png",
partlycloudy: "/static/images/weather/partly-cloudy.png",
pouring: "/static/images/weather/pouring.png",
rainy: "/static/images/weather/rainy.png",
snowy: "/static/images/weather/snowy.png",
- "snowy-rainy": "/static/images/weather/rainy.png",
sunny: "/static/images/weather/sunny.png",
windy: "/static/images/weather/windy.png",
- "windy-variant": "/static/images/weather/windy.png",
};
export const weatherIcons = {
exceptional: "hass:alert-circle-outline",
+ fog: "hass:weather-fog",
+ hail: "hass:weather-hail",
+ "snowy-rainy": "hass:weather-snowy-rainy",
+ "windy-variant": "hass:weather-windy-variant",
};
export const cardinalDirections = [
@@ -78,3 +78,89 @@ export const getWeatherUnit = (
return hass.config.unit_system[measure] || "";
}
};
+
+export const getSecondaryWeatherAttribute = (
+ hass: HomeAssistant,
+ stateObj: WeatherEntity
+): string | undefined => {
+ const extrema = getWeatherExtrema(hass, stateObj);
+
+ if (extrema) {
+ return extrema;
+ }
+
+ let value: number;
+ let attribute: string;
+
+ if (
+ stateObj.attributes.forecast?.length &&
+ stateObj.attributes.forecast[0].precipitation !== undefined &&
+ stateObj.attributes.forecast[0].precipitation !== null
+ ) {
+ value = stateObj.attributes.forecast[0].precipitation!;
+ attribute = "precipitation";
+ } else if ("humidity" in stateObj.attributes) {
+ value = stateObj.attributes.humidity!;
+ attribute = "humidity";
+ } else {
+ return undefined;
+ }
+
+ return `
+ ${hass!.localize(
+ `ui.card.weather.attributes.${attribute}`
+ )} ${value} ${getWeatherUnit(hass!, attribute)}
+ `;
+};
+
+const getWeatherExtrema = (
+ hass: HomeAssistant,
+ stateObj: WeatherEntity
+): string | undefined => {
+ if (!stateObj.attributes.forecast?.length) {
+ return undefined;
+ }
+
+ let tempLow: number | undefined;
+ let tempHigh: number | undefined;
+ const today = new Date().getDate();
+
+ for (const forecast of stateObj.attributes.forecast!) {
+ if (new Date(forecast.datetime).getDate() !== today) {
+ break;
+ }
+ if (!tempHigh || forecast.temperature > tempHigh) {
+ tempHigh = forecast.temperature;
+ }
+ if (!tempLow || (forecast.templow && forecast.templow < tempLow)) {
+ tempLow = forecast.templow;
+ }
+ if (!forecast.templow && (!tempLow || forecast.temperature < tempLow)) {
+ tempLow = forecast.temperature;
+ }
+ }
+
+ if (!tempLow && !tempHigh) {
+ return undefined;
+ }
+
+ const unit = getWeatherUnit(hass!, "temperature");
+
+ return `
+ ${
+ tempHigh
+ ? `
+ ${hass!.localize(`ui.card.weather.high`)} ${tempHigh} ${unit}
+ `
+ : ""
+ }
+ ${tempLow && tempHigh ? " / " : ""}
+ ${
+ tempLow
+ ? `
+ ${hass!.localize(`ui.card.weather.low`)} ${tempLow} ${unit}
+ `
+ : ""
+ }
+ `;
+};
diff --git a/src/data/zha.ts b/src/data/zha.ts
index 0507747150..af8f79be8d 100644
--- a/src/data/zha.ts
+++ b/src/data/zha.ts
@@ -23,6 +23,7 @@ export interface ZHADevice {
power_source?: string;
area_id?: string;
device_type: string;
+ signature: any;
}
export interface Attribute {
diff --git a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts
index bd4270ca67..5ee5bfd538 100644
--- a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts
+++ b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts
@@ -66,7 +66,7 @@ class DialogConfigEntrySystemOptions extends LitElement {
"ui.dialogs.config_entry_system_options.title",
"integration",
this.hass.localize(
- `component.${this._params.entry.domain}.config.title`
+ `component.${this._params.entry.domain}.title`
) || this._params.entry.domain
)}
@@ -98,7 +98,7 @@ class DialogConfigEntrySystemOptions extends LitElement {
"ui.dialogs.config_entry_system_options.enable_new_entities_description",
"integration",
this.hass.localize(
- `component.${this._params.entry.domain}.config.title`
+ `component.${this._params.entry.domain}.title`
) || this._params.entry.domain
)}
diff --git a/src/dialogs/config-flow/show-dialog-config-flow.ts b/src/dialogs/config-flow/show-dialog-config-flow.ts
index 5a044a2239..46c9657b47 100644
--- a/src/dialogs/config-flow/show-dialog-config-flow.ts
+++ b/src/dialogs/config-flow/show-dialog-config-flow.ts
@@ -13,6 +13,7 @@ import {
loadDataEntryFlowDialog,
showFlowDialog,
} from "./show-dialog-data-entry-flow";
+import { domainToName } from "../../data/integration";
export const loadConfigFlowDialog = loadDataEntryFlowDialog;
@@ -22,17 +23,31 @@ export const showConfigFlowDialog = (
): void =>
showFlowDialog(element, dialogParams, {
loadDevicesAndAreas: true,
- getFlowHandlers: (hass) =>
- getConfigFlowHandlers(hass).then((handlers) =>
- handlers.sort((handlerA, handlerB) =>
- caseInsensitiveCompare(
- hass.localize(`component.${handlerA}.config.title`),
- hass.localize(`component.${handlerB}.config.title`)
- )
+ getFlowHandlers: async (hass) => {
+ const [handlers] = await Promise.all([
+ getConfigFlowHandlers(hass),
+ hass.loadBackendTranslation("title", undefined, true),
+ ]);
+
+ return handlers.sort((handlerA, handlerB) =>
+ caseInsensitiveCompare(
+ domainToName(hass.localize, handlerA),
+ domainToName(hass.localize, handlerB)
)
- ),
- createFlow: createConfigFlow,
- fetchFlow: fetchConfigFlow,
+ );
+ },
+ createFlow: async (hass, handler) => {
+ const [step] = await Promise.all([
+ createConfigFlow(hass, handler),
+ hass.loadBackendTranslation("config", handler),
+ ]);
+ return step;
+ },
+ fetchFlow: async (hass, flowId) => {
+ const step = await fetchConfigFlow(hass, flowId);
+ await hass.loadBackendTranslation("config", step.handler);
+ return step;
+ },
handleFlowStep: handleConfigFlowStep,
deleteFlow: deleteConfigFlow,
@@ -49,8 +64,10 @@ export const showConfigFlowDialog = (
},
renderShowFormStepHeader(hass, step) {
- return hass.localize(
- `component.${step.handler}.config.step.${step.step_id}.title`
+ return (
+ hass.localize(
+ `component.${step.handler}.config.step.${step.step_id}.title`
+ ) || hass.localize(`component.${step.handler}.title`)
);
},
diff --git a/src/dialogs/config-flow/show-dialog-options-flow.ts b/src/dialogs/config-flow/show-dialog-options-flow.ts
index d2ccebecc2..3df7e19f2d 100644
--- a/src/dialogs/config-flow/show-dialog-options-flow.ts
+++ b/src/dialogs/config-flow/show-dialog-options-flow.ts
@@ -25,8 +25,20 @@ export const showOptionsFlowDialog = (
},
{
loadDevicesAndAreas: false,
- createFlow: createOptionsFlow,
- fetchFlow: fetchOptionsFlow,
+ createFlow: async (hass, handler) => {
+ const [step] = await Promise.all([
+ createOptionsFlow(hass, handler),
+ hass.loadBackendTranslation("options", configEntry.domain),
+ ]);
+ return step;
+ },
+ fetchFlow: async (hass, flowId) => {
+ const [step] = await Promise.all([
+ fetchOptionsFlow(hass, flowId),
+ hass.loadBackendTranslation("options", configEntry.domain),
+ ]);
+ return step;
+ },
handleFlowStep: handleOptionsFlowStep,
deleteFlow: deleteOptionsFlow,
diff --git a/src/dialogs/config-flow/step-flow-pick-handler.ts b/src/dialogs/config-flow/step-flow-pick-handler.ts
index b060069e31..bf7a64c585 100644
--- a/src/dialogs/config-flow/step-flow-pick-handler.ts
+++ b/src/dialogs/config-flow/step-flow-pick-handler.ts
@@ -20,6 +20,8 @@ import "../../components/ha-icon-next";
import { HomeAssistant } from "../../types";
import { FlowConfig } from "./show-dialog-data-entry-flow";
import { configFlowContentStyles } from "./styles";
+import { domainToName } from "../../data/integration";
+import { LocalizeFunc } from "../../common/translations/localize";
interface HandlerObj {
name: string;
@@ -40,36 +42,42 @@ class StepFlowPickHandler extends LitElement {
private _width?: number;
- private _getHandlers = memoizeOne((h: string[], filter?: string) => {
- const handlers: HandlerObj[] = h.map((handler) => {
- return {
- name:
- this.hass.localize(`component.${handler}.config.title`) || handler,
- slug: handler,
- };
- });
+ private _getHandlers = memoizeOne(
+ (h: string[], filter?: string, _localize?: LocalizeFunc) => {
+ const handlers: HandlerObj[] = h.map((handler) => {
+ return {
+ name: domainToName(this.hass.localize, handler),
+ slug: handler,
+ };
+ });
- if (filter) {
- const options: Fuse.FuseOptions = {
- keys: ["name", "slug"],
- caseSensitive: false,
- minMatchCharLength: 2,
- threshold: 0.2,
- };
- const fuse = new Fuse(handlers, options);
- return fuse.search(filter);
+ if (filter) {
+ const options: Fuse.FuseOptions = {
+ keys: ["name", "slug"],
+ caseSensitive: false,
+ minMatchCharLength: 2,
+ threshold: 0.2,
+ };
+ const fuse = new Fuse(handlers, options);
+ return fuse.search(filter);
+ }
+ return handlers.sort((a, b) =>
+ a.name.toUpperCase() < b.name.toUpperCase() ? -1 : 1
+ );
}
- return handlers.sort((a, b) =>
- a.name.toUpperCase() < b.name.toUpperCase() ? -1 : 1
- );
- });
+ );
protected render(): TemplateResult {
- const handlers = this._getHandlers(this.handlers, this.filter);
+ const handlers = this._getHandlers(
+ this.handlers,
+ this.filter,
+ this.hass.localize
+ );
return html`
${this.hass.localize("ui.panel.config.integrations.new")}
@@ -88,9 +96,6 @@ class StepFlowPickHandler extends LitElement {
slot="item-icon"
loading="lazy"
src="https://brands.home-assistant.io/_/${handler.slug}/icon.png"
- srcset="
- https://brands.home-assistant.io/_/${handler.slug}/icon@2x.png 2x
- "
referrerpolicy="no-referrer"
/>
diff --git a/src/dialogs/domain-toggler/dialog-domain-toggler.ts b/src/dialogs/domain-toggler/dialog-domain-toggler.ts
index 3d27b4f089..14fac5294f 100644
--- a/src/dialogs/domain-toggler/dialog-domain-toggler.ts
+++ b/src/dialogs/domain-toggler/dialog-domain-toggler.ts
@@ -12,6 +12,7 @@ import { PolymerChangedEvent } from "../../polymer-types";
import { haStyleDialog } from "../../resources/styles";
import { HomeAssistant } from "../../types";
import { HaDomainTogglerDialogParams } from "./show-dialog-domain-toggler";
+import { domainToName } from "../../data/integration";
@customElement("dialog-domain-toggler")
class DomainTogglerDialog extends LitElement {
@@ -29,7 +30,7 @@ class DomainTogglerDialog extends LitElement {
}
const domains = this._params.domains
- .map((domain) => [this.hass.localize(`domain.${domain}`), domain])
+ .map((domain) => [domainToName(this.hass.localize, domain), domain])
.sort();
return html`
diff --git a/src/dialogs/mqtt-device-debug-info-dialog/dialog-mqtt-device-debug-info.ts b/src/dialogs/mqtt-device-debug-info-dialog/dialog-mqtt-device-debug-info.ts
new file mode 100644
index 0000000000..80ce1a52ef
--- /dev/null
+++ b/src/dialogs/mqtt-device-debug-info-dialog/dialog-mqtt-device-debug-info.ts
@@ -0,0 +1,215 @@
+import {
+ LitElement,
+ css,
+ html,
+ CSSResult,
+ TemplateResult,
+ customElement,
+ property,
+} from "lit-element";
+import "../../components/ha-dialog";
+import "../../components/ha-switch";
+import { computeDeviceName } from "../../data/device_registry";
+import { computeStateName } from "../../common/entity/compute_state_name";
+import { haStyleDialog } from "../../resources/styles";
+import type { HaSwitch } from "../../components/ha-switch";
+import { HomeAssistant } from "../../types";
+import { MQTTDeviceDebugInfoDialogParams } from "./show-dialog-mqtt-device-debug-info";
+import { MQTTDeviceDebugInfo, fetchMQTTDebugInfo } from "../../data/mqtt";
+import "./mqtt-messages";
+import "./mqtt-discovery-payload";
+
+@customElement("dialog-mqtt-device-debug-info")
+class DialogMQTTDeviceDebugInfo extends LitElement {
+ public hass!: HomeAssistant;
+
+ @property() private _params?: MQTTDeviceDebugInfoDialogParams;
+
+ @property() private _debugInfo?: MQTTDeviceDebugInfo;
+
+ @property() private _showAsYaml = true;
+
+ @property() private _showDeserialized = true;
+
+ public async showDialog(
+ params: MQTTDeviceDebugInfoDialogParams
+ ): Promise {
+ this._params = params;
+ fetchMQTTDebugInfo(this.hass, params.device.id).then((results) => {
+ this._debugInfo = results;
+ });
+ }
+
+ protected render(): TemplateResult {
+ if (!this._params || !this._debugInfo) {
+ return html``;
+ }
+
+ return html`
+
+
+ ${this.hass!.localize(
+ "ui.dialogs.mqtt_device_debug_info.payload_display"
+ )}
+
+
+ ${this.hass!.localize(
+ "ui.dialogs.mqtt_device_debug_info.deserialize"
+ )}
+
+
+ ${this.hass!.localize(
+ "ui.dialogs.mqtt_device_debug_info.show_as_yaml"
+ )}
+
+
+ ${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.entities")}
+
+
+ ${this._debugInfo.entities.length
+ ? this._renderEntities()
+ : html`
+ ${this.hass!.localize(
+ "ui.dialogs.mqtt_device_debug_info.no_entities"
+ )}
+ `}
+
+
+ ${this.hass!.localize("ui.dialogs.mqtt_device_debug_info.triggers")}
+
+
+ ${this._debugInfo.triggers.length
+ ? this._renderTriggers()
+ : html`
+ ${this.hass!.localize(
+ "ui.dialogs.mqtt_device_debug_info.no_triggers"
+ )}
+ `}
+
+
+ ${this.hass!.localize("ui.dialogs.generic.close")}
+
+
+ `;
+ }
+
+ private _close(): void {
+ this._params = undefined;
+ this._debugInfo = undefined;
+ }
+
+ private _showAsYamlChanged(ev: Event): void {
+ this._showAsYaml = (ev.target as HaSwitch).checked;
+ }
+
+ private _showDeserializedChanged(ev: Event): void {
+ this._showDeserialized = (ev.target as HaSwitch).checked;
+ }
+
+ private _renderEntities(): TemplateResult {
+ return html`
+ ${this._debugInfo!.entities.map(
+ (entity) => html`
+
+ '${computeStateName(this.hass.states[entity.entity_id])}'
+ (${entity.entity_id}
)
+
MQTT discovery data:
+
+ -
+ Topic:
+
${entity.discovery_data.topic}
+
+ -
+
+
+
+
+ Subscribed topics:
+
+ ${entity.subscriptions.map(
+ (topic) => html`
+ -
+
${topic.topic}
+
+
+
+ `
+ )}
+
+
+ `
+ )}
+ `;
+ }
+
+ private _renderTriggers(): TemplateResult {
+ return html`
+ ${this._debugInfo!.triggers.map(
+ (trigger) => html`
+
+ Discovery topic:
+ ${trigger.discovery_data.topic}
+
+
+
+ `
+ )}
+ `;
+ }
+
+ static get styles(): CSSResult[] {
+ return [
+ haStyleDialog,
+ css`
+ ha-dialog {
+ --mdc-dialog-max-width: 95%;
+ --mdc-dialog-min-width: 640px;
+ }
+ ha-switch {
+ margin: 16px;
+ }
+ `,
+ ];
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "dialog-mqtt-device-debug-info": DialogMQTTDeviceDebugInfo;
+ }
+}
diff --git a/src/dialogs/mqtt-device-debug-info-dialog/mqtt-discovery-payload.ts b/src/dialogs/mqtt-device-debug-info-dialog/mqtt-discovery-payload.ts
new file mode 100644
index 0000000000..b000f5499a
--- /dev/null
+++ b/src/dialogs/mqtt-device-debug-info-dialog/mqtt-discovery-payload.ts
@@ -0,0 +1,49 @@
+import {
+ LitElement,
+ html,
+ TemplateResult,
+ customElement,
+ property,
+} from "lit-element";
+import { safeDump } from "js-yaml";
+
+@customElement("mqtt-discovery-payload")
+class MQTTDiscoveryPayload extends LitElement {
+ @property() public payload!: object;
+
+ @property() public showAsYaml = false;
+
+ @property() public summary!: string;
+
+ @property() private _open = false;
+
+ protected render(): TemplateResult {
+ return html`
+
+
+ ${this.summary}
+
+ ${this._open ? this._renderPayload() : ""}
+
+ `;
+ }
+
+ private _renderPayload(): TemplateResult {
+ const payload = this.payload;
+ return html`
+ ${this.showAsYaml
+ ? html` ${safeDump(payload)}
`
+ : html` ${JSON.stringify(payload, null, 2)}
`}
+ `;
+ }
+
+ private _handleToggle(ev) {
+ this._open = ev.target.open;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "mqtt-discovery-payload": MQTTDiscoveryPayload;
+ }
+}
diff --git a/src/dialogs/mqtt-device-debug-info-dialog/mqtt-messages.ts b/src/dialogs/mqtt-device-debug-info-dialog/mqtt-messages.ts
new file mode 100644
index 0000000000..c3f3b799ef
--- /dev/null
+++ b/src/dialogs/mqtt-device-debug-info-dialog/mqtt-messages.ts
@@ -0,0 +1,130 @@
+import {
+ LitElement,
+ html,
+ TemplateResult,
+ customElement,
+ property,
+} from "lit-element";
+import { safeDump } from "js-yaml";
+import { MQTTMessage } from "../../data/mqtt";
+
+@customElement("mqtt-messages")
+class MQTTMessages extends LitElement {
+ @property() public messages!: MQTTMessage[];
+
+ @property() public showAsYaml = false;
+
+ @property() public showDeserialized = false;
+
+ @property() public subscribedTopic!: string;
+
+ @property() public summary!: string;
+
+ @property() private _open = false;
+
+ @property() private _payloadsJson = new WeakMap();
+
+ @property() private _showTopic = false;
+
+ protected firstUpdated(): void {
+ this.messages.forEach((message) => {
+ // If any message's topic differs from the subscribed topic, show topics + payload
+ if (this.subscribedTopic !== message.topic) {
+ this._showTopic = true;
+ }
+ });
+ }
+
+ protected render(): TemplateResult {
+ return html`
+
+
+ ${this.summary}
+
+ ${this._open
+ ? html`
+
+ ${this.messages.map(
+ (message) => html`
+ -
+ ${this._renderSingleMessage(message)}
+
+ `
+ )}
+
+ `
+ : ""}
+
+ `;
+ }
+
+ private _renderSingleMessage(message): TemplateResult {
+ const topic = message.topic;
+ return this._showTopic
+ ? html`
+
+ -
+ Topic: ${topic}
+
+ -
+ Payload: ${this._renderSinglePayload(message)}
+
+
+ `
+ : this._renderSinglePayload(message);
+ }
+
+ private _renderSinglePayload(message): TemplateResult {
+ let json;
+
+ if (this.showDeserialized) {
+ if (!this._payloadsJson.has(message)) {
+ json = this._tryParseJson(message.payload);
+ this._payloadsJson.set(message, json);
+ } else {
+ json = this._payloadsJson.get(message);
+ }
+ }
+
+ return json
+ ? html`
+ ${this.showAsYaml
+ ? html` ${safeDump(json)}
`
+ : html` ${JSON.stringify(json, null, 2)}
`}
+ `
+ : html` ${message.payload}
`;
+ }
+
+ private _tryParseJson(payload) {
+ let jsonPayload = null;
+ let o = payload;
+
+ // If the payload is a string, determine if the payload is valid JSON and if it
+ // is, assign the object representation to this._payloadJson.
+ if (typeof payload === "string") {
+ try {
+ o = JSON.parse(payload);
+ } catch (e) {
+ o = null;
+ }
+ }
+ // Handle non-exception-throwing cases:
+ // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
+ // but... JSON.parse(null) returns null, and typeof null === "object",
+ // so we must check for that, too. Thankfully, null is falsey, so this suffices:
+ if (o && typeof o === "object") {
+ jsonPayload = o;
+ }
+ return jsonPayload;
+ }
+
+ private _handleToggle(ev) {
+ this._open = ev.target.open;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "mqtt-messages": MQTTMessages;
+ }
+}
diff --git a/src/dialogs/mqtt-device-debug-info-dialog/show-dialog-mqtt-device-debug-info.ts b/src/dialogs/mqtt-device-debug-info-dialog/show-dialog-mqtt-device-debug-info.ts
new file mode 100644
index 0000000000..92fe6554cc
--- /dev/null
+++ b/src/dialogs/mqtt-device-debug-info-dialog/show-dialog-mqtt-device-debug-info.ts
@@ -0,0 +1,22 @@
+import { fireEvent } from "../../common/dom/fire_event";
+import { DeviceRegistryEntry } from "../../data/device_registry";
+
+export interface MQTTDeviceDebugInfoDialogParams {
+ device: DeviceRegistryEntry;
+}
+
+export const loadMQTTDeviceDebugInfoDialog = () =>
+ import(
+ /* webpackChunkName: "dialog-mqtt-device-debug-info" */ "./dialog-mqtt-device-debug-info"
+ );
+
+export const showMQTTDeviceDebugInfoDialog = (
+ element: HTMLElement,
+ mqttDeviceInfoParams: MQTTDeviceDebugInfoDialogParams
+): void => {
+ fireEvent(element, "show-dialog", {
+ dialogTag: "dialog-mqtt-device-debug-info",
+ dialogImport: loadMQTTDeviceDebugInfoDialog,
+ dialogParams: mqttDeviceInfoParams,
+ });
+};
diff --git a/src/dialogs/notifications/configurator-notification-item.ts b/src/dialogs/notifications/configurator-notification-item.ts
index 0c556dfc68..178ebeff97 100644
--- a/src/dialogs/notifications/configurator-notification-item.ts
+++ b/src/dialogs/notifications/configurator-notification-item.ts
@@ -10,6 +10,7 @@ import { fireEvent } from "../../common/dom/fire_event";
import { PersitentNotificationEntity } from "../../data/persistent_notification";
import { HomeAssistant } from "../../types";
import "./notification-item-template";
+import { domainToName } from "../../data/integration";
@customElement("configurator-notification-item")
export class HuiConfiguratorNotificationItem extends LitElement {
@@ -24,7 +25,9 @@ export class HuiConfiguratorNotificationItem extends LitElement {
return html`
- ${this.hass.localize("domain.configurator")}
+
+ ${domainToName(this.hass.localize, "configurator")}
+
${this.hass.localize(
diff --git a/src/dialogs/zha-device-zigbee-signature-dialog/dialog-zha-device-zigbee-info.ts b/src/dialogs/zha-device-zigbee-signature-dialog/dialog-zha-device-zigbee-info.ts
new file mode 100644
index 0000000000..0ba57e4c40
--- /dev/null
+++ b/src/dialogs/zha-device-zigbee-signature-dialog/dialog-zha-device-zigbee-info.ts
@@ -0,0 +1,70 @@
+import {
+ CSSResult,
+ customElement,
+ html,
+ LitElement,
+ property,
+ TemplateResult,
+} from "lit-element";
+import "../../components/ha-code-editor";
+import { createCloseHeading } from "../../components/ha-dialog";
+import { haStyleDialog } from "../../resources/styles";
+import { HomeAssistant } from "../../types";
+import { ZHADeviceZigbeeInfoDialogParams } from "./show-dialog-zha-device-zigbee-info";
+
+@customElement("dialog-zha-device-zigbee-info")
+class DialogZHADeviceZigbeeInfo extends LitElement {
+ @property() public hass!: HomeAssistant;
+
+ @property() private _signature: any;
+
+ public async showDialog(
+ params: ZHADeviceZigbeeInfoDialogParams
+ ): Promise
{
+ this._signature = JSON.stringify(
+ {
+ ...params.device.signature,
+ manufacturer: params.device.manufacturer,
+ model: params.device.model,
+ class: params.device.quirk_class,
+ },
+ null,
+ 2
+ );
+ }
+
+ protected render(): TemplateResult {
+ if (!this._signature) {
+ return html``;
+ }
+
+ return html`
+
+
+
+
+ `;
+ }
+
+ private _close(): void {
+ this._signature = undefined;
+ }
+
+ static get styles(): CSSResult {
+ return haStyleDialog;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "dialog-zha-device-zigbee-info": DialogZHADeviceZigbeeInfo;
+ }
+}
diff --git a/src/dialogs/zha-device-zigbee-signature-dialog/show-dialog-zha-device-zigbee-info.ts b/src/dialogs/zha-device-zigbee-signature-dialog/show-dialog-zha-device-zigbee-info.ts
new file mode 100644
index 0000000000..26df394b7a
--- /dev/null
+++ b/src/dialogs/zha-device-zigbee-signature-dialog/show-dialog-zha-device-zigbee-info.ts
@@ -0,0 +1,22 @@
+import { fireEvent } from "../../common/dom/fire_event";
+import { ZHADevice } from "../../data/zha";
+
+export interface ZHADeviceZigbeeInfoDialogParams {
+ device: ZHADevice;
+}
+
+export const loadZHADeviceZigbeeInfoDialog = () =>
+ import(
+ /* webpackChunkName: "dialog-zha-device-zigbee-info" */ "./dialog-zha-device-zigbee-info"
+ );
+
+export const showZHADeviceZigbeeInfoDialog = (
+ element: HTMLElement,
+ zhaDeviceZigbeeInfoParams: ZHADeviceZigbeeInfoDialogParams
+): void => {
+ fireEvent(element, "show-dialog", {
+ dialogTag: "dialog-zha-device-zigbee-info",
+ dialogImport: loadZHADeviceZigbeeInfoDialog,
+ dialogParams: zhaDeviceZigbeeInfoParams,
+ });
+};
diff --git a/src/layouts/hass-tabs-subpage-data-table.ts b/src/layouts/hass-tabs-subpage-data-table.ts
index d761ec0e6c..add5bc19d3 100644
--- a/src/layouts/hass-tabs-subpage-data-table.ts
+++ b/src/layouts/hass-tabs-subpage-data-table.ts
@@ -17,6 +17,9 @@ import type {
import type { HomeAssistant, Route } from "../types";
import "./hass-tabs-subpage";
import type { PageNavigation } from "./hass-tabs-subpage";
+import "@material/mwc-button/mwc-button";
+import { navigate } from "../common/navigate";
+import "@polymer/paper-tooltip/paper-tooltip";
@customElement("hass-tabs-subpage-data-table")
export class HaTabsSubpageDataTable extends LitElement {
@@ -62,6 +65,12 @@ export class HaTabsSubpageDataTable extends LitElement {
*/
@property({ type: String }) public filter = "";
+ /**
+ * List of strings that show what the data is currently filtered by.
+ * @type {Array}
+ */
+ @property({ type: Array }) public activeFilters?;
+
/**
* What path to use when the back button is pressed.
* @type {String}
@@ -118,6 +127,24 @@ export class HaTabsSubpageDataTable extends LitElement {
no-underline
@value-changed=${this._handleSearchChange}
>
+ ${this.activeFilters
+ ? html`
+
+
+
+ ${this.hass.localize(
+ "ui.panel.config.filtering.filtering_by"
+ )}
+ ${this.activeFilters.join(", ")}
+
+
+
${this.hass.localize(
+ "ui.panel.config.filtering.clear"
+ )}
+
`
+ : ""}
@@ -143,8 +170,24 @@ export class HaTabsSubpageDataTable extends LitElement {
no-label-float
no-underline
@value-changed=${this._handleSearchChange}
- >
+ >
+
+ ${this.activeFilters
+ ? html`
+ ${this.hass.localize(
+ "ui.panel.config.filtering.filtering_by"
+ )}
+ ${this.activeFilters.join(", ")}
+ ${this.hass.localize(
+ "ui.panel.config.filtering.clear"
+ )}
+
`
+ : ""}
+
`
: html` `}
@@ -157,6 +200,10 @@ export class HaTabsSubpageDataTable extends LitElement {
this.filter = ev.detail.value;
}
+ private _clearFilter() {
+ navigate(this, window.location.pathname);
+ }
+
static get styles(): CSSResult {
return css`
ha-data-table {
@@ -171,19 +218,54 @@ export class HaTabsSubpageDataTable extends LitElement {
.table-header {
border-bottom: 1px solid rgba(var(--rgb-primary-text-color), 0.12);
padding: 0 16px;
+ display: flex;
+ align-items: center;
}
.search-toolbar {
+ display: flex;
+ align-items: center;
color: var(--secondary-text-color);
padding: 0 16px;
}
search-input {
position: relative;
top: 2px;
+ flex-grow: 1;
}
search-input.header {
left: -8px;
top: -7px;
}
+ .active-filters {
+ color: var(--primary-text-color);
+ position: relative;
+ display: flex;
+ align-items: center;
+ padding: 2px 2px 2px 8px;
+ margin-left: 4px;
+ font-size: 14px;
+ }
+ .active-filters ha-icon {
+ color: var(--primary-color);
+ }
+ .active-filters mwc-button {
+ margin-left: 8px;
+ }
+ .active-filters::before {
+ background-color: var(--primary-color);
+ opacity: 0.12;
+ border-radius: 4px;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ content: "";
+ }
+ .search-toolbar .active-filters {
+ top: -8px;
+ right: -16px;
+ }
`;
}
}
diff --git a/src/layouts/home-assistant.ts b/src/layouts/home-assistant.ts
index 97b908001f..cef1dd0733 100644
--- a/src/layouts/home-assistant.ts
+++ b/src/layouts/home-assistant.ts
@@ -12,6 +12,7 @@ import {
} from "../util/register-service-worker";
import "./ha-init-page";
import "./home-assistant-main";
+import { setHAVersion } from "../common/config/version";
export class HomeAssistantAppEl extends HassElement {
@property() private _route?: Route;
@@ -67,6 +68,15 @@ export class HomeAssistantAppEl extends HassElement {
}
}
+ protected hassConnected() {
+ super.hassConnected();
+ if (__BACKWARDS_COMPAT__) {
+ setHAVersion(this.hass!.connection.haVersion);
+ }
+ // @ts-ignore
+ this._loadHassTranslations(this.hass!.language, "state");
+ }
+
protected hassReconnected() {
super.hassReconnected();
diff --git a/src/onboarding/action-badge.ts b/src/onboarding/action-badge.ts
new file mode 100644
index 0000000000..1e70df14ce
--- /dev/null
+++ b/src/onboarding/action-badge.ts
@@ -0,0 +1,89 @@
+import {
+ css,
+ CSSResult,
+ customElement,
+ html,
+ LitElement,
+ property,
+ TemplateResult,
+} from "lit-element";
+import "../components/ha-icon";
+
+@customElement("action-badge")
+class ActionBadge extends LitElement {
+ @property() public icon!: string;
+
+ @property() public title!: string;
+
+ @property() public badgeIcon?: string;
+
+ @property({ type: Boolean, reflect: true }) public clickable = false;
+
+ protected render(): TemplateResult {
+ return html`
+
+
+ ${this.badgeIcon
+ ? html` `
+ : ""}
+
+ ${this.title}
+ `;
+ }
+
+ static get styles(): CSSResult {
+ return css`
+ :host {
+ display: inline-flex;
+ flex-direction: column;
+ text-align: center;
+ color: var(--primary-text-color);
+ }
+
+ :host([clickable]) {
+ color: var(--primary-text-color);
+ }
+
+ .icon {
+ position: relative;
+ box-sizing: border-box;
+ margin: 0 auto 8px;
+ height: 40px;
+ width: 40px;
+ border-radius: 50%;
+ border: 1px solid var(--secondary-text-color);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ :host([clickable]) .icon {
+ border-color: var(--primary-color);
+ border-width: 2px;
+ }
+
+ .badge {
+ position: absolute;
+ color: var(--primary-color);
+ bottom: -5px;
+ right: -5px;
+ background-color: white;
+ border-radius: 50%;
+ width: 18px;
+ display: block;
+ height: 18px;
+ }
+
+ .title {
+ min-height: 2.3em;
+ word-break: break-word;
+ }
+ `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "action-badge": ActionBadge;
+ }
+}
diff --git a/src/onboarding/ha-onboarding.ts b/src/onboarding/ha-onboarding.ts
index c11e3a26c7..1bb279b465 100644
--- a/src/onboarding/ha-onboarding.ts
+++ b/src/onboarding/ha-onboarding.ts
@@ -27,6 +27,7 @@ import { HassElement } from "../state/hass-element";
import { registerServiceWorker } from "../util/register-service-worker";
import "./onboarding-create-user";
import "./onboarding-loading";
+import { HomeAssistant } from "../types";
interface OnboardingEvent {
type: T;
@@ -45,6 +46,8 @@ declare global {
@customElement("ha-onboarding")
class HaOnboarding extends litLocalizeLiteMixin(HassElement) {
+ @property() public hass?: HomeAssistant;
+
public translationFragment = "page-onboarding";
@property() private _loading = false;
@@ -102,6 +105,12 @@ class HaOnboarding extends litLocalizeLiteMixin(HassElement) {
if (changedProps.has("language")) {
document.querySelector("html")!.setAttribute("lang", this.language!);
}
+ if (changedProps.has("hass")) {
+ this.hassChanged(
+ this.hass!,
+ changedProps.get("hass") as HomeAssistant | undefined
+ );
+ }
}
private _curStep() {
diff --git a/src/onboarding/integration-badge.ts b/src/onboarding/integration-badge.ts
index 9588492d08..925440390d 100644
--- a/src/onboarding/integration-badge.ts
+++ b/src/onboarding/integration-badge.ts
@@ -11,7 +11,7 @@ import "../components/ha-icon";
@customElement("integration-badge")
class IntegrationBadge extends LitElement {
- @property() public icon!: string;
+ @property() public domain!: string;
@property() public title!: string;
@@ -22,7 +22,10 @@ class IntegrationBadge extends LitElement {
protected render(): TemplateResult {
return html`
-
+

${this.badgeIcon
? html`
`
: ""}
@@ -44,33 +47,35 @@ class IntegrationBadge extends LitElement {
color: var(--primary-text-color);
}
+ img {
+ max-width: 100%;
+ max-height: 100%;
+ }
+
.icon {
position: relative;
margin: 0 auto 8px;
height: 40px;
width: 40px;
- border-radius: 50%;
- border: 1px solid var(--secondary-text-color);
display: flex;
align-items: center;
justify-content: center;
}
:host([clickable]) .icon {
- border-color: var(--primary-color);
- border-width: 2px;
}
.badge {
position: absolute;
- color: var(--primary-color);
- bottom: -5px;
- right: -5px;
- background-color: white;
+ color: white;
+ bottom: -7px;
+ right: -10px;
+ background-color: var(--label-badge-green);
border-radius: 50%;
width: 18px;
display: block;
height: 18px;
+ border: 2px solid white;
}
.title {
diff --git a/src/onboarding/onboarding-integrations.ts b/src/onboarding/onboarding-integrations.ts
index 4ee2639e55..85ab7b2558 100644
--- a/src/onboarding/onboarding-integrations.ts
+++ b/src/onboarding/onboarding-integrations.ts
@@ -26,7 +26,9 @@ import {
showConfigFlowDialog,
} from "../dialogs/config-flow/show-dialog-config-flow";
import { HomeAssistant } from "../types";
+import "./action-badge";
import "./integration-badge";
+import { domainToName } from "../data/integration";
@customElement("onboarding-integrations")
class OnboardingIntegrations extends LitElement {
@@ -42,8 +44,15 @@ class OnboardingIntegrations extends LitElement {
public connectedCallback() {
super.connectedCallback();
+ this.hass.loadBackendTranslation("title", undefined, true);
this._unsubEvents = subscribeConfigFlowInProgress(this.hass, (flows) => {
this._discovered = flows;
+ for (const flow of flows) {
+ // To render title placeholders
+ if (flow.context.title_placeholders) {
+ this.hass.loadBackendTranslation("config", flow.handler);
+ }
+ }
});
}
@@ -62,15 +71,14 @@ class OnboardingIntegrations extends LitElement {
// Render discovered and existing entries together sorted by localized title.
const entries: Array<[string, TemplateResult]> = this._entries.map(
(entry) => {
- const title = this.hass.localize(
- `component.${entry.domain}.config.title`
- );
+ const title = domainToName(this.hass.localize, entry.domain);
return [
title,
html`
`,
];
@@ -85,8 +93,8 @@ class OnboardingIntegrations extends LitElement {
`,
@@ -104,13 +112,13 @@ class OnboardingIntegrations extends LitElement {
${content}