Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 3 additions & 20 deletions script/translations/download.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#!/usr/bin/env python3
"""Merge all translation sources into a single JSON file."""
import glob
import json
import os
import pathlib
Expand Down Expand Up @@ -47,16 +46,6 @@ def run_download_docker():
raise ExitApp("Failed to download translations")


def load_json(filename: str) -> Union[List, Dict]:
"""Load JSON data from a file and return as dict or list.

Defaults to returning empty dict if file is not found.
"""
with open(filename, encoding="utf-8") as fdesc:
return json.loads(fdesc.read())
return {}


def save_json(filename: str, data: Union[List, Dict]):
"""Save JSON data to a file.

Expand All @@ -69,11 +58,6 @@ def save_json(filename: str, data: Union[List, Dict]):
return False


def get_language(path):
"""Get the language code for the given file path."""
return os.path.splitext(os.path.basename(path))[0]


def get_component_path(lang, component):
"""Get the component translation path."""
if os.path.isdir(os.path.join("homeassistant", "components", component)):
Expand Down Expand Up @@ -132,10 +116,9 @@ def save_language_translations(lang, translations):

def write_integration_translations():
"""Write integration translations."""
paths = glob.iglob("build/translations-download/*.json")
for path in paths:
lang = get_language(path)
translations = load_json(path)
for lang_file in DOWNLOAD_DIR.glob("*.json"):
lang = lang_file.stem
translations = json.loads(lang_file.read_text())
save_language_translations(lang, translations)


Expand Down
46 changes: 46 additions & 0 deletions script/translations/frontend.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""Write updated translations to the frontend."""
import argparse
import json

from .const import FRONTEND_DIR
from .download import DOWNLOAD_DIR, run_download_docker
from .util import get_base_arg_parser

FRONTEND_BACKEND_TRANSLATIONS = FRONTEND_DIR / "translations/backend"


def get_arguments() -> argparse.Namespace:
"""Get parsed passed in arguments."""
parser = get_base_arg_parser()
parser.add_argument(
"--skip-download", action="store_true", help="Skip downloading translations."
)
return parser.parse_args()


def run():
"""Update frontend translations with backend data.

We use the downloaded Docker files because it gives us each language in 1 file.
"""
args = get_arguments()

if not args.skip_download:
run_download_docker()

for lang_file in DOWNLOAD_DIR.glob("*.json"):
translations = json.loads(lang_file.read_text())

to_write_translations = {"component": {}}

for domain, domain_translations in translations["component"].items():
if "state" not in domain_translations:
continue

to_write_translations["component"][domain] = {
"state": domain_translations["state"]
}

(FRONTEND_BACKEND_TRANSLATIONS / lang_file.name).write_text(
json.dumps(to_write_translations, indent=2)
)
34 changes: 12 additions & 22 deletions script/translations/migrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,27 +327,17 @@ def find_frontend_states():
def run():
"""Migrate translations."""
# Import new common keys
# migrate_project_keys_translations(
# FRONTEND_PROJECT_ID,
# CORE_PROJECT_ID,
# {
# "state::default::off": "common::state::off",
# "state::default::on": "common::state::on",
# "state::cover::open": "common::state::open",
# "state::cover::closed": "common::state::closed",
# "state::binary_sensor::connectivity::on": "common::state::connected",
# "state::binary_sensor::connectivity::off": "common::state::disconnected",
# "state::lock::locked": "common::state::locked",
# "state::lock::unlocked": "common::state::unlocked",
# "state::timer::active": "common::state::active",
# "state::camera::idle": "common::state::idle",
# "state::media_player::standby": "common::state::standby",
# "state::media_player::paused": "common::state::paused",
# "state::device_tracker::home": "common::state::home",
# "state::device_tracker::not_home": "common::state::not_home",
# },
# )

find_frontend_states()
migrate_project_keys_translations(
CORE_PROJECT_ID,
FRONTEND_PROJECT_ID,
{
"common::state::off": "state::default::off",
"common::state::on": "state::default::on",
},
)

# find_frontend_states()

# find_different_languages()

return 0
2 changes: 1 addition & 1 deletion script/translations/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def get_base_arg_parser() -> argparse.ArgumentParser:
parser.add_argument(
"action",
type=str,
choices=["clean", "develop", "download", "migrate", "upload"],
choices=["clean", "develop", "download", "frontend", "migrate", "upload"],
)
parser.add_argument("--debug", action="store_true", help="Enable log output")
return parser
Expand Down