12/09/2024, 08:55:05
Hello
Comme j'ai commencé a l'expliqué ici je suis en train de traduire des produits du projet OpenKNX fait par des allemand.
On a donc 2 type de chose a traduire, un fichier XML, puis des fichiers texte qui contiennent l'aide interactive dans ETS.
Dans le fichier XML on par exemple ceci :
<Enumeration Text="Präsenzmelder" Value="2" Id="M-00FA_A-A012-32-0000_PT-ModuleSelector_EN-2" />
<ParameterSeparator Id="M-00FA_A-A012-32-0000_PS-212" Text="In der gesamten Applikation wird vom Präsenzmelder gesprochen. Ob sich die Applikation als Präsenz- oder als Bewegungsmelder verhält, wird von der verwendeten Hardware (Präsenz-Sensor) bestimmt." />[/code]
Pour le moment j'ai fais du Recherche et Remplace dans Notepad++ pour valider le concept et pour voir si ca fonctionne ensuite dans ETS, comme je ne regénère pas une nouvelle version d'application il faut ruser un peu, mais bon ca marche et le problème est pas là.
Je souhaiterais automatiser la traduction, faire une petite application ou un script qui fasse le boulot :
L'idée serait de rechercher toute les occurence d'une chaine de caractère avec les guillemets et de la remplacer par une autre
Le script devrait parcourir un fichier CSV qui contiendrait le dico de conversion :
Exemple :
Pourquoi je précise avec les guillemets, car un même mot peu etre utilisé dans plusieurs context, seul ou dans une phrase ou dans un groupe de mot :
Exemple ici :
"In der gesamten Applikation wird vom Präsenzmelder gesprochen. Ob sich die Applikation als Präsenz- oder als Bewegungsmelder verhält, wird von der verwendeten Hardware (Präsenz-Sensor) bestimmt."
si on remplace d'abord Präsenzmelder et que l'on recherche ensuite l'occurence de la phrase complete elle ne sera plus trouvé et on ne pourra pas la traduire par ca :
"Dans toute l'application, on parle de détecteur de présence. C'est le matériel utilisé (capteur de présence) qui détermine si l'application se comporte comme un détecteur de présence ou comme un détecteur de mouvement"
J'ai trouvé un script python qui fonctionne mais sans les guillemets, je pense pas que ce soit bien compliqué pour qq maitrisant la prog, donc si qq a une solution, ce serait sympa
Comme j'ai commencé a l'expliqué ici je suis en train de traduire des produits du projet OpenKNX fait par des allemand.
On a donc 2 type de chose a traduire, un fichier XML, puis des fichiers texte qui contiennent l'aide interactive dans ETS.
Dans le fichier XML on par exemple ceci :
<Enumeration Text="Präsenzmelder" Value="2" Id="M-00FA_A-A012-32-0000_PT-ModuleSelector_EN-2" />
<ParameterSeparator Id="M-00FA_A-A012-32-0000_PS-212" Text="In der gesamten Applikation wird vom Präsenzmelder gesprochen. Ob sich die Applikation als Präsenz- oder als Bewegungsmelder verhält, wird von der verwendeten Hardware (Präsenz-Sensor) bestimmt." />[/code]
Pour le moment j'ai fais du Recherche et Remplace dans Notepad++ pour valider le concept et pour voir si ca fonctionne ensuite dans ETS, comme je ne regénère pas une nouvelle version d'application il faut ruser un peu, mais bon ca marche et le problème est pas là.
Je souhaiterais automatiser la traduction, faire une petite application ou un script qui fasse le boulot :
L'idée serait de rechercher toute les occurence d'une chaine de caractère avec les guillemets et de la remplacer par une autre
Le script devrait parcourir un fichier CSV qui contiendrait le dico de conversion :
Exemple :
Code :
original,change to
"Präsenzmelder","Détecteur de présence"
"Ja","Oui"
Pourquoi je précise avec les guillemets, car un même mot peu etre utilisé dans plusieurs context, seul ou dans une phrase ou dans un groupe de mot :
Exemple ici :
"In der gesamten Applikation wird vom Präsenzmelder gesprochen. Ob sich die Applikation als Präsenz- oder als Bewegungsmelder verhält, wird von der verwendeten Hardware (Präsenz-Sensor) bestimmt."
si on remplace d'abord Präsenzmelder et que l'on recherche ensuite l'occurence de la phrase complete elle ne sera plus trouvé et on ne pourra pas la traduire par ca :
"Dans toute l'application, on parle de détecteur de présence. C'est le matériel utilisé (capteur de présence) qui détermine si l'application se comporte comme un détecteur de présence ou comme un détecteur de mouvement"
J'ai trouvé un script python qui fonctionne mais sans les guillemets, je pense pas que ce soit bien compliqué pour qq maitrisant la prog, donc si qq a une solution, ce serait sympa
Code :
import lxml.html # check https://pypi.org/project/lxml/
from csv import reader
from os.path import exists
import glob
def update_xml(path: str) -> None:
with open('./convertions.csv', 'r') as convertions, open(path, 'r') as annotation: # noqa: E501
tree = lxml.html.fromstring(annotation.read())
csv_reader = reader(convertions)
for idx, row in enumerate(csv_reader, start=1):
if idx == 1:
continue
original, change_to = row
tags = tree.xpath(f".//name[text()='{original}']")
for tag in tags:
tag.text = change_to
print(f'Changed class {original} to {change_to} in {path}')
with open(path, 'wb') as annotation:
new_content = lxml.html.tostring(tree)
if new_content.strip():
annotation.write(new_content)
print(f'Processing on {path} done')
if __name__ == '__main__':
for xml_file in glob.glob('*.xml'):
if exists(xml_file):
update_xml(path=xml_file)
KNX Partner Base / Avancé
Ma boite de MP est pleine, merci de créer un post si vous avez une question, cela profitera a tout le monde.
Ma boite de MP est pleine, merci de créer un post si vous avez une question, cela profitera a tout le monde.