我们有一个大型的100+表单解决方案,这些表单都有标签和按钮等……用英语。
所有的表单上都有共同的文本,比如至少有20个表单上有"Job“这个词。
我们正在寻找一个不同的市场,并要求所有的形式都在不同的语言。在研究了.NET全球化技术之后,我们发现标准方法并不适合我们;该方法是一种编码的解决方案。我们希望避免复制
button.Text = ResourceManager.getString("job");`在20+表单中,我们正在寻找是否有更简单的解决方案。(我们在应用程序启动时设置区域性)
我们有一个想法是resx (资源文件),我们可以将其绑定到表单,然后在该资源文件中选择一个值来绑定到标签或按钮文本。据我们所知,我们找不到这样一个简单的解决方案。
我们知道我们可以在每个表单后面创建.resx文件,但是如果我们想在未来包含更多的语言,那么这样做的开销太大了--而且当“工作”这个词出现在多个表单上时,也会出现不必要的重复。
是否存在这样的解决方案:我们可以将资源文件(或Satellite Assembly )绑定到每个表单/组件(没有代码),然后只选择我们想要显示的值?或者,是否有类似的替代解决方案?
发布于 2011-02-22 04:40:19
最后,由于项目的规模,我们不得不使用编码解决方案。
我们添加了一个新的解决方案,这个解决方案只包含资源文件,其中包含我们使用的所有语言以及一个默认集(英语)。
在每个页面的构造函数中,我们使用
job_label.Text = LanguageResources.job; //example to display "job" on a label因为Visual Studio为资源文件创建了强类型的类,所以我们可以直接调用资源文件LanguageResources并访问其中的任何字段。然后,我们创建了LanguageResources.de-DE.resx,并用所有与英语版本相同的键和德语值填充它。
多亏了.NET的全球化技术,我们可以在.config文件中设置语言,这样当应用程序运行时,它就可以检查需要显示哪种语言并访问适当的资源文件。如果该语言无法识别,则默认为英语。
发布于 2011-02-08 04:44:24
有一种方法可以非常简单地做到这一点。首先创建一个列表,其中包含您希望翻译的所有表单上的所有控件的Text属性(这样您就会有"OK“、"Cancel”、"Job“、"Delete”等)。然后找人将每个术语翻译成您希望支持的任何语言(并为每种支持的语言单独添加翻译)。然后在你的应用程序中嵌入/包含这个列表(作为CSV、数据库、XML文件或任何你喜欢的文件)。
在每个窗体的Load事件中,调用一个方法来迭代窗体上的每个控件(递归地,这样您也可以选取容器控件上的任何控件),在转换列表中查找控件的Text属性,并将文本更改为翻译值(基于您在其他地方确定和/或设置的当前语言)。
为此,我一直使用Excel电子表格,因为它很容易嵌入,也很容易发送以添加其他术语和/或其他语言。
在.Net中使用内置的全球化特性是一件很痛苦的事情,而且通常需要程序员精通所支持的语言。
https://stackoverflow.com/questions/4926223
复制相似问题