我正在尝试在Winform应用程序中使用本地化,但我有几个问题。我本来想问最复杂的一个,但是现在我遇到了一个基本问题。
我已经构建了带有窗体,标签和菜单条的基本winform。
我已将表单本地化设置为true,并以三种不同的语言设置了标签的文本。结果,我得到了Form1.es.resx,Form,1.ja.resx和默认的Form1.resx。
我已经检查过,默认的是英文。但是,当我运行该应用程序时,该标签以日语显示(我的操作系统为Windows Japanese)。 HTTP 401
不是默认值吗?
当我将Form1 Language属性设置为English时,也会发生这种情况。
答案 0 :(得分:2)
首先需要以以下格式添加资源文件:默认保留原样,对于特定语言,请使用资源格式。[code-CODE]
如果要在运行时更改语言,则必须“手动”更新控制文本,否则只需在Application.Run之前设置线程区域性信息即可。
class CultureItem
{
public string Name { get; set; }
public CultureInfo CultureInfo { get; set; }
}
public partial class MainForm : Form
{
private CultureItem[] culutures = new CultureItem[]
{
new CultureItem() {Name = "Default", CultureInfo = new CultureInfo("en-US")},
new CultureItem() {Name = "Italy", CultureInfo = new CultureInfo("it-IT")},
new CultureItem() {Name = "Japan", CultureInfo = new CultureInfo("ja-JP")}
};
public MainForm()
{
InitializeComponent();
comboBox1.DataSource = culutures;
comboBox1.DisplayMember = "Name";
}
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
var selected = comboBox1.SelectedItem as CultureItem;
if (selected != null)
{
Thread.CurrentThread.CurrentUICulture = selected.CultureInfo;
ApplyLocalization();
}
}
public void ApplyLocalization()
{
button1.Text = Properties.Resources.button;
}
}
答案 1 :(得分:1)
运行应用程序时,标签以日语显示(我的操作系统为 Windows日语)。 Form1.resx不是默认值吗?
对于没有当前线程UI文化的语言资源文件的情况,默认资源文件是一个后备。由于默认的操作系统语言是日语(默认情况下,除非您通过代码对其进行更改),所以当前的线程UI区域性是日语,并且由于您具有日语文件,因此该表单将以日语显示。