Je suis un utilisateur de lecteur seulement depuis longtemps, et je suis reconnaissant pour toutes les questions répondues par cette grande communauté.Comment faire un @property par défaut pour tous les attributs d'une classe?
J'ai deux questions connexes, l'une concerne la programmation et l'autre le processus de traduction.
Je veux développer une application et multilangue avec ma petite connaissance que je l'ai fait ce qui suit dans dialog.py
:
LANGUAGE = 'es-Es' # Get this variable from a conf file if defined
class Dialog:
SUPPORTED_LANGUAGES = ['es-ES', 'en-GB']
def __init__(self, lan):
if lan in SUPPORTED_LANGUAGES:
self.lan = lan
else:
self.lan = 'es-ES' # Use a default conf here
_OPEN_MENU={
'es-ES': 'Abrir...',
'en-GB': 'Open...',
}
_CLOSE_MENU={
'es-ES': 'Cerrar',
'en-GB': 'Close',
}
_QUIT_APP_MENU={
'es-ES': 'Salir',
'en-GB': 'Quit',
}
.
.
.
@property
def OPEN_MENU(self):
return self._OPEN_MENU[self.lan]
@property
def CLOSE_MENU(self):
return self._CLOSE_MENU[self.lan]
@property
def QUIT_APP_MENU(self):
return self._QUIT_APP_MENU[self.lan]
.
.
.
dialog = Dialog(LANGUAGE)
Disons donc que dans main.py
je peux utiliser:
from dialog import dialog
dialog.OPEN_MENU # With actual conf this returns 'Abrir...'
dialog.CLOSE_MENU # 'Cerrar'
dialog.QUIT_APP_MENU # 'Salir'
Le premier question, y at-il un moyen de faire quelque chose comme ça sans décorer et répéter le code pour chacune des chaînes (ce n'est pas très pythonique)? Le but final est d'avoir un code aussi sympa dans le fichier principal, afin qu'il ne soit pas en désordre. La seconde, je connais peu de choses sur le développement d'applications, est-ce la façon dont je suis supposé travailler ou y a-t-il un meilleur moyen que je n'ai pas trouvé? Comment les développeurs gèrent-ils cette situation?
Merci beaucoup!
Désolé, mais votre question n'est pas vraiment évidente pour moi - "La première question, est-il possible de faire quelque chose comme ça sans décorer et répéter le code pour chacune des chaînes (ce n'est pas très pythonique)? " décorer et répéter le code? Quel code? Pour quelles cordes? Pouvez-vous * nous montrer ce que vous voulez dire *? –
Oui, donnez-moi quelques minutes pour modifier la question. Le problème fondamental est que j'ai plusieurs chaînes que je veux être multilingue, donc je dois répéter la définition de la propriété pour chacun d'eux. –
Vous ré-inventez la roue. Le module gettext fournit des services d'internationalisation (I18N) et de localisation (L10N) pour vos modules et applications Python. https://docs.python.org/3/library/gettext.html http://zetcode.com/wxpython/in18/ –