翻译实施

时间:2012-10-13 12:39:38

标签: c# user-interface translate

我创建了.resx个文件:Translate.English.resxTranslate.Romanian.resx,其中包含如下字符串:

MainWindowTitle : English Value

并在罗马尼亚文件中:

MainWindowTitle : Valoarea in Romana.

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

  • 我的string名为lang,首先与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

我该怎么做?

3 个答案:

答案 0 :(得分:1)

结帐this post.您必须将resx文件重命名为“translate.en.resx”和“translate.ro.resx”。然后你可以做这样的事情:

CultureInfo.GetCultureInfo("en");
or
CultureInfo.GetCultureInfo("ro");
MainWindow.Text = translate.MainWindowText;

答案 1 :(得分:0)

选择项目中的添加新项目和选定资源文件。

命名如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));
}

答案 2 :(得分: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);
}

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