我创建了.resx
个文件:Translate.English.resx
和Translate.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
我该怎么做?
答案 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