【问题标题】:How can I do a default @property for all the attributes in one class?如何为一个类中的所有属性设置默认的@property?
【发布时间】:2017-09-29 19:25:32
【问题描述】:

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

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

我想开发一个多语言应用程序,我的知识很少,我在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)?最终目标是在主文件中有这么好的代码,这样就不会乱七八糟了。

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

非常感谢!

【问题讨论】:

  • 对不起,但你的问题对我来说并不是很明显 - “第一个问题,有没有办法在不装饰和重复每个字符串的代码的情况下做这样的事情(这是不是很pythonic)?”装饰和重复代码?什么代码?对于什么字符串?你能告诉我们你的意思吗?
  • 是的,请给我几分钟时间来编辑问题。问题基本上是我有多个字符串,我想成为多语言,所以我必须为所有字符串重复属性定义。
  • 你在重新发明轮子。 gettext 模块为您的 Python 模块和应用程序提供国际化 (I18N) 和本地化 (L10N) 服务。 docs.python.org/3/library/gettext.htmlzetcode.com/wxpython/in18

标签: python wxpython language-translation


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我想避免像 DIALOGS[OPEN_MENU][LANGUAGE] 这样的事情,但这样做更容易,你是对的。编辑:我看错了,你的意思是有不同语言的不同文件,这也很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
相关资源
最近更新 更多