From 74413e07d0a01ec4a0efd76a845760dc82a6713b Mon Sep 17 00:00:00 2001
From: HomeAssistant Azure <hello@home-assistant.io>
Date: Fri, 31 Jan 2020 00:31:57 +0000
Subject: [PATCH] [ci skip] Translation update

---
 .../.translations/zh-Hant.json                |  20 +-
 .../binary_sensor/.translations/zh-Hant.json  | 172 +++++++++---------
 .../components/brother/.translations/ca.json  |   8 +
 .../climate/.translations/zh-Hant.json        |  12 +-
 .../cover/.translations/zh-Hant.json          |  24 +--
 .../components/deconz/.translations/ca.json   |   8 +-
 .../device_tracker/.translations/zh-Hant.json |   4 +-
 .../components/fan/.translations/zh-Hant.json |  12 +-
 .../garmin_connect/.translations/ca.json      |  24 +++
 .../components/gios/.translations/ca.json     |   3 +
 .../light/.translations/zh-Hant.json          |  14 +-
 .../components/linky/.translations/ca.json    |   1 +
 .../lock/.translations/zh-Hant.json           |  14 +-
 .../media_player/.translations/zh-Hant.json   |  10 +-
 .../components/mikrotik/.translations/ca.json |  33 ++++
 .../components/mikrotik/.translations/da.json |  37 ++++
 .../components/mikrotik/.translations/en.json |  44 ++---
 .../components/mikrotik/.translations/ru.json |  37 ++++
 .../components/netatmo/.translations/ca.json  |   3 +-
 .../components/point/.translations/ca.json    |   2 +-
 .../components/ring/.translations/ca.json     |   4 +
 .../samsungtv/.translations/ca.json           |   7 +
 .../sensor/.translations/zh-Hant.json         |  36 ++--
 .../components/soma/.translations/ca.json     |   2 +-
 .../components/somfy/.translations/ca.json    |   4 +-
 .../components/spotify/.translations/ca.json  |  18 ++
 .../switch/.translations/zh-Hant.json         |  18 +-
 .../tellduslive/.translations/ca.json         |   2 +-
 .../vacuum/.translations/zh-Hant.json         |  12 +-
 .../components/vizio/.translations/ca.json    |   4 +
 .../components/withings/.translations/ca.json |   2 +
 31 files changed, 388 insertions(+), 203 deletions(-)
 create mode 100644 homeassistant/components/garmin_connect/.translations/ca.json
 create mode 100644 homeassistant/components/mikrotik/.translations/ca.json
 create mode 100644 homeassistant/components/mikrotik/.translations/da.json
 create mode 100644 homeassistant/components/mikrotik/.translations/ru.json
 create mode 100644 homeassistant/components/spotify/.translations/ca.json

diff --git a/homeassistant/components/alarm_control_panel/.translations/zh-Hant.json b/homeassistant/components/alarm_control_panel/.translations/zh-Hant.json
index 72c0b65436d..94729865c6f 100644
--- a/homeassistant/components/alarm_control_panel/.translations/zh-Hant.json
+++ b/homeassistant/components/alarm_control_panel/.translations/zh-Hant.json
@@ -1,18 +1,18 @@
 {
     "device_automation": {
         "action_type": {
-            "arm_away": "\u8a2d\u5b9a {entity_name} \u5916\u51fa\u6a21\u5f0f",
-            "arm_home": "\u8a2d\u5b9a {entity_name} \u8fd4\u5bb6\u6a21\u5f0f",
-            "arm_night": "\u8a2d\u5b9a {entity_name} \u591c\u9593\u6a21\u5f0f",
-            "disarm": "\u89e3\u9664 {entity_name}",
-            "trigger": "\u89f8\u767c {entity_name}"
+            "arm_away": "\u8a2d\u5b9a{entity_name}\u5916\u51fa\u6a21\u5f0f",
+            "arm_home": "\u8a2d\u5b9a{entity_name}\u8fd4\u5bb6\u6a21\u5f0f",
+            "arm_night": "\u8a2d\u5b9a{entity_name}\u591c\u9593\u6a21\u5f0f",
+            "disarm": "\u89e3\u9664{entity_name}",
+            "trigger": "\u89f8\u767c{entity_name}"
         },
         "trigger_type": {
-            "armed_away": "{entity_name} \u8a2d\u5b9a\u5916\u51fa",
-            "armed_home": "{entity_name} \u8a2d\u5b9a\u5728\u5bb6",
-            "armed_night": "{entity_name} \u8a2d\u5b9a\u591c\u9593",
-            "disarmed": "{entity_name} \u5df2\u89e3\u9664",
-            "triggered": "{entity_name} \u5df2\u89f8\u767c"
+            "armed_away": "{entity_name}\u8a2d\u5b9a\u5916\u51fa",
+            "armed_home": "{entity_name}\u8a2d\u5b9a\u5728\u5bb6",
+            "armed_night": "{entity_name}\u8a2d\u5b9a\u591c\u9593",
+            "disarmed": "{entity_name}\u5df2\u89e3\u9664",
+            "triggered": "{entity_name}\u5df2\u89f8\u767c"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/binary_sensor/.translations/zh-Hant.json b/homeassistant/components/binary_sensor/.translations/zh-Hant.json
index 046b999cb8c..712c0fbd7c1 100644
--- a/homeassistant/components/binary_sensor/.translations/zh-Hant.json
+++ b/homeassistant/components/binary_sensor/.translations/zh-Hant.json
@@ -1,94 +1,94 @@
 {
     "device_automation": {
         "condition_type": {
-            "is_bat_low": "{entity_name} \u96fb\u91cf\u904e\u4f4e",
-            "is_cold": "{entity_name} \u51b7",
-            "is_connected": "{entity_name} \u5df2\u9023\u7dda",
-            "is_gas": "{entity_name} \u5075\u6e2c\u5230\u6c23\u9ad4",
-            "is_hot": "{entity_name} \u71b1",
-            "is_light": "{entity_name} \u5075\u6e2c\u5230\u5149\u7dda\u4e2d",
-            "is_locked": "{entity_name} \u5df2\u4e0a\u9396",
-            "is_moist": "{entity_name} \u6f6e\u6fd5",
-            "is_motion": "{entity_name} \u5075\u6e2c\u5230\u52d5\u4f5c\u4e2d",
-            "is_moving": "{entity_name} \u79fb\u52d5\u4e2d",
-            "is_no_gas": "{entity_name} \u672a\u5075\u6e2c\u5230\u6c23\u9ad4",
-            "is_no_light": "{entity_name} \u672a\u5075\u6e2c\u5230\u5149\u7dda",
-            "is_no_motion": "{entity_name} \u672a\u5075\u6e2c\u5230\u52d5\u4f5c",
-            "is_no_problem": "{entity_name} \u672a\u5075\u6e2c\u5230\u554f\u984c",
-            "is_no_smoke": "{entity_name} \u672a\u5075\u6e2c\u5230\u7159\u9727",
-            "is_no_sound": "{entity_name} \u672a\u5075\u6e2c\u5230\u8072\u97f3",
-            "is_no_vibration": "{entity_name} \u672a\u5075\u6e2c\u5230\u9707\u52d5",
-            "is_not_bat_low": "{entity_name} \u96fb\u91cf\u6b63\u5e38",
-            "is_not_cold": "{entity_name} \u4e0d\u51b7",
-            "is_not_connected": "{entity_name} \u65b7\u7dda",
-            "is_not_hot": "{entity_name} \u4e0d\u71b1",
-            "is_not_locked": "{entity_name} \u89e3\u9396",
-            "is_not_moist": "{entity_name} \u4e7e\u71e5",
-            "is_not_moving": "{entity_name} \u672a\u5728\u79fb\u52d5",
-            "is_not_occupied": "{entity_name} \u672a\u6709\u4eba",
-            "is_not_open": "{entity_name} \u95dc\u9589",
-            "is_not_plugged_in": "{entity_name} \u672a\u63d2\u5165",
-            "is_not_powered": "{entity_name} \u672a\u901a\u96fb",
-            "is_not_present": "{entity_name} \u672a\u51fa\u73fe",
-            "is_not_unsafe": "{entity_name} \u5b89\u5168",
-            "is_occupied": "{entity_name} \u6709\u4eba",
-            "is_off": "{entity_name} \u95dc\u9589",
-            "is_on": "{entity_name} \u958b\u555f",
-            "is_open": "{entity_name} \u958b\u555f",
-            "is_plugged_in": "{entity_name} \u63d2\u5165",
-            "is_powered": "{entity_name} \u901a\u96fb",
-            "is_present": "{entity_name} \u51fa\u73fe",
-            "is_problem": "{entity_name} \u6b63\u5075\u6e2c\u5230\u554f\u984c",
-            "is_smoke": "{entity_name} \u6b63\u5075\u6e2c\u5230\u7159\u9727",
-            "is_sound": "{entity_name} \u6b63\u5075\u6e2c\u5230\u8072\u97f3",
-            "is_unsafe": "{entity_name} \u4e0d\u5b89\u5168",
-            "is_vibration": "{entity_name} \u6b63\u5075\u6e2c\u5230\u9707\u52d5"
+            "is_bat_low": "{entity_name}\u96fb\u91cf\u904e\u4f4e",
+            "is_cold": "{entity_name}\u51b7",
+            "is_connected": "{entity_name}\u5df2\u9023\u7dda",
+            "is_gas": "{entity_name}\u5075\u6e2c\u5230\u6c23\u9ad4",
+            "is_hot": "{entity_name}\u71b1",
+            "is_light": "{entity_name}\u5075\u6e2c\u5230\u5149\u7dda\u4e2d",
+            "is_locked": "{entity_name}\u5df2\u4e0a\u9396",
+            "is_moist": "{entity_name}\u6f6e\u6fd5",
+            "is_motion": "{entity_name}\u5075\u6e2c\u5230\u52d5\u4f5c\u4e2d",
+            "is_moving": "{entity_name}\u79fb\u52d5\u4e2d",
+            "is_no_gas": "{entity_name}\u672a\u5075\u6e2c\u5230\u6c23\u9ad4",
+            "is_no_light": "{entity_name}\u672a\u5075\u6e2c\u5230\u5149\u7dda",
+            "is_no_motion": "{entity_name}\u672a\u5075\u6e2c\u5230\u52d5\u4f5c",
+            "is_no_problem": "{entity_name}\u672a\u5075\u6e2c\u5230\u554f\u984c",
+            "is_no_smoke": "{entity_name}\u672a\u5075\u6e2c\u5230\u7159\u9727",
+            "is_no_sound": "{entity_name}\u672a\u5075\u6e2c\u5230\u8072\u97f3",
+            "is_no_vibration": "{entity_name}\u672a\u5075\u6e2c\u5230\u9707\u52d5",
+            "is_not_bat_low": "{entity_name}\u96fb\u91cf\u6b63\u5e38",
+            "is_not_cold": "{entity_name}\u4e0d\u51b7",
+            "is_not_connected": "{entity_name}\u65b7\u7dda",
+            "is_not_hot": "{entity_name}\u4e0d\u71b1",
+            "is_not_locked": "{entity_name}\u89e3\u9396",
+            "is_not_moist": "{entity_name}\u4e7e\u71e5",
+            "is_not_moving": "{entity_name}\u672a\u5728\u79fb\u52d5",
+            "is_not_occupied": "{entity_name}\u672a\u6709\u4eba",
+            "is_not_open": "{entity_name}\u95dc\u9589",
+            "is_not_plugged_in": "{entity_name}\u672a\u63d2\u5165",
+            "is_not_powered": "{entity_name}\u672a\u901a\u96fb",
+            "is_not_present": "{entity_name}\u672a\u51fa\u73fe",
+            "is_not_unsafe": "{entity_name}\u5b89\u5168",
+            "is_occupied": "{entity_name}\u6709\u4eba",
+            "is_off": "{entity_name}\u95dc\u9589",
+            "is_on": "{entity_name}\u958b\u555f",
+            "is_open": "{entity_name}\u958b\u555f",
+            "is_plugged_in": "{entity_name}\u63d2\u5165",
+            "is_powered": "{entity_name}\u901a\u96fb",
+            "is_present": "{entity_name}\u51fa\u73fe",
+            "is_problem": "{entity_name}\u6b63\u5075\u6e2c\u5230\u554f\u984c",
+            "is_smoke": "{entity_name}\u6b63\u5075\u6e2c\u5230\u7159\u9727",
+            "is_sound": "{entity_name}\u6b63\u5075\u6e2c\u5230\u8072\u97f3",
+            "is_unsafe": "{entity_name}\u4e0d\u5b89\u5168",
+            "is_vibration": "{entity_name}\u6b63\u5075\u6e2c\u5230\u9707\u52d5"
         },
         "trigger_type": {
-            "bat_low": "{entity_name} \u96fb\u91cf\u4f4e",
-            "closed": "{entity_name} \u5df2\u95dc\u9589",
-            "cold": "{entity_name} \u5df2\u8b8a\u51b7",
-            "connected": "{entity_name} \u5df2\u9023\u7dda",
-            "gas": "{entity_name} \u5df2\u958b\u59cb\u5075\u6e2c\u6c23\u9ad4",
-            "hot": "{entity_name} \u5df2\u8b8a\u71b1",
-            "light": "{entity_name} \u5df2\u958b\u59cb\u5075\u6e2c\u5149\u7dda",
-            "locked": "{entity_name} \u5df2\u4e0a\u9396",
-            "moist": "{entity_name} \u5df2\u8b8a\u6f6e\u6fd5",
-            "moist\u00a7": "{entity_name} \u5df2\u8b8a\u6f6e\u6fd5",
-            "motion": "{entity_name} \u5df2\u5075\u6e2c\u5230\u52d5\u4f5c",
-            "moving": "{entity_name} \u958b\u59cb\u79fb\u52d5",
-            "no_gas": "{entity_name} \u5df2\u505c\u6b62\u5075\u6e2c\u6c23\u9ad4",
-            "no_light": "{entity_name} \u5df2\u505c\u6b62\u5075\u6e2c\u5149\u7dda",
-            "no_motion": "{entity_name} \u5df2\u505c\u6b62\u5075\u6e2c\u52d5\u4f5c",
-            "no_problem": "{entity_name} \u5df2\u505c\u6b62\u5075\u6e2c\u554f\u984c",
-            "no_smoke": "{entity_name} \u5df2\u505c\u6b62\u5075\u6e2c\u7159\u9727",
-            "no_sound": "{entity_name} \u5df2\u505c\u6b62\u5075\u6e2c\u8072\u97f3",
-            "no_vibration": "{entity_name} \u5df2\u505c\u6b62\u5075\u6e2c\u9707\u52d5",
-            "not_bat_low": "{entity_name} \u96fb\u91cf\u6b63\u5e38",
-            "not_cold": "{entity_name} \u5df2\u4e0d\u51b7",
-            "not_connected": "{entity_name} \u5df2\u65b7\u7dda",
-            "not_hot": "{entity_name} \u5df2\u4e0d\u71b1",
-            "not_locked": "{entity_name} \u5df2\u89e3\u9396",
-            "not_moist": "{entity_name} \u5df2\u8b8a\u4e7e",
-            "not_moving": "{entity_name} \u505c\u6b62\u79fb\u52d5",
-            "not_occupied": "{entity_name} \u672a\u6709\u4eba",
-            "not_opened": "{entity_name} \u5df2\u95dc\u9589",
-            "not_plugged_in": "{entity_name} \u672a\u63d2\u5165",
-            "not_powered": "{entity_name} \u672a\u901a\u96fb",
-            "not_present": "{entity_name} \u672a\u51fa\u73fe",
-            "not_unsafe": "{entity_name} \u5df2\u5b89\u5168",
-            "occupied": "{entity_name} \u8b8a\u6210\u6709\u4eba",
-            "opened": "{entity_name} \u5df2\u958b\u555f",
-            "plugged_in": "{entity_name} \u5df2\u63d2\u5165",
-            "powered": "{entity_name} \u5df2\u901a\u96fb",
-            "present": "{entity_name} \u5df2\u51fa\u73fe",
-            "problem": "{entity_name} \u5df2\u5075\u6e2c\u5230\u554f\u984c",
-            "smoke": "{entity_name} \u5df2\u5075\u6e2c\u5230\u7159\u9727",
-            "sound": "{entity_name} \u5df2\u5075\u6e2c\u5230\u8072\u97f3",
-            "turned_off": "{entity_name} \u5df2\u95dc\u9589",
-            "turned_on": "{entity_name} \u5df2\u958b\u555f",
-            "unsafe": "{entity_name} \u5df2\u4e0d\u5b89\u5168",
-            "vibration": "{entity_name} \u5df2\u5075\u6e2c\u5230\u9707\u52d5"
+            "bat_low": "{entity_name}\u96fb\u91cf\u4f4e",
+            "closed": "{entity_name}\u5df2\u95dc\u9589",
+            "cold": "{entity_name}\u5df2\u8b8a\u51b7",
+            "connected": "{entity_name}\u5df2\u9023\u7dda",
+            "gas": "{entity_name}\u5df2\u958b\u59cb\u5075\u6e2c\u6c23\u9ad4",
+            "hot": "{entity_name}\u5df2\u8b8a\u71b1",
+            "light": "{entity_name}\u5df2\u958b\u59cb\u5075\u6e2c\u5149\u7dda",
+            "locked": "{entity_name}\u5df2\u4e0a\u9396",
+            "moist": "{entity_name}\u5df2\u8b8a\u6f6e\u6fd5",
+            "moist\u00a7": "{entity_name}\u5df2\u8b8a\u6f6e\u6fd5",
+            "motion": "{entity_name}\u5df2\u5075\u6e2c\u5230\u52d5\u4f5c",
+            "moving": "{entity_name}\u958b\u59cb\u79fb\u52d5",
+            "no_gas": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u6c23\u9ad4",
+            "no_light": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u5149\u7dda",
+            "no_motion": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u52d5\u4f5c",
+            "no_problem": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u554f\u984c",
+            "no_smoke": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u7159\u9727",
+            "no_sound": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u8072\u97f3",
+            "no_vibration": "{entity_name}\u5df2\u505c\u6b62\u5075\u6e2c\u9707\u52d5",
+            "not_bat_low": "{entity_name}\u96fb\u91cf\u6b63\u5e38",
+            "not_cold": "{entity_name}\u5df2\u4e0d\u51b7",
+            "not_connected": "{entity_name}\u5df2\u65b7\u7dda",
+            "not_hot": "{entity_name}\u5df2\u4e0d\u71b1",
+            "not_locked": "{entity_name}\u5df2\u89e3\u9396",
+            "not_moist": "{entity_name}\u5df2\u8b8a\u4e7e",
+            "not_moving": "{entity_name}\u505c\u6b62\u79fb\u52d5",
+            "not_occupied": "{entity_name}\u672a\u6709\u4eba",
+            "not_opened": "{entity_name}\u5df2\u95dc\u9589",
+            "not_plugged_in": "{entity_name}\u672a\u63d2\u5165",
+            "not_powered": "{entity_name}\u672a\u901a\u96fb",
+            "not_present": "{entity_name}\u672a\u51fa\u73fe",
+            "not_unsafe": "{entity_name}\u5df2\u5b89\u5168",
+            "occupied": "{entity_name}\u8b8a\u6210\u6709\u4eba",
+            "opened": "{entity_name}\u5df2\u958b\u555f",
+            "plugged_in": "{entity_name}\u5df2\u63d2\u5165",
+            "powered": "{entity_name}\u5df2\u901a\u96fb",
+            "present": "{entity_name}\u5df2\u51fa\u73fe",
+            "problem": "{entity_name}\u5df2\u5075\u6e2c\u5230\u554f\u984c",
+            "smoke": "{entity_name}\u5df2\u5075\u6e2c\u5230\u7159\u9727",
+            "sound": "{entity_name}\u5df2\u5075\u6e2c\u5230\u8072\u97f3",
+            "turned_off": "{entity_name}\u5df2\u95dc\u9589",
+            "turned_on": "{entity_name}\u5df2\u958b\u555f",
+            "unsafe": "{entity_name}\u5df2\u4e0d\u5b89\u5168",
+            "vibration": "{entity_name}\u5df2\u5075\u6e2c\u5230\u9707\u52d5"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/brother/.translations/ca.json b/homeassistant/components/brother/.translations/ca.json
index 62dd1807676..f927488e7e0 100644
--- a/homeassistant/components/brother/.translations/ca.json
+++ b/homeassistant/components/brother/.translations/ca.json
@@ -1,6 +1,7 @@
 {
     "config": {
         "abort": {
+            "already_configured": "Aquesta impressora ja est\u00e0 configurada.",
             "unsupported_model": "Aquest model d'impressora no \u00e9s compatible."
         },
         "error": {
@@ -8,6 +9,7 @@
             "snmp_error": "El servidor SNMP s'ha tancat o la impressora no \u00e9s compatible.",
             "wrong_host": "Nom de l'amfitri\u00f3 o adre\u00e7a IP inv\u00e0lids."
         },
+        "flow_title": "Impressora Brother: {model} {serial_number}",
         "step": {
             "user": {
                 "data": {
@@ -16,6 +18,12 @@
                 },
                 "description": "Configura la integraci\u00f3 d'impressora Brother. Si tens problemes amb la configuraci\u00f3, visita: https://www.home-assistant.io/integrations/brother",
                 "title": "Impressora Brother"
+            },
+            "zeroconf_confirm": {
+                "data": {
+                    "type": "Tipus d'impressora"
+                },
+                "title": "Impressora Brother descoberta"
             }
         },
         "title": "Impressora Brother"
diff --git a/homeassistant/components/climate/.translations/zh-Hant.json b/homeassistant/components/climate/.translations/zh-Hant.json
index 17e6c955046..28ff10f09f0 100644
--- a/homeassistant/components/climate/.translations/zh-Hant.json
+++ b/homeassistant/components/climate/.translations/zh-Hant.json
@@ -1,16 +1,16 @@
 {
     "device_automation": {
         "action_type": {
-            "set_hvac_mode": "\u8b8a\u66f4 {entity_name} HVAC \u6a21\u5f0f",
-            "set_preset_mode": "\u8b8a\u66f4 {entity_name} \u8a2d\u5b9a\u6a21\u5f0f"
+            "set_hvac_mode": "\u8b8a\u66f4{entity_name} HVAC \u6a21\u5f0f",
+            "set_preset_mode": "\u8b8a\u66f4{entity_name}\u8a2d\u5b9a\u6a21\u5f0f"
         },
         "condition_type": {
-            "is_hvac_mode": "{entity_name} \u8a2d\u5b9a\u70ba\u6307\u5b9a HVAC \u6a21\u5f0f",
-            "is_preset_mode": "{entity_name} \u8a2d\u5b9a\u70ba\u6307\u5b9a\u8a2d\u5b9a\u6a21\u5f0f"
+            "is_hvac_mode": "{entity_name}\u8a2d\u5b9a\u70ba\u6307\u5b9a HVAC \u6a21\u5f0f",
+            "is_preset_mode": "{entity_name}\u8a2d\u5b9a\u70ba\u6307\u5b9a\u8a2d\u5b9a\u6a21\u5f0f"
         },
         "trigger_type": {
-            "current_humidity_changed": "{entity_name} \u91cf\u6e2c\u6fd5\u5ea6\u5df2\u8b8a\u66f4",
-            "current_temperature_changed": "{entity_name} \u91cf\u6e2c\u6eab\u5ea6\u5df2\u8b8a\u66f4",
+            "current_humidity_changed": "{entity_name}\u91cf\u6e2c\u6fd5\u5ea6\u5df2\u8b8a\u66f4",
+            "current_temperature_changed": "{entity_name}\u91cf\u6e2c\u6eab\u5ea6\u5df2\u8b8a\u66f4",
             "hvac_mode_changed": "{entity_name} HVAC \u6a21\u5f0f\u5df2\u8b8a\u66f4"
         }
     }
diff --git a/homeassistant/components/cover/.translations/zh-Hant.json b/homeassistant/components/cover/.translations/zh-Hant.json
index f2880a72e61..790df01d9fc 100644
--- a/homeassistant/components/cover/.translations/zh-Hant.json
+++ b/homeassistant/components/cover/.translations/zh-Hant.json
@@ -1,20 +1,20 @@
 {
     "device_automation": {
         "condition_type": {
-            "is_closed": "{entity_name} \u5df2\u95dc\u9589",
-            "is_closing": "{entity_name} \u6b63\u5728\u95dc\u9589",
-            "is_open": "{entity_name} \u5df2\u958b\u555f",
-            "is_opening": "{entity_name} \u6b63\u5728\u958b\u555f",
-            "is_position": "\u76ee\u524d {entity_name} \u4f4d\u7f6e\u70ba",
-            "is_tilt_position": "\u76ee\u524d {entity_name} \u6a19\u984c\u4f4d\u7f6e\u70ba"
+            "is_closed": "{entity_name}\u5df2\u95dc\u9589",
+            "is_closing": "{entity_name}\u6b63\u5728\u95dc\u9589",
+            "is_open": "{entity_name}\u5df2\u958b\u555f",
+            "is_opening": "{entity_name}\u6b63\u5728\u958b\u555f",
+            "is_position": "\u76ee\u524d{entity_name}\u4f4d\u7f6e\u70ba",
+            "is_tilt_position": "\u76ee\u524d{entity_name}\u6a19\u984c\u4f4d\u7f6e\u70ba"
         },
         "trigger_type": {
-            "closed": "{entity_name} \u5df2\u95dc\u9589",
-            "closing": "{entity_name} \u6b63\u5728\u95dc\u9589",
-            "opened": "{entity_name} \u5df2\u958b\u555f",
-            "opening": "{entity_name} \u6b63\u5728\u958b\u555f",
-            "position": "{entity_name} \u4f4d\u7f6e\u8b8a\u66f4",
-            "tilt_position": "{entity_name} \u6a19\u984c\u4f4d\u7f6e\u8b8a\u66f4"
+            "closed": "{entity_name}\u5df2\u95dc\u9589",
+            "closing": "{entity_name}\u6b63\u5728\u95dc\u9589",
+            "opened": "{entity_name}\u5df2\u958b\u555f",
+            "opening": "{entity_name}\u6b63\u5728\u958b\u555f",
+            "position": "{entity_name}\u4f4d\u7f6e\u8b8a\u66f4",
+            "tilt_position": "{entity_name}\u6a19\u984c\u4f4d\u7f6e\u8b8a\u66f4"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/deconz/.translations/ca.json b/homeassistant/components/deconz/.translations/ca.json
index a51bfa056f6..8a9ae15a7c1 100644
--- a/homeassistant/components/deconz/.translations/ca.json
+++ b/homeassistant/components/deconz/.translations/ca.json
@@ -77,15 +77,21 @@
             "remote_button_short_release": "Bot\u00f3 \"{subtype}\" alliberat",
             "remote_button_triple_press": "Bot\u00f3 \"{subtype}\" clicat tres vegades consecutives",
             "remote_double_tap": "Dispositiu \"{subtype}\" tocat dues vegades",
+            "remote_double_tap_any_side": "Dispositiu tocat dues vegades a alguna cara",
             "remote_falling": "Dispositiu en caiguda lliure",
+            "remote_flip_180_degrees": "Dispositiu voltejat 180 graus",
+            "remote_flip_90_degrees": "Dispositiu voltejat 90 graus",
             "remote_gyro_activated": "Dispositiu sacsejat",
             "remote_moved": "Dispositiu mogut amb la \"{subtype}\" amunt",
+            "remote_moved_any_side": "Dispositiu mogut amb alguna cara amunt",
             "remote_rotate_from_side_1": "Dispositiu rotat de la \"cara 1\" a la \"{subtype}\"",
             "remote_rotate_from_side_2": "Dispositiu rotat de la \"cara 2\" a la \"{subtype}\"",
             "remote_rotate_from_side_3": "Dispositiu rotat de la \"cara 3\" a la \"{subtype}\"",
             "remote_rotate_from_side_4": "Dispositiu rotat de la \"cara 4\" a la \"{subtype}\"",
             "remote_rotate_from_side_5": "Dispositiu rotat de la \"cara 5\" a la \"{subtype}\"",
-            "remote_rotate_from_side_6": "Dispositiu rotat de la \"cara 6\" a la \"{subtype}\""
+            "remote_rotate_from_side_6": "Dispositiu rotat de la \"cara 6\" a la \"{subtype}\"",
+            "remote_turned_clockwise": "Dispositiu girat en sentit horari",
+            "remote_turned_counter_clockwise": "Dispositiu girat en sentit antihorari"
         }
     },
     "options": {
diff --git a/homeassistant/components/device_tracker/.translations/zh-Hant.json b/homeassistant/components/device_tracker/.translations/zh-Hant.json
index 456e09ebf0e..6611cb0c279 100644
--- a/homeassistant/components/device_tracker/.translations/zh-Hant.json
+++ b/homeassistant/components/device_tracker/.translations/zh-Hant.json
@@ -1,8 +1,8 @@
 {
     "device_automation": {
         "condition_type": {
-            "is_home": "{entity_name} \u5728\u5bb6",
-            "is_not_home": "{entity_name} \u4e0d\u5728\u5bb6"
+            "is_home": "{entity_name}\u5728\u5bb6",
+            "is_not_home": "{entity_name}\u4e0d\u5728\u5bb6"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/fan/.translations/zh-Hant.json b/homeassistant/components/fan/.translations/zh-Hant.json
index 78c0d991125..01da8652b2f 100644
--- a/homeassistant/components/fan/.translations/zh-Hant.json
+++ b/homeassistant/components/fan/.translations/zh-Hant.json
@@ -1,16 +1,16 @@
 {
     "device_automation": {
         "action_type": {
-            "turn_off": "\u95dc\u9589 {entity_name}",
-            "turn_on": "\u958b\u555f {entity_name}"
+            "turn_off": "\u95dc\u9589{entity_name}",
+            "turn_on": "\u958b\u555f{entity_name}"
         },
         "condition_type": {
-            "is_off": "{entity_name} \u95dc\u9589",
-            "is_on": "{entity_name} \u958b\u555f"
+            "is_off": "{entity_name}\u95dc\u9589",
+            "is_on": "{entity_name}\u958b\u555f"
         },
         "trigger_type": {
-            "turned_off": "{entity_name} \u5df2\u95dc\u9589",
-            "turned_on": "{entity_name} \u5df2\u958b\u555f"
+            "turned_off": "{entity_name}\u5df2\u95dc\u9589",
+            "turned_on": "{entity_name}\u5df2\u958b\u555f"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/garmin_connect/.translations/ca.json b/homeassistant/components/garmin_connect/.translations/ca.json
new file mode 100644
index 00000000000..95e59cf350d
--- /dev/null
+++ b/homeassistant/components/garmin_connect/.translations/ca.json
@@ -0,0 +1,24 @@
+{
+    "config": {
+        "abort": {
+            "already_configured": "Aquest compte ja est\u00e0 configurat."
+        },
+        "error": {
+            "cannot_connect": "No s'ha pogut connectar, torna-ho a provar.",
+            "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida.",
+            "too_many_requests": "Massa sol\u00b7licituds, torna-ho a intentar m\u00e9s tard.",
+            "unknown": "Error inesperat."
+        },
+        "step": {
+            "user": {
+                "data": {
+                    "password": "Contrasenya",
+                    "username": "Nom d'usuari"
+                },
+                "description": "Introdueix les teves credencials.",
+                "title": "Garmin Connect"
+            }
+        },
+        "title": "Garmin Connect"
+    }
+}
\ No newline at end of file
diff --git a/homeassistant/components/gios/.translations/ca.json b/homeassistant/components/gios/.translations/ca.json
index 80fedcafdd9..dadd38c24ae 100644
--- a/homeassistant/components/gios/.translations/ca.json
+++ b/homeassistant/components/gios/.translations/ca.json
@@ -1,5 +1,8 @@
 {
     "config": {
+        "abort": {
+            "already_configured": "La integraci\u00f3 GIO\u015a per a aquesta estaci\u00f3 ja est\u00e0 configurada."
+        },
         "error": {
             "cannot_connect": "No s'ha pogut connectar al servidor de GIO\u015a.",
             "invalid_sensors_data": "Les dades dels sensors d'aquesta estaci\u00f3 de mesura s\u00f3n inv\u00e0lides.",
diff --git a/homeassistant/components/light/.translations/zh-Hant.json b/homeassistant/components/light/.translations/zh-Hant.json
index 5ac06129463..d8bda90de85 100644
--- a/homeassistant/components/light/.translations/zh-Hant.json
+++ b/homeassistant/components/light/.translations/zh-Hant.json
@@ -1,17 +1,17 @@
 {
     "device_automation": {
         "action_type": {
-            "toggle": "\u5207\u63db {entity_name}",
-            "turn_off": "\u95dc\u9589 {entity_name}",
-            "turn_on": "\u958b\u555f {entity_name}"
+            "toggle": "\u5207\u63db{entity_name}",
+            "turn_off": "\u95dc\u9589{entity_name}",
+            "turn_on": "\u958b\u555f{entity_name}"
         },
         "condition_type": {
-            "is_off": "{entity_name} \u5df2\u95dc\u9589",
-            "is_on": "{entity_name} \u5df2\u958b\u555f"
+            "is_off": "{entity_name}\u5df2\u95dc\u9589",
+            "is_on": "{entity_name}\u5df2\u958b\u555f"
         },
         "trigger_type": {
-            "turned_off": "{entity_name} \u5df2\u95dc\u9589",
-            "turned_on": "{entity_name} \u5df2\u958b\u555f"
+            "turned_off": "{entity_name}\u5df2\u95dc\u9589",
+            "turned_on": "{entity_name}\u5df2\u958b\u555f"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/linky/.translations/ca.json b/homeassistant/components/linky/.translations/ca.json
index ca437417f59..ff242c556fd 100644
--- a/homeassistant/components/linky/.translations/ca.json
+++ b/homeassistant/components/linky/.translations/ca.json
@@ -1,6 +1,7 @@
 {
     "config": {
         "abort": {
+            "already_configured": "El compte ja ha estat configurat",
             "username_exists": "El compte ja ha estat configurat"
         },
         "error": {
diff --git a/homeassistant/components/lock/.translations/zh-Hant.json b/homeassistant/components/lock/.translations/zh-Hant.json
index b5d69a21f9a..054f7a5a18d 100644
--- a/homeassistant/components/lock/.translations/zh-Hant.json
+++ b/homeassistant/components/lock/.translations/zh-Hant.json
@@ -1,17 +1,17 @@
 {
     "device_automation": {
         "action_type": {
-            "lock": "\u4e0a\u9396 {entity_name}",
-            "open": "\u958b\u555f {entity_name}",
-            "unlock": "\u89e3\u9396 {entity_name}"
+            "lock": "\u4e0a\u9396{entity_name}",
+            "open": "\u958b\u555f{entity_name}",
+            "unlock": "\u89e3\u9396{entity_name}"
         },
         "condition_type": {
-            "is_locked": "{entity_name} \u5df2\u4e0a\u9396",
-            "is_unlocked": "{entity_name} \u5df2\u89e3\u9396"
+            "is_locked": "{entity_name}\u5df2\u4e0a\u9396",
+            "is_unlocked": "{entity_name}\u5df2\u89e3\u9396"
         },
         "trigger_type": {
-            "locked": "{entity_name} \u5df2\u4e0a\u9396",
-            "unlocked": "{entity_name} \u5df2\u89e3\u9396"
+            "locked": "{entity_name}\u5df2\u4e0a\u9396",
+            "unlocked": "{entity_name}\u5df2\u89e3\u9396"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/media_player/.translations/zh-Hant.json b/homeassistant/components/media_player/.translations/zh-Hant.json
index abd2f75950b..e3353c5e5b9 100644
--- a/homeassistant/components/media_player/.translations/zh-Hant.json
+++ b/homeassistant/components/media_player/.translations/zh-Hant.json
@@ -1,11 +1,11 @@
 {
     "device_automation": {
         "condition_type": {
-            "is_idle": "{entity_name} \u9592\u7f6e",
-            "is_off": "{entity_name} \u95dc\u9589",
-            "is_on": "{entity_name} \u958b\u555f",
-            "is_paused": "{entity_name} \u5df2\u66ab\u505c",
-            "is_playing": "{entity_name} \u6b63\u5728\u64ad\u653e"
+            "is_idle": "{entity_name}\u9592\u7f6e",
+            "is_off": "{entity_name}\u95dc\u9589",
+            "is_on": "{entity_name}\u958b\u555f",
+            "is_paused": "{entity_name}\u5df2\u66ab\u505c",
+            "is_playing": "{entity_name}\u6b63\u5728\u64ad\u653e"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/mikrotik/.translations/ca.json b/homeassistant/components/mikrotik/.translations/ca.json
new file mode 100644
index 00000000000..acb9966d15d
--- /dev/null
+++ b/homeassistant/components/mikrotik/.translations/ca.json
@@ -0,0 +1,33 @@
+{
+    "config": {
+        "abort": {
+            "already_configured": "Mikrotik ja est\u00e0 configurat"
+        },
+        "error": {
+            "cannot_connect": "La connexi\u00f3 no ha tingut \u00e8xit",
+            "name_exists": "El nom existeix",
+            "wrong_credentials": "Credencials incorrectes"
+        },
+        "step": {
+            "user": {
+                "data": {
+                    "host": "Amfitri\u00f3",
+                    "name": "Nom",
+                    "password": "Contrasenya",
+                    "port": "Port",
+                    "username": "Nom d'usuari"
+                }
+            }
+        },
+        "title": "Mikrotik"
+    },
+    "options": {
+        "step": {
+            "device_tracker": {
+                "data": {
+                    "arp_ping": "Activa el ping ARP"
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/homeassistant/components/mikrotik/.translations/da.json b/homeassistant/components/mikrotik/.translations/da.json
new file mode 100644
index 00000000000..edaa47e52bb
--- /dev/null
+++ b/homeassistant/components/mikrotik/.translations/da.json
@@ -0,0 +1,37 @@
+{
+    "config": {
+        "abort": {
+            "already_configured": "Mikrotik er allerede konfigureret"
+        },
+        "error": {
+            "cannot_connect": "Forbindelsen mislykkedes",
+            "name_exists": "Navnet findes allerede",
+            "wrong_credentials": "Forkerte legitimationsoplysninger"
+        },
+        "step": {
+            "user": {
+                "data": {
+                    "host": "V\u00e6rt",
+                    "name": "Navn",
+                    "password": "Adgangskode",
+                    "port": "Port",
+                    "username": "Brugernavn",
+                    "verify_ssl": "Brug ssl"
+                },
+                "title": "Konfigurer Mikrotik-router"
+            }
+        },
+        "title": "Mikrotik"
+    },
+    "options": {
+        "step": {
+            "device_tracker": {
+                "data": {
+                    "arp_ping": "Aktiver ARP-ping",
+                    "detection_time": "Betragt som hjemme-interval",
+                    "force_dhcp": "Gennemtving scanning ved hj\u00e6lp af DHCP"
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/homeassistant/components/mikrotik/.translations/en.json b/homeassistant/components/mikrotik/.translations/en.json
index 590563993d6..0423401bf83 100644
--- a/homeassistant/components/mikrotik/.translations/en.json
+++ b/homeassistant/components/mikrotik/.translations/en.json
@@ -1,35 +1,35 @@
 {
     "config": {
-        "title": "Mikrotik",
-        "step": {
-            "user": {
-                "title": "Set up Mikrotik Router",
-                "data": {
-                    "name": "Name",
-                    "host": "Host",
-                    "username": "Username",
-                    "password": "Password",
-                    "port": "Port",
-                    "verify_ssl": "Use ssl"
-                }
-            }
-        },
-        "error": {
-            "name_exists": "Name exists",
-            "cannot_connect": "Connection Unsuccessful",
-            "wrong_credentials": "Wrong Credentials"
-        },
         "abort": {
             "already_configured": "Mikrotik is already configured"
-        }
+        },
+        "error": {
+            "cannot_connect": "Connection Unsuccessful",
+            "name_exists": "Name exists",
+            "wrong_credentials": "Wrong Credentials"
+        },
+        "step": {
+            "user": {
+                "data": {
+                    "host": "Host",
+                    "name": "Name",
+                    "password": "Password",
+                    "port": "Port",
+                    "username": "Username",
+                    "verify_ssl": "Use ssl"
+                },
+                "title": "Set up Mikrotik Router"
+            }
+        },
+        "title": "Mikrotik"
     },
     "options": {
         "step": {
             "device_tracker": {
                 "data": {
                     "arp_ping": "Enable ARP ping",
-                    "force_dhcp": "Force scanning using DHCP",
-                    "detection_time": "Consider home interval"
+                    "detection_time": "Consider home interval",
+                    "force_dhcp": "Force scanning using DHCP"
                 }
             }
         }
diff --git a/homeassistant/components/mikrotik/.translations/ru.json b/homeassistant/components/mikrotik/.translations/ru.json
new file mode 100644
index 00000000000..844181b5b64
--- /dev/null
+++ b/homeassistant/components/mikrotik/.translations/ru.json
@@ -0,0 +1,37 @@
+{
+    "config": {
+        "abort": {
+            "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430."
+        },
+        "error": {
+            "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443.",
+            "name_exists": "\u042d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.",
+            "wrong_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435."
+        },
+        "step": {
+            "user": {
+                "data": {
+                    "host": "\u0425\u043e\u0441\u0442",
+                    "name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
+                    "password": "\u041f\u0430\u0440\u043e\u043b\u044c",
+                    "port": "\u041f\u043e\u0440\u0442",
+                    "username": "\u041b\u043e\u0433\u0438\u043d",
+                    "verify_ssl": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL"
+                },
+                "title": "MikroTik"
+            }
+        },
+        "title": "MikroTik"
+    },
+    "options": {
+        "step": {
+            "device_tracker": {
+                "data": {
+                    "arp_ping": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c ARP-\u043f\u0438\u043d\u0433",
+                    "detection_time": "\u0412\u0440\u0435\u043c\u044f \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c (\u0441\u0435\u043a.), \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \"\u041d\u0435 \u0434\u043e\u043c\u0430\".",
+                    "force_dhcp": "\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c DHCP"
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/homeassistant/components/netatmo/.translations/ca.json b/homeassistant/components/netatmo/.translations/ca.json
index 6961db6f520..63de8699f35 100644
--- a/homeassistant/components/netatmo/.translations/ca.json
+++ b/homeassistant/components/netatmo/.translations/ca.json
@@ -2,7 +2,8 @@
     "config": {
         "abort": {
             "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte Netatmo.",
-            "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3."
+            "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.",
+            "missing_configuration": "El component Netatmo no est\u00e0 configurat. Mira'n la documentaci\u00f3."
         },
         "create_entry": {
             "default": "Autenticaci\u00f3 exitosa amb Netatmo."
diff --git a/homeassistant/components/point/.translations/ca.json b/homeassistant/components/point/.translations/ca.json
index fd603aa0430..c4d9228532d 100644
--- a/homeassistant/components/point/.translations/ca.json
+++ b/homeassistant/components/point/.translations/ca.json
@@ -3,7 +3,7 @@
         "abort": {
             "already_setup": "Nom\u00e9s pots configurar un compte de Point.",
             "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.",
-            "authorize_url_timeout": "S'ha acabat el temps d'espera mentre \u00e9s generava l'URL d'autoritzaci\u00f3.",
+            "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.",
             "external_setup": "Point s'ha configurat correctament des d'un altre flux de dades.",
             "no_flows": "Necessites configurar Point abans de poder autenticar-t'hi. Llegeix les [instruccions](https://www.home-assistant.io/components/point/)."
         },
diff --git a/homeassistant/components/ring/.translations/ca.json b/homeassistant/components/ring/.translations/ca.json
index d51de2b8667..6f549f8ef28 100644
--- a/homeassistant/components/ring/.translations/ca.json
+++ b/homeassistant/components/ring/.translations/ca.json
@@ -3,6 +3,10 @@
         "abort": {
             "already_configured": "El dispositiu ja est\u00e0 configurat"
         },
+        "error": {
+            "invalid_auth": "Autenticaci\u00f3 inv\u00e0lida",
+            "unknown": "Error inesperat"
+        },
         "step": {
             "user": {
                 "data": {
diff --git a/homeassistant/components/samsungtv/.translations/ca.json b/homeassistant/components/samsungtv/.translations/ca.json
index beeb62d8bdb..78581987df8 100644
--- a/homeassistant/components/samsungtv/.translations/ca.json
+++ b/homeassistant/components/samsungtv/.translations/ca.json
@@ -1,5 +1,12 @@
 {
     "config": {
+        "abort": {
+            "already_configured": "La Samsung TV ja configurada.",
+            "already_in_progress": "La configuraci\u00f3 de la Samsung TV ja est\u00e0 en curs.",
+            "auth_missing": "Home Assistant no est\u00e0 autenticat per connectar-se amb aquesta Samsung TV.",
+            "not_found": "No s'han trobat Samsung TV's compatibles a la xarxa.",
+            "not_supported": "Actualment aquest dispositiu Samsung TV no \u00e9s compatible."
+        },
         "step": {
             "confirm": {
                 "title": "Samsung TV"
diff --git a/homeassistant/components/sensor/.translations/zh-Hant.json b/homeassistant/components/sensor/.translations/zh-Hant.json
index eb8f47a1fd9..9bf8abc8230 100644
--- a/homeassistant/components/sensor/.translations/zh-Hant.json
+++ b/homeassistant/components/sensor/.translations/zh-Hant.json
@@ -1,26 +1,26 @@
 {
     "device_automation": {
         "condition_type": {
-            "is_battery_level": "\u76ee\u524d {entity_name} \u96fb\u91cf",
-            "is_humidity": "\u76ee\u524d {entity_name} \u6fd5\u5ea6",
-            "is_illuminance": "\u76ee\u524d {entity_name} \u7167\u5ea6",
-            "is_power": "\u76ee\u524d {entity_name} \u96fb\u529b",
-            "is_pressure": "\u76ee\u524d {entity_name} \u58d3\u529b",
-            "is_signal_strength": "\u76ee\u524d {entity_name} \u8a0a\u865f\u5f37\u5ea6",
-            "is_temperature": "\u76ee\u524d {entity_name} \u6eab\u5ea6",
-            "is_timestamp": "\u76ee\u524d {entity_name} \u6642\u9593\u6a19\u8a18",
-            "is_value": "\u76ee\u524d {entity_name} \u503c"
+            "is_battery_level": "\u76ee\u524d{entity_name}\u96fb\u91cf",
+            "is_humidity": "\u76ee\u524d{entity_name}\u6fd5\u5ea6",
+            "is_illuminance": "\u76ee\u524d{entity_name}\u7167\u5ea6",
+            "is_power": "\u76ee\u524d{entity_name}\u96fb\u529b",
+            "is_pressure": "\u76ee\u524d{entity_name}\u58d3\u529b",
+            "is_signal_strength": "\u76ee\u524d{entity_name}\u8a0a\u865f\u5f37\u5ea6",
+            "is_temperature": "\u76ee\u524d{entity_name}\u6eab\u5ea6",
+            "is_timestamp": "\u76ee\u524d{entity_name}\u6642\u9593\u6a19\u8a18",
+            "is_value": "\u76ee\u524d{entity_name}\u503c"
         },
         "trigger_type": {
-            "battery_level": "{entity_name} \u96fb\u91cf\u8b8a\u66f4",
-            "humidity": "{entity_name} \u6fd5\u5ea6\u8b8a\u66f4",
-            "illuminance": "{entity_name} \u7167\u5ea6\u8b8a\u66f4",
-            "power": "{entity_name} \u96fb\u529b\u8b8a\u66f4",
-            "pressure": "{entity_name} \u58d3\u529b\u8b8a\u66f4",
-            "signal_strength": "{entity_name} \u8a0a\u865f\u5f37\u5ea6\u8b8a\u66f4",
-            "temperature": "{entity_name} \u6eab\u5ea6\u8b8a\u66f4",
-            "timestamp": "{entity_name} \u6642\u9593\u6a19\u8a18\u8b8a\u66f4",
-            "value": "{entity_name} \u503c\u8b8a\u66f4"
+            "battery_level": "{entity_name}\u96fb\u91cf\u8b8a\u66f4",
+            "humidity": "{entity_name}\u6fd5\u5ea6\u8b8a\u66f4",
+            "illuminance": "{entity_name}\u7167\u5ea6\u8b8a\u66f4",
+            "power": "{entity_name}\u96fb\u529b\u8b8a\u66f4",
+            "pressure": "{entity_name}\u58d3\u529b\u8b8a\u66f4",
+            "signal_strength": "{entity_name}\u8a0a\u865f\u5f37\u5ea6\u8b8a\u66f4",
+            "temperature": "{entity_name}\u6eab\u5ea6\u8b8a\u66f4",
+            "timestamp": "{entity_name}\u6642\u9593\u6a19\u8a18\u8b8a\u66f4",
+            "value": "{entity_name}\u503c\u8b8a\u66f4"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/soma/.translations/ca.json b/homeassistant/components/soma/.translations/ca.json
index a1a5b9489fa..00bc3eef39c 100644
--- a/homeassistant/components/soma/.translations/ca.json
+++ b/homeassistant/components/soma/.translations/ca.json
@@ -1,7 +1,7 @@
 {
     "config": {
         "abort": {
-            "already_setup": "Nom\u00e9s pots configurar un compte de Soma.",
+            "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Soma.",
             "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.",
             "connection_error": "No s'ha pogut connectar amb SOMA Connect.",
             "missing_configuration": "El component Soma no est\u00e0 configurat. Mira'n la documentaci\u00f3.",
diff --git a/homeassistant/components/somfy/.translations/ca.json b/homeassistant/components/somfy/.translations/ca.json
index b3095cd4e9c..58b8853cd51 100644
--- a/homeassistant/components/somfy/.translations/ca.json
+++ b/homeassistant/components/somfy/.translations/ca.json
@@ -1,8 +1,8 @@
 {
     "config": {
         "abort": {
-            "already_setup": "Nom\u00e9s pots configurar un compte de Somfy.",
-            "authorize_url_timeout": "S'ha acabat el temps d'espera mentre \u00e9s generava l'URL d'autoritzaci\u00f3.",
+            "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Somfy.",
+            "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.",
             "missing_configuration": "El component Somfy no est\u00e0 configurat. Mira'n la documentaci\u00f3."
         },
         "create_entry": {
diff --git a/homeassistant/components/spotify/.translations/ca.json b/homeassistant/components/spotify/.translations/ca.json
new file mode 100644
index 00000000000..fa0fa734353
--- /dev/null
+++ b/homeassistant/components/spotify/.translations/ca.json
@@ -0,0 +1,18 @@
+{
+    "config": {
+        "abort": {
+            "already_setup": "Nom\u00e9s pots configurar un \u00fanic compte amb Spotify.",
+            "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.",
+            "missing_configuration": "La integraci\u00f3 Spotify no est\u00e0 configurada. Mira'n la documentaci\u00f3."
+        },
+        "create_entry": {
+            "default": "Autenticaci\u00f3 exitosa amb Spotify."
+        },
+        "step": {
+            "pick_implementation": {
+                "title": "Selecci\u00f3 del m\u00e8tode d'autenticaci\u00f3"
+            }
+        },
+        "title": "Spotify"
+    }
+}
\ No newline at end of file
diff --git a/homeassistant/components/switch/.translations/zh-Hant.json b/homeassistant/components/switch/.translations/zh-Hant.json
index 517d48354dc..3eaac840497 100644
--- a/homeassistant/components/switch/.translations/zh-Hant.json
+++ b/homeassistant/components/switch/.translations/zh-Hant.json
@@ -1,19 +1,19 @@
 {
     "device_automation": {
         "action_type": {
-            "toggle": "\u5207\u63db {entity_name}",
-            "turn_off": "\u95dc\u9589 {entity_name}",
-            "turn_on": "\u958b\u555f {entity_name}"
+            "toggle": "\u5207\u63db{entity_name}",
+            "turn_off": "\u95dc\u9589{entity_name}",
+            "turn_on": "\u958b\u555f{entity_name}"
         },
         "condition_type": {
-            "is_off": "{entity_name} \u5df2\u95dc\u9589",
-            "is_on": "{entity_name} \u5df2\u958b\u555f",
-            "turn_off": "{entity_name} \u5df2\u95dc\u9589",
-            "turn_on": "{entity_name} \u5df2\u958b\u555f"
+            "is_off": "{entity_name}\u5df2\u95dc\u9589",
+            "is_on": "{entity_name}\u5df2\u958b\u555f",
+            "turn_off": "{entity_name}\u5df2\u95dc\u9589",
+            "turn_on": "{entity_name}\u5df2\u958b\u555f"
         },
         "trigger_type": {
-            "turned_off": "{entity_name} \u5df2\u95dc\u9589",
-            "turned_on": "{entity_name} \u5df2\u958b\u555f"
+            "turned_off": "{entity_name}\u5df2\u95dc\u9589",
+            "turned_on": "{entity_name}\u5df2\u958b\u555f"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/tellduslive/.translations/ca.json b/homeassistant/components/tellduslive/.translations/ca.json
index a337474c96b..6f337d9a4d3 100644
--- a/homeassistant/components/tellduslive/.translations/ca.json
+++ b/homeassistant/components/tellduslive/.translations/ca.json
@@ -3,7 +3,7 @@
         "abort": {
             "already_setup": "TelldusLive ja est\u00e0 configurat",
             "authorize_url_fail": "S'ha produ\u00eft un error desconegut al generar l'URL d'autoritzaci\u00f3.",
-            "authorize_url_timeout": "S'ha acabat el temps d'espera mentre \u00e9s generava l'URL d'autoritzaci\u00f3.",
+            "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.",
             "unknown": "S'ha produ\u00eft un error desconegut"
         },
         "error": {
diff --git a/homeassistant/components/vacuum/.translations/zh-Hant.json b/homeassistant/components/vacuum/.translations/zh-Hant.json
index b406e1baede..b108a2a6a44 100644
--- a/homeassistant/components/vacuum/.translations/zh-Hant.json
+++ b/homeassistant/components/vacuum/.translations/zh-Hant.json
@@ -1,16 +1,16 @@
 {
     "device_automation": {
         "action_type": {
-            "clean": "\u555f\u52d5 {entity_name} \u6e05\u9664",
-            "dock": "\u555f\u52d5 {entity_name} \u56de\u5230\u5145\u96fb\u7ad9"
+            "clean": "\u555f\u52d5{entity_name}\u6e05\u9664",
+            "dock": "\u555f\u52d5{entity_name}\u56de\u5230\u5145\u96fb\u7ad9"
         },
         "condition_type": {
-            "is_cleaning": "{entity_name} \u6b63\u5728\u6e05\u6383",
-            "is_docked": "{entity_name} \u65bc\u5145\u96fb\u7ad9"
+            "is_cleaning": "{entity_name}\u6b63\u5728\u6e05\u6383",
+            "is_docked": "{entity_name}\u65bc\u5145\u96fb\u7ad9"
         },
         "trigger_type": {
-            "cleaning": "{entity_name} \u958b\u59cb\u6e05\u6383",
-            "docked": "{entity_name} \u5df2\u56de\u5145\u96fb\u7ad9"
+            "cleaning": "{entity_name}\u958b\u59cb\u6e05\u6383",
+            "docked": "{entity_name}\u5df2\u56de\u5145\u96fb\u7ad9"
         }
     }
 }
\ No newline at end of file
diff --git a/homeassistant/components/vizio/.translations/ca.json b/homeassistant/components/vizio/.translations/ca.json
index abbf1092bf3..28f922f9e33 100644
--- a/homeassistant/components/vizio/.translations/ca.json
+++ b/homeassistant/components/vizio/.translations/ca.json
@@ -1,5 +1,8 @@
 {
     "config": {
+        "abort": {
+            "already_setup": "Aquesta entrada ja ha estat configurada."
+        },
         "error": {
             "host_exists": "L'amfitri\u00f3 ja est\u00e0 configurat.",
             "name_exists": "El nom ja est\u00e0 configurat."
@@ -21,6 +24,7 @@
         "step": {
             "init": {
                 "data": {
+                    "timeout": "Temps d'espera de les sol\u00b7licituds API (en segons)",
                     "volume_step": "Mida del pas de volum"
                 }
             }
diff --git a/homeassistant/components/withings/.translations/ca.json b/homeassistant/components/withings/.translations/ca.json
index 5794dbbc1a5..edb95a946aa 100644
--- a/homeassistant/components/withings/.translations/ca.json
+++ b/homeassistant/components/withings/.translations/ca.json
@@ -1,6 +1,8 @@
 {
     "config": {
         "abort": {
+            "authorize_url_timeout": "S'ha acabat el temps d'espera durant la generaci\u00f3 de l'URL d'autoritzaci\u00f3.",
+            "missing_configuration": "La integraci\u00f3 Withings no est\u00e0 configurada. Mira'n la documentaci\u00f3.",
             "no_flows": "Necessites configurar Withings abans de poder autenticar't-hi. Llegeix la documentaci\u00f3."
         },
         "create_entry": {