2011-02-07 38 views
2

我们有100多种形式的大型解决方案,它们都有英文标签和按钮等。多种形式的全球化

所有的表格都有共同的文字,比如说在至少20个表格上有“Job”这个词。

我们正在寻求走向不同的市场,并要求所有表单都用不同的语言。通过研究.NET全球化技术,我们发现标准方法并不适合我们;该方法是一种编码解决方案。我们想避免复制

button.Text = ResourceManager.getString("job");` 

20 +形式,并期待看看是否有一个更简单的解决方案。 (我们在应用程序启动时设置了文化)

我们想到的一个是我们可以绑定到表单的resx(资源文件),然后在该资源文件中选择一个值以绑定到标签或按钮文本。据我们所知,我们无法找到像这样的简单解决方案。

我们知道我们可以在每个表单后面创建.resx文件,但是如果我们希望在将来包含更多语言时,这会产生太多的开销 - 并且当“Job”这个单词超过多个时,还有不必要的重复一种形式。

是否存在解决方案,我们可以将资源文件(或Satellite Assembly)绑定到每个表单/组件(无需代码),然后选择我们想要显示的值?或者是否有类似的替代解决方案?

+0

该代码是自动生成的,它不会花费任何东西。要求本地化服务做非标准的工作将花费你很多。 – 2011-02-07 20:50:08

回答

0

最后,由于项目的规模,我们不得不使用编码解决方案。

我们在一个新的解决方案中添加了这个包含所有我们使用的语言以及默认集合(英文)的资源文件。

在我们将所有组件的文本值的每个页面的构造函数中使用

job_label.Text = LanguageResources.job; //example to display "job" on a label 

由于Visual Studio创建强类型类的资源文件,我们可以直接调用资源文件LanguageResources和访问它的任何领域。 然后我们创建了LanguageResources.de-DE.resx并使用所有与英文版相同的密钥填充,但使用德文值。

感谢.NET的全球化技术,我们可以在.config文件中设置语言,以便在应用程序运行时查看需要显示哪种语言并访问相应的资源文件。如果语言无法识别,则默认为英语。

0

有一种方法可以很简单地做到这一点。首先创建您希望翻译的所有窗体上所有控件的Text属性的列表(这样您就可以“确定”,“取消”,“作业”,“删除”等)。然后让某人翻译您希望支持的任何语言的每个术语(并将翻译添加到每个支持语言的单独列中)。然后在您的应用程序中嵌入/包含此列表(作为CSV,数据库,XML文件或任何您喜欢的内容)。

在每个表单的Load事件中,调用遍历表单上每个控件的方法(递归地,因此您还可以拾取位于容器控件上的任何控件),查找控件在您的翻译列表中的Text属性,并将文本更改为翻译的值(基于您确定和/或设置的其他语言的当前语言)。

我总是为此使用Excel电子表格,因为它很容易嵌入,并且易于发送以添加附加术语和/或附加语言。

在.Net中使用内置的全球化功能是一个痛苦的运动,恕我直言,通常要求程序员精通语言来支持。

+0

这个策略一直有效,直到你有一个单词在不同的地方有不同的翻译(例如,搜索法语中的动词是Chercher,但搜索作为名词是Recherche)。然后你最终得到命名空间(如Search.verb)和一些管理头痛。 – 2011-02-07 20:48:57

+0

有趣的想法,但作为我上面的帖子说,我们有很多单词是相同的英语,但取决于你如何使用它们,他们可能会在不同的语言中有不同的拼写/含义。谢谢,请牢记这一点。 – Andrew 2011-02-07 20:53:35