如何为一个类中的所有属性执行默认的@property?

时间:2017-09-29 19:25:32

标签: python wxpython language-translation

我很长一段时间以来一直是读者用户,我很感谢这个大社区所回答的所有问题。

我有两个相关的问题,一个是关于编程的,另一个是关于翻译过程的。

我想开发一个多语言应用程序,凭借我的一点知识,我已经在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)

让我们说main.py我可以使用:

from dialog import dialog

dialog.OPEN_MENU # With actual conf this returns 'Abrir...'
dialog.CLOSE_MENU # 'Cerrar'
dialog.QUIT_APP_MENU # 'Salir'

第一个问题,有没有办法做这样的事情而不装饰和重复每个字符串的代码(这不是非常pythonic)?最终的目标是在主文件中有这么好的代码,所以它不会弄乱。

第二,我对应用程序开发知之甚少,这是我应该如何工作还是有更好的方式我没找到?开发人员如何处理这种情况?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您似乎非常努力地创建一个用于保存数据的类。可以创建一个数据结构来保存数据。

您可以为每种语言创建键值对。将它们保存在json文件中,并使用language-key读取正确的json文件。使用字典的键而不是对象的属性来引用文本。