Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Cherche Aide pour un petit Script
#1
Lightbulb 
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 :
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.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)