C#:如何将winforms按钮的文本绑定到资源

时间:2009-08-24 13:39:54

标签: c# winforms text internationalization

我们有一个资源文件,其中包含许多已翻译的字符串,这些字符串在我们的应用程是否有更好的方法将例如按钮的文本绑定到某个字符串?

目前我们通常只是在构造函数,Load事件处理程序或其中一个调用的方法中执行类似的操作:

someButton.Text = CommonTexts.SomeString;
someMenuItem.Text = CommonTexts.SomeOtherString;

有更好的方法吗?也许在设计师?或者这是推荐的做法吗?


只是为了让您知道我们如何进行实际翻译:我们有一个只包含resx文件的类库项目。主要的resx文件是用英语写的(当然)。然后,我们在名为ResEx的应用程序中打开这些基本resx文件,我们(或其他人)将其翻译成其他语言。编译时,Visual Studio会自动为每种语言创建程序集,这些程序集将根据当前文化集自动使用。这非常有效,所以我真的不需要关于如何进行翻译的信息(虽然我总是对改进当然感到好奇)。我要问的是,是否有更好的方法可以将资源组件中的翻译字符串转换为所有各种Text属性。

6 个答案:

答案 0 :(得分:3)

你可以这样做:

using System.Resources;
using System.Reflection;

Assembly assembly = this.GetType().Assembly;
resman = new ResourceManager("StringResources.Strings", assembly);
btnButton.Text = resman.GetString("ButtonName");

答案 1 :(得分:3)

我理解,这是一个老问题,但我仍然有同样的问题(VS 2010),谷歌的第一个链接就是这个话题。

为了将所有文本移动到表单资源文件 - 您需要将winform Localizable属性设置为True。就是这样。 :) (c)上限。 O操作。

答案 2 :(得分:1)

有一个名为LingoBit Localizer的好工具可以在构建所有资源文件所需的时间内完成工作。

在开发过程中,您不必关心其他语言,只需编写和设置属性,就像编写单语言软件一样。完成后或任何时候,您可以在DLL或Windows窗体应用程序上运行LingoBit Localizer。这将在GUI中为您提供用户可显示的字符串。现在,如果您的程序员不知道应用程序必须翻译的语言,也许专业翻译人员可以使用翻译单词。然后,您只需在完成后保存项目。这将创建一个DLL文件,您只需将其添加到二进制部署目录中,然后您的应用程序将根据应用程序的当前文化信息自动将其自身设置为正确的语言。是安装左右。这节省了大量的编程时间和麻烦。

希望这有帮助,即使它不是基于资源的解决方案。

答案 3 :(得分:1)

这将提取Home关键字的值并填充到Text1 Box。

Text1.Text= Resource.Home.ToString();

答案 4 :(得分:0)

如果您的开发人员不熟悉您正在翻译您的应用程序的语言,那么您的方式是最好的方法。之前我已经用英语应用程序完成了这项工作,必须翻译成西班牙语,葡萄牙语和中文(我只能半流利地说这些)。原始表单都是用英语创建的,在表单的Load事件中,代码遍历每个控件并在翻译电子表格中搜索每个控件的Text属性,并用适当的翻译替换它。

将表单国际化的内置方式(基本上是表单继承的变体)假定程序员能够流利地使用您需要翻译的语言,这几乎是一个延伸,它需要您手动输入每个表单和每种语言的所有翻译文本值。它还使您的二进制文件更大(可能更大),因为它为您支持的每种语言的每个表单添加.resx文件。

答案 5 :(得分:0)

试试这个:

someButton.DataBindings.Add(“Text”,CommonTexts,“SomeString”);