Reuse translations

This commit is contained in:
Joseph Abbey
2025-07-24 23:42:27 +01:00
parent e2722319a6
commit c599b9fcf3
2 changed files with 126 additions and 19 deletions

View File

@ -1,13 +1,13 @@
####################################################################################
#
# Distributed under MIT Licence
# See https://github.com/house-of-abbey/GarminThermoNest/blob/main/LICENSE.
# See https://github.com/house-of-abbey/GarminHomeAssistant/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.
# GarminHomeAssistant 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/GarminHomeAssistant.
#
# J D Abbey & P A Abbey, 28 December 2022
#
@ -84,25 +84,44 @@ langLength = len(languages)
exceptionIds: list[str] = ["AppName", "AppVersionTitle"]
titleIds: list[str] = []
# def merge(curr: BeautifulSoup, prev: BeautifulSoup) -> BeautifulSoup:
# """
# Merge the current strings.xml with the previous one, overwriting
# the previous strings with the current ones if they exist.
# """
# out = prev.__copy__()
# for s in curr.find(name="strings").findAll(name="string"):
# s_prev = out.find(name="string", attrs={"id": s["id"]})
# if s_prev:
# s_prev.string = s.string
# else:
# out.find(name="strings").append(s)
# return out
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)
# Old translations will not be automatically updated/removed, use removeTranslations.py
try:
with open(f"./resources-{l[0]}/strings/corrections.xml", "r") as r:
curr = BeautifulSoup(r.read().replace("\r", ""),
features="xml")
with open(f"./resources-{l[0]}/strings/strings.xml", "r", encoding="utf-8") as r:
prev = BeautifulSoup(r.read().replace("\r", ""), features="xml")
except FileNotFoundError:
prev = BeautifulSoup("", features=["xml"])
try:
with open(f"./resources-{l[0]}/strings/corrections.xml", "r", encoding="utf-8") 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")
translator = GoogleTranslator(source="en", target=l[1])
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"))
translator.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"):
@ -114,20 +133,19 @@ with open("./resources/strings/strings.xml", "r") as f:
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()
s_prev = prev.find(name="string", attrs={"id": s["id"]})
if s_prev:
s.string = s_prev.string
else:
s.string = a
a = translator.translate(s.string)
if s["id"] in titleIds:
s.string = a.title()
else:
s.string = a
for s in soup.find(name="strings").findAll(
string=lambda text: isinstance(text, Comment)):
s.insert_before(" ")
s.replace_with(
Comment(
" " +
GoogleTranslator(source="en", target=l[1]).translate(s) +
" "))
s.replace_with(Comment(" " + translator.translate(s) + " "))
# print(str(soup))
with open(f"./resources-{l[0]}/strings/strings.xml", "wb") as w: