mirror of
https://github.com/house-of-abbey/GarminHomeAssistant.git
synced 2025-04-30 12:42:27 +00:00
Separation of phone connectivity and Internet access tests for finer grained feedback to the user. Updates no longer stop on absence of Internet connectivity.
127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
####################################################################################
|
|
#
|
|
# Distributed under MIT Licence
|
|
# See https://github.com/house-of-abbey/GarminThermoNest/blob/main/LICENSE.
|
|
#
|
|
####################################################################################
|
|
#
|
|
# ThermoNest is a Garmin IQ application written in Monkey C and routinely tested on
|
|
# a Venu 2 device. The source code is provided at:
|
|
# https://github.com/house-of-abbey/GarminThermoNest.
|
|
#
|
|
# J D Abbey & P A Abbey, 28 December 2022
|
|
#
|
|
#
|
|
# Description:
|
|
#
|
|
# Python script to automatically translate the strings.xml file to each supported
|
|
# language using Google Translate.
|
|
#
|
|
# Python installation:
|
|
# pip install beautifulsoup4
|
|
# pip install deep-translator
|
|
# NB. For XML formatting:
|
|
# pip install lxml
|
|
#
|
|
# References:
|
|
# * https://www.crummy.com/software/BeautifulSoup/bs4/doc/
|
|
# * https://realpython.com/beautiful-soup-web-scraper-python/
|
|
# * https://www.crummy.com/software/BeautifulSoup/bs4/doc/#parsing-xml
|
|
# * https://www.crummy.com/software/BeautifulSoup/bs4/doc/#xml
|
|
#
|
|
####################################################################################
|
|
|
|
from deep_translator import GoogleTranslator
|
|
from bs4 import BeautifulSoup, Comment
|
|
import os
|
|
|
|
# List of tuples in the form os:
|
|
# * Garmin IQ language three letter mnemonic,
|
|
# * Google Translate language mnemonic,
|
|
# * Language familiar name (mainly for reference)
|
|
languages: list[tuple[str, str, str]] = [
|
|
("ara", "ar", "Arabic"),
|
|
("bul", "bg", "Bulgarian"),
|
|
("zhs", "zh-CN", "Chinese (Simplified)"),
|
|
("zht", "zh-TW", "Chinese (Traditional)"),
|
|
("hrv", "hr", "Croatian"),
|
|
("ces", "cs", "Czech"),
|
|
("dan", "da", "Danish"),
|
|
("dut", "nl", "Dutch"),
|
|
("deu", "de", "German"),
|
|
("gre", "el", "Greek"),
|
|
# ("eng", "en", "English"),
|
|
("est", "et", "Estonian"),
|
|
("fin", "fi", "Finnish"),
|
|
("fre", "fr", "French"),
|
|
("heb", "iw", "Hebrew"),
|
|
("hun", "hu", "Hungarian"),
|
|
("ind", "id", "Indonesian"),
|
|
("ita", "it", "Italian"),
|
|
("jpn", "ja", "Japanese"),
|
|
("kor", "ko", "Korean"),
|
|
("lav", "lv", "Latvian"),
|
|
("lit", "lt", "Lithuanian"),
|
|
("zsm", "ms", "Standard (Bahasa) Malay"),
|
|
("nob", "no", "Norwegian"),
|
|
("pol", "pl", "Polish"),
|
|
("por", "pt", "Portuguese"),
|
|
("ron", "ro", "Romanian"),
|
|
# ("rus", "ru", "Russian"),
|
|
("slo", "sk", "Slovak"),
|
|
("slv", "sl", "Slovenian"),
|
|
("spa", "es", "Spanish"),
|
|
("swe", "sv", "Swedish"),
|
|
("tha", "th", "Thai"),
|
|
("tur", "tr", "Turkish"),
|
|
("ukr", "uk", "Ukrainian"),
|
|
("vie", "vi", "Vietnamese")
|
|
]
|
|
|
|
langLength = len(languages)
|
|
|
|
exceptionIds: list[str] = ["AppName", "AppVersionTitle"]
|
|
titleIds: list[str] = []
|
|
|
|
i = 1
|
|
with open("./resources/strings/strings.xml", "r") as f:
|
|
c = f.read().replace('\r', '')
|
|
for l in languages:
|
|
os.makedirs(f"./resources-{l[0]}/strings/", exist_ok=True)
|
|
try:
|
|
with open(f"./resources-{l[0]}/strings/corrections.xml", "r") as r:
|
|
curr = BeautifulSoup(r.read().replace('\r', ''), features="xml")
|
|
except FileNotFoundError:
|
|
curr = BeautifulSoup("", features=["xml"])
|
|
print(f"{i} of {langLength}: Translating English to {l[2]}")
|
|
soup = BeautifulSoup(c, features="xml")
|
|
soup.find(name="strings").insert_before("\n\n")
|
|
soup.find(name="strings").insert_before(
|
|
Comment(f"\n Generated by Google Translate: English to {l[2]}\n " +
|
|
GoogleTranslator(source='en', target=l[1]).translate("Generated by Google Translate from English") +
|
|
"\n")
|
|
)
|
|
soup.find(name="strings").insert_before("\n\n")
|
|
|
|
for s in soup.find(name="strings").findAll(name="string"):
|
|
s.insert_before(" ")
|
|
if s["id"] in exceptionIds: continue
|
|
|
|
s_curr = curr.find(name="string", attrs={ "id": s["id"] })
|
|
if s_curr:
|
|
s.string = s_curr.string
|
|
else:
|
|
a = GoogleTranslator(source='en', target=l[1]).translate(s.string)
|
|
if s["id"] in titleIds:
|
|
s.string = a.title()
|
|
else:
|
|
s.string = a
|
|
for s in soup.find(name="strings").findAll(text=lambda text:isinstance(text, Comment)):
|
|
s.insert_before(" ")
|
|
s.replace_with(Comment(" " + GoogleTranslator(source='en', target=l[1]).translate(s) + " "))
|
|
|
|
#print(str(soup))
|
|
with open(f"./resources-{l[0]}/strings/strings.xml", "wb") as w:
|
|
w.write(soup.encode("utf-8"))
|
|
i += 1
|