C# Net中的多语言Winforms-意见和建议
所以我有一个需要多语言的程序。我所需要的和我在网上发现的唯一区别是,我的程序将运行的所有计算机都设置为EN本地化 我们有讲西班牙语的员工,他们将像讲英语的员工一样使用该计划。因此,我无法根据计算机的本地化设置某些内容,所有这些都必须在代码中完成 我想尝试为我拥有的每个表单创建一个XML文件(实际上只是一个数据集),并让每个数据表成为一种可选择的语言。在每个表中,它都有信息(控件名、属性和文本)来设置需要设置的标签/复选框等。我必须创建一个新的表单控件,这样我就可以使用一个通用函数来遍历并重命名所有这些控件(如果可能的话)C# Net中的多语言Winforms-意见和建议,c#,winforms,multilingual,C#,Winforms,Multilingual,所以我有一个需要多语言的程序。我所需要的和我在网上发现的唯一区别是,我的程序将运行的所有计算机都设置为EN本地化 我们有讲西班牙语的员工,他们将像讲英语的员工一样使用该计划。因此,我无法根据计算机的本地化设置某些内容,所有这些都必须在代码中完成 我想尝试为我拥有的每个表单创建一个XML文件(实际上只是一个数据集),并让每个数据表成为一种可选择的语言。在每个表中,它都有信息(控件名、属性和文本)来设置需要设置的标签/复选框等。我必须创建一个新的表单控件,这样我就可以使用一个通用函数来遍历并重命名所
<DataSet>
<English>
<ControlName>labelHello</ControlName>
<ControlProperty>Text</ControlProperty>
<Text>Hello</Text>
</English>
<English>
<ControlName>labelBye</ControlName>
<ControlProperty>Text</ControlProperty>
<Text>Bye</Text>
</English>
<Spanish>
<ControlName>labelHello</ControlName>
<ControlProperty>Text</ControlProperty>
<Text>Hola</Text>
</Spanish>
</DataSet>
拉贝尔你好
正文
你好
拉贝尔拜
正文
拜伊
拉贝尔你好
正文
赫拉
另外,我对每个表单的资源文件中的字符串也不太了解。我可以从那里开始并使用.Net函数来实现这一点吗
所以我想提出很多建议,因为我真的不想回到我刚刚写的程序中,我讨厌在我花了这么多时间和这个笨蛋在一起后再回去添加更多的功能
谢谢您可以在代码中设置所需的区域性,例如:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES");
有关更多信息,请参阅。这是一种痛苦,但并不难。在VS2008的WinForm designer中,选择表单,查看其属性并设置Localizable=True(如果查看分部类/代码隐藏文件,您将看到一行新代码,如下所示
resources.ApplyResources(this, "$this")
然后,对于要支持的每个区域设置,选择“语言”,并通过默认本地语言本地化所需的任何更改
我相信Windows允许用户为指定的应用程序指定不同的区域设置。我上次在Windows 2000上尝试过这一点。在Windows中,您可以使用计算机区域性EN,但在浏览器中,个人电脑用户可以选择首选区域性(即Firefox)。电脑上的其他所有内容都是英语 在IE中,转到“工具、选项”,单击“常规”选项卡上的“语言”按钮。 您可以指定首选的语言层次结构
否则,使用Joes的答案。很酷。因此我认为如果你为整个线程设置此值,所有内容都将是此区域性。我希望在返回“主页”时重置此值。我想如果使用此方法,我必须将其设置回EN。感谢主线程中的所有内容都将使用指定的UICulture(和/或文化)您设置。不确定返回“主页”是什么意思-标题提到WinForms,我理解“主页”是一个web概念。“主页”只是我程序中的主窗体。它打开了子窗体。因此,如果我创建后台工作程序,因为它们位于不同的线程上,它们是否具有相同的CurrentUICulture集?后台工作程序不会自动继承区域性:您需要显式设置它(尽管在某些情况下这是不必要的,因为后台工作人员通常没有任何用户交互)。