C# 翻译实现
我已经创建了toC# 翻译实现,c#,user-interface,translate,C#,User Interface,Translate,我已经创建了to.resx文件:Translate.English.resx和Translate.Romanian.resx,其中包含如下字符串: MainWindowTitle : English Value CultureInfo.GetCultureInfo("en"); or CultureInfo.GetCultureInfo("ro"); MainWindow.Text = translate.MainWindowText; 在罗马尼亚文件中: MainWindowTitle :
.resx
文件:Translate.English.resx
和Translate.Romanian.resx
,其中包含如下字符串:
MainWindowTitle : English Value
CultureInfo.GetCultureInfo("en");
or
CultureInfo.GetCultureInfo("ro");
MainWindow.Text = translate.MainWindowText;
在罗马尼亚文件中:
MainWindowTitle : Valoarea in Romana.
现在我的问题是:我如何强制程序解释如下代码:
- 我有一个名为
的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
我如何才能做到这一点?请检查您必须将您的resx文件重命名为类似“translate.en.resx”和“translate.ro.resx”的文件。然后你可以这样做:
MainWindowTitle : English Value
CultureInfo.GetCultureInfo("en");
or
CultureInfo.GetCultureInfo("ro");
MainWindow.Text = translate.MainWindowText;
选择“在项目中添加新项和选定的资源文件” 给出一个类似String.resx、String.ro.resx、String.tr.resx、String.fr.resx的名称 四种不同语言的示例用法:
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));
}
上面所有的人都是对的。除此之外,您还可以通过类似的方式实时更改语言
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);
}
如果你想要一个完整的例子,请查看我的博客