在c#中本地化UserControl的最佳方法(winforms)

时间:2017-12-18 18:36:58

标签: c# winforms datagridview user-controls

我缺乏知识,我编辑了这个问题

我正在使用UserControl DataGridView并且我希望尽可能简化实施过程,所以我想知道我应该使用本地化吗? 据我所知,research到目前为止,我的本地化方法是:

例如,假设我的form/UserControl上有一个按钮,文本属性设置为“hello”,现在我想将form/UserControl本地化为意大利语。

  1. 将localizable属性设置为true并选择语言(在本例中为 意大利)
  2. Google翻译
  3. 将text属性设置为“Ciao”​​
  4. 默认为英语,所以我的表单中已有.resx个文件,但在此之后,VS会为button.Text属性生成和“ciao”的意大利语资源作为,如果我理解正确,但是如果有人来,将button.Text属性从hello更改为“hello world”会发生什么,那么我的意大利语资源将不正确,除非它们被更改手动,有没有办法以某种方式自动进行此更改?

    我想知道这一点,因为当UserControl DataGridView form在某些DataGridView上实施时,我无法确定CREATE TABLE #Test ([value] char(1), effective_date date) INSERT INTO #Test ([value], effective_date) VALUES ('A', '2000-10-31'), ('A', '2000-11-30'), ('B', '2000-10-31'), ('B', '2000-11-30'), ('C', '2001-10-31'), ('C', '2001-12-31') SELECT * FROM ( SELECT [value] AS 'Display', [value], effective_date FROM #Test ) AS SRC PIVOT ( COUNT([value]) FOR effective_date IN ([2000-10-31], [2000-11-30], [2001-10-31], [2001-12-31]) ) AS PVT DROP TABLE #Test 会有哪些列,所以我我想知道我是否应该将本地化流程留给实施控制权的人?

    谢谢,我非常感谢您的帮助,对不起编辑。

2 个答案:

答案 0 :(得分:4)

最好的选择是使用代码设置(本地化)文本(使用一个资源文件)。
例如,您可以在表单的/用户控件的构造函数中执行此操作 尽量避免对每个表单/用户控件使用resx,因为这可能会导致无法维护的代码(重复的键/值),除非您使用第三方工具本地化整个应用程序,如(Infralution Globalizer

以上工具不是免费的,但它是我用过的唯一一个

构造函数中的代码将如下所示(假设您有一个YourResourceFile.resx)

public MyUserControl()
{
        columnFirstName.Header = YourResourceFile.FirstName;
        columnLastName.Header = YourResourceFile.LastName;
}

如果要在网格上添加更多列,请添加:

  1. 资源文件中的密钥
  2. 构造函数中的新行
  3. 事实上,通常,步骤1不是必需的,因为密钥可能会在那里

    <强>更新
    似乎有一个名为ResXManager或(here)的流行VS插件。

答案 1 :(得分:1)

您的UserControl的Localizable属性应设置为true。

此外,您要翻译的UserControl的任何自定义属性都应添加以下内容:

[Localizable(true)]
public string MyTranslatableLabel
{
    get;set;
}

您可能还必须从包含UserControl的Form的Designer.cs文件中删除如下所示的任何实例,以使其正常工作:

this.myUserControl.MyTranslatableLabel = "Initial label of user control";

所有这些均已在MS VisualStudio 2017社区中进行了测试