WinForms本地化。该语言不反映默认的resx文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinForms本地化。该语言不反映默认的resx文件相关的知识,希望对你有一定的参考价值。

我试图在winform应用程序中使用本地化,我有几个问题。我打算问最复杂的一个,但现在我遇到了一个基本的问题。

我已经用表格,标签和menustrip建立了一个基本的winform。

我已将表单本地化设置为true,并以三种不同的语言设置标签的文本。结果我得到了Form1.es.resx,Form,1.ja.resx和deafult Form1.resx。

我已经检查过,默认的是英文版。但是,当我运行应用程序时,标签出现在japanese(我的操作系统在windows japanese中)。 Form1.resx不是默认值吗?

当我将Form1语言属性设置为英语时也会发生这种情况。

答案

当我运行应用程序时,标签出现在japanese(我的操作系统在windows japanese中)。 Form1.resx不是默认值吗?

对于当前线程UI文化没有语言资源文件的情况,默认资源文件是后备。由于您的默认操作系统语言是日语(默认情况下,除非您通过代码更改),因此当前的线程UI文化是日语,因为您有日语文件,所以表单将以日语显示。

另一答案

首先需要以下列格式添加Resources文件:默认保留原样,特定语言使用格式资源。[code-CODE]

enter image description here

如果要在运行时更改语言,则必须“手动”更新控制文本,否则只需在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;
    }
}

以上是关于WinForms本地化。该语言不反映默认的resx文件的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio C# 更新本地化语言 resx

Xamarin.Android 中基于 RESX 的本地化

基本本地化(中性语言)

定位后重置控制位置

我的 .resx 资源文件痛点

资源文件的本地化不起作用