【问题标题】:Regionalisation Design Patterns in C#C# 中的区域化设计模式
【发布时间】:2013-08-24 09:09:03
【问题描述】:

我目前正在为将用于多种语言的界面创建一个 GUI。

我工作的环境是 Unity 4.2 和 Mono C#。应用程序必须保持非常跨平台兼容(包括 web、ios、Linux、windows)。

我想要实现的是一种处理多种语言的好方法,允许轻松添加额外的语言或额外的字段。如果我在 ruby​​ 或 python 中工作,我相信这可能是一个不错的解决方案;

class RegionalDB:
    def __init__(self):
        # Maybe connect to a data source such as a db, or files

    def set_language(self, lang):
        # Verify we have this lang, error if not
        # Set an attribute on self for every field entry in this language

text = RegionalDB()
text.set_language('de')

print text.exit_button

上述方法将允许我使用 python 对象的强大功能,能够在运行时动态分配成员。上面的代码将以德语打印数据源的“exit_button”字段中的文本。在 ruby​​ 中我可以做类似的事情,或者我可以使用 attribute_missing 函数直接查询数据源,而不是一次将内存中的所有变量分配给对象。

不幸的是,C# 的反射代码不如上面提到的脚本那么优雅。所以我的问题如下;

  1. 使用编译的强类型语言创建优雅、可维护的区域化工具。
  2. 使用统一以有效的方式存储语言数据

对于问题 1。老实说,我找不到设计模式,或者根本找不到太多信息。

问题 2。我相信可以通过一些统一编辑器编程来解决,但我没有过多地触及这个话题并且愿意提出建议。

所以问题形式;

  1. 有没有人知道任何可以与 C# 一起很好地用于区域化的设计模式
  2. 关于统一编辑器中的接口/存储机制的前进方向的任何建议

谢谢。

附:我必须能够在运行时更改语言

【问题讨论】:

    标签: c# design-patterns internationalization mono unity3d


    【解决方案1】:

    有很多 C# 应用程序已经支持 l10n。

    我将它们分为三种类型:

    1. 基于资源的国际化:文本存储在 XML 文件中。这是微软的方式
    2. 基于 PO 的国际化:使用长期存在的 gettext 技术,其中包括许多 Unixy 工具来处理更新原始文本和翻译。您可以通过查看一些 Mono 桌面应用程序的代码(即:Banshee)来了解其工作原理,并查找使用 Mono.Posix 程序集作为链接引用的 Catalog.GetString() 调用。
    3. Vernacular-based 国际化:在移动应用中用于抽象每个移动平台的本地化细节,并有一个通用的方法。

    在我看来,最好和最现代的方法是后者。但如果你的目标是桌面应用,我想你可以创建/贡献一个新的 Vernacular 后端来满足这个目的。

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 2012-10-09
      • 1970-01-01
      • 2012-03-10
      相关资源
      最近更新 更多