Gérer des chaines de caractéres en fonction d'une langue (en/fr)

Gérer des chaines de caractéres en fonction d'une langue (en/fr) - Python - Programmation

Marsh Posté le 17-09-2024 à 23:42:18    

Rapide description du contexte:
J'ai un projet actuel en python (oui forcément vu le topic) qui me permet à partir d'un fichier de données de générer automatiquement un fichier de code VHDL (fichier pour la description FPGA). Jusque là pas de soucis, sans doute pas le code le plus joli/optimal, mais fonctionnel. Le fichier généré contient une entête et pas mal de commentaire, le tout en français.

 

Bref, pour les besoins d'un nouveau projet, je souhaite pouvoir générer le fichier en français ou en anglais. Pour cela j'ai rajouté une option à mon script (via argparse), mais je m'interroge sur la gestion des commentaires.
En gros, le plus basique serait de faire :

 
Code :
  1. if lang == 'en':
  2.     print( f"Le code suivant permet de toto / tata" )
  3. else:
  4.     print( f"Next block allows to set toto or tata" )
 

Mais c'est un peu "lourd", dans le sens où ca alourdit pas mal le script d'autant que pour l'instant c'est """juste""" 2 langues.
J'aurais préféré quelque chose du genre:

 
Code :
  1. print( MSG_TOTO[lang] )
 

Et peut être un fichier annexe qui contiendrait l'ensemble des traductions. Je ne sais pas si c'est une bonne solution ou pas. Et comment le faire, c'est à dire faire des constantes et/ou utiliser une classe

 

Auriez-vous des conseils pour gérer ce genre de cas?

 

D'avance merci.


Message édité par le fou le 18-09-2024 à 16:45:48

---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 17-09-2024 à 23:42:18   

Reply

Marsh Posté le 18-09-2024 à 08:36:24    

Je ne connais pas Python mais ce que tu cherches à faire est regroupé pour tout les langages sous le terme "Internationalisation".
Tu peux chercher un peu dans Google ou dans la doc Python, en gros pour des petits truc tu peux te contenter de gérer des csv et des dictionnaires avec I18n['toto'] mais il est plus "propre" de passer par des fichiers de trad compilé .po et .mo (cf. aussi Poedit).
https://docs.python.org/fr/3/library/i18n.html
https://www.google.com/search?q=Pyt [...] pplication


---------------
D3
Reply

Marsh Posté le 18-09-2024 à 13:58:44    

Ah, je connaissais un peu ce principe pour du C++ (mais ca fait longtemps que j'en ai pas fait), je ne savais pas que cela était possible sous Python.
Je vais regarder.


---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 18-09-2024 à 18:50:35    

Mon idée 1ere (peut être très mauvaise) était de créer un classe comments, qui dans le constructeur définirait en fonction de l'argument passé le contenu d'attributs de la fonction.
Et ensuite j'aurais N méthode pour renvoyer la valeur de l'attribut.

 

Exemple:

 
Code :
  1. class comments:
  2.    def __init__(self,lang : str) -> None:
  3.       if lang == 'fr':
  4.          __msg_1 = 'oui je suis en France'
  5.       else:
  6.          __msg_1 = 'no i'm not in France'
  7.    def MSG_1(self) -> str:
  8.       return __msg_1
 

Et j'utiliserais alors la classe dans mon code actuel

 
Code :
  1. [...]
  2. msg = comments(lang)
  3. [...]
  4. toto = "place : "
  5. toto += msg.MSG_1
  6. [...]



Message édité par le fou le 18-09-2024 à 18:52:19

---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 18-09-2024 à 19:04:44    

Je connais pas non plus le Python, mais ces histoires d'internationalisation deviennent très vite un grand casse-tête. Donc à moins de vouloir s'exercer part sur une biblio toute prête et qui a fait ses preuves.


---------------
matos à vendre
Reply

Marsh Posté le 19-09-2024 à 23:49:46    

L'internationalisation, tant que c'est pour des phrases fixes, ça passe.
Par contre, des que tu fais des phrases a trous, a remplir par des variables texte localisées, ça merde à cause de la grammaire, en général.
A la limite, fais tout dans une langue, et pour l'autre fais des appels a une IA pour qu'elle te traduise les phrases, c'est à la mode :D
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-09-2024 à 14:32:18    

gilou a écrit :

Par contre, des que tu fais des phrases a trous, a remplir par des variables texte localisées, ça merde à cause de la grammaire, en général.

C'est à ce genre de choses que je pensais en disant "grand casse-tête"... :jap:


---------------
matos à vendre
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed