Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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#:如何将winforms按钮的文本绑定到资源_C#_Winforms_Text_Internationalization - Fatal编程技术网

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

C#:如何将winforms按钮的文本绑定到资源,c#,winforms,text,internationalization,C#,Winforms,Text,Internationalization,我们有一个资源文件,其中包含许多在应用程序中不同位置使用的已翻译字符串。是否有更好的方法将按钮的文本绑定到某个字符串 目前,我们通常在构造函数、加载事件处理程序或其中一个调用的方法中执行类似操作: someButton.Text = CommonTexts.SomeString; someMenuItem.Text = CommonTexts.SomeOtherString; 有更好的方法吗?也许是设计师?或者这是推荐的方法 只是想让您知道我们是如何进行实际翻译的:我们有一个类库项目,它只包

我们有一个资源文件,其中包含许多在应用程序中不同位置使用的已翻译字符串。是否有更好的方法将按钮的文本绑定到某个字符串

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

someButton.Text = CommonTexts.SomeString;
someMenuItem.Text = CommonTexts.SomeOtherString;
有更好的方法吗?也许是设计师?或者这是推荐的方法


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

您可以:

using System.Resources;
using System.Reflection;

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

如果您的开发人员个人对您要将应用程序翻译成的语言不熟练,那么您的方法就是最好的方法。我以前用过一个英语应用程序,它必须翻译成西班牙语、葡萄牙语和汉语(我只会说其中一种半流利)。原始表单都是用英语创建的,在表单的Load事件中,代码遍历每个控件,在翻译电子表格中搜索每个控件的文本属性,并用适当的翻译替换它

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

尝试以下方法:


someButton.DataBindings.Add(“Text”,commonText,“SomeString”)

有一个名为的好工具,它可以在构建所有reasources文件所需的时间内完成这项工作

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


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

这将提取Home关键字的值并填充到
Text1
框中

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

我明白,这是一个老问题,但我还是有同样的问题(VS2010),谷歌的第一个链接就是这个话题

为了将所有文本移动到表单资源文件,您需要将winform Localizable属性设置为True。就这样。:)
(c) 帽子。O.

这与我已经做的方法相同,只是要复杂得多:p@Thomas:我不认为海报的意思是“数据绑定”中的绑定。在VS2008(可能是2005)中,通过向项目添加资源文件而获得的默认资源管理器会公开以键值命名的属性,因此“btnButton.Text=resman.ButtonName,省去了对字符串中键入错误的担忧。这是解决此问题的合理方法。如果他们支持葡萄牙语…你也可以使用VisualLocalize。我们经常使用这个工具。好的是,如果翻译后的文本适合控件,您可以稍后检查所有对话框,如果不适合,您只能用这种语言调整控件的大小,新的大小将存储在sattelite-assembly中本地化文本的旁边。编辑:反问题是:为什么不使用默认的FormLoad系统?它是内置的,不可见的。因为我想知道是否有更好的方法。