Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的区域化设计模式#_C#_Design Patterns_Internationalization_Mono_Unity3d - Fatal编程技术网

C# C语言中的区域化设计模式#

C# C语言中的区域化设计模式#,c#,design-patterns,internationalization,mono,unity3d,C#,Design Patterns,Internationalization,Mono,Unity3d,我目前正在为一个将在多种语言中使用的界面创建GUI 我工作的环境是Unity 4.2和Mono C#。应用程序必须保持非常跨平台的兼容性(包括web、ios、Linux和windows) 我试图实现的是一种处理多种语言的好方法,允许轻松添加一种额外的语言或一个额外的字段。如果我使用ruby或python,我相信这可能是一个不错的解决方案 class RegionalDB: def __init__(self): # Maybe connect to a data sour

我目前正在为一个将在多种语言中使用的界面创建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#的反射代码没有上面提到的脚本那么优雅。因此,我的问题如下:

  • 用编译的强类型语言创建一个优雅的、可维护的区域化工具
  • 使用unity以有效的方式存储语言的数据
  • 关于第1期。老实说,我一直找不到设计模式,也找不到太多信息

    问题2。我相信通过一些unity editor编程可以解决这个问题,但我并没有太多涉及这个话题,我愿意接受建议

    因此,在问题的形式

  • 有人知道有什么设计模式可以很好地与C#配合使用以实现区域化吗
  • 关于unity编辑器中接口/存储机制的前进方向有何建议
  • 谢谢

    另外,我必须能够在运行时更改语言

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

    我将其分为三种类型:

  • 基于资源的国际化:文本存储在XML文件中。这是微软的方式
  • 基于PO的国际化:使用长期建立的gettext技术,包括许多Unixy工具,用于处理原始文本和翻译的更新。您可以通过查看一些Mono桌面应用程序(即:)的代码和Catalog.GetString()调用来了解其工作原理,这些调用使用Mono.Posix程序集作为链接引用
  • -基于国际化:用于移动应用程序中,以抽象每个移动平台的本地化细节,并在所有应用程序中使用通用方法
  • 在我看来,最好和最现代的方法是后者。但如果你的目标是桌面应用,我想你可以创建/贡献一个新的本地后端来满足这个目的