2

我已经创建了.resx文件:Translate.English.resx并且Translate.Romanian.resx包含这样的字符串:

MainWindowTitle : English Value

在罗马尼亚文件中:

MainWindowTitle : Valoarea in Romana.

现在我的问题是:我如何强制程序解释这里的代码:

  • 我有一个stringlang,首先等于en
  • 我有MainWindow.Text = Translate.English.MainWindowTitle
  • 现在我希望它更容易实现,所以除此之外:

    switch(lang){
        case "ro":
            MainWindow.Text = Translate.English.MainWindowTitle;
        break;
    
        case "en":
            MainWindow.Text = Translate.Romanian.MainWindowTitle;
        break;
    }
    

所以,除此之外,我希望它是这样的:

   lang = "ro";
   MainWindow.Text = Translate.(lang value).MainWindowText

我怎样才能做到这一点?

4

3 回答 3

1

看看这篇文章。 您必须将 resx 文件重命名为“translate.en.resx”和“translate.ro.resx”之类的名称。然后你可以做这样的事情:

CultureInfo.GetCultureInfo("en");
or
CultureInfo.GetCultureInfo("ro");
MainWindow.Text = translate.MainWindowText;
于 2012-10-13T12:53:55.937 回答
0

楼上的人都是对的。除此之外,您还可以使用类似的方式实时更改语言。

private void RefreshResources(Control ctrl, ComponentResourceManager res)
{
   ctrl.SuspendLayout();
   res.ApplyResources(ctrl, ctrl.Name, CurrentLocale);
   foreach (Control control in ctrl.Controls)
      RefreshResources(control, res); // recursion
   ctrl.ResumeLayout(false);
}

如果您想要一个完整的示例,请在此处查看我的博客

于 2013-01-07T15:20:47.533 回答
0

在您的项目中选择 Add New Item 和 Selected Resource Files。

取一个类似 String.resx、String.ro.resx、String.tr.resx、String.fr.resx 的名称。

4 种不同语言的示例用法:

  Console.WriteLine(Localize("name", "ro"));
  Console.WriteLine(Localize("name", "en"));
  Console.WriteLine(Localize("name", "fr"));
  Console.WriteLine(Localize("name", "tr"));


public static string Localize(string name, string languageCode)
{
  return Strings.ResourceManager.GetString(name, new CultureInfo(languageCode));
}
于 2012-10-13T13:14:21.357 回答