Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
973 connectés 

  FORUM HardWare.fr
  Programmation
  Python

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2479610
le fou
Forza Massallia
Posté le 17-09-2024 à 23:42:18  profilanswer
 

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)
mood
Publicité
Posté le 17-09-2024 à 23:42:18  profilanswer
 

n°2479626
mechkurt
Posté le 18-09-2024 à 08:36:24  profilanswer
 

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
n°2479723
le fou
Forza Massallia
Posté le 18-09-2024 à 13:58:44  profilanswer
 

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)
n°2479817
le fou
Forza Massallia
Posté le 18-09-2024 à 18:50:35  profilanswer
 

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)
n°2479818
rat de com​bat
attention rongeur méchant!
Posté le 18-09-2024 à 19:04:44  profilanswer
 

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.


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°2479975
gilou
Modérateur
Modzilla
Posté le 19-09-2024 à 23:49:46  profilanswer
 

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é!  --
n°2480013
rat de com​bat
attention rongeur méchant!
Posté le 20-09-2024 à 14:32:18  profilanswer
 

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:


---------------
Ne laissez pas mourir vos sujets en cours de route!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

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

 

Sujets relatifs
Erreur copie contenu fichier .odt dans fichier htmlConfig de VS pour un fichier txt ?
Lire un fichier PDFmodifier un fichier texte automatiquement
batch lecture fichier temps réelBase HFSQL fichier .mmo
conversion fichier pdf en jsonfonction illisible dans un fichier annexe
Ouvrir un fichier en local au lieu de le télécharger ?Création fichier gestion tournoi format suisse
Plus de sujets relatifs à : Gérer des chaines de caractéres en fonction d'une langue (en/fr)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)