【问题标题】:.NET control localization - how to translate custom string.NET 控件本地化 - 如何翻译自定义字符串
【发布时间】:2009-10-12 14:55:08
【问题描述】:

我正在使用 Windows 窗体创建多语言应用程序。我通过将表单标记为可本地化并将语言切换为默认值并更改表单文本来创建我的多语言内容。

这很好用,但有一个小问题。在其中一个表单上,我必须设置要在表单构造函数中显示的文本。现在的问题是,如果我以默认语言输入它,即使文化切换到其他语言,它也会以该语言显示。

我想知道本地化此类字符串最简单或最有效的方法是什么。

只是我需要本地化哪种消息的示例:

class MyForm : Form
{
    public MyForm()
    {
        if (myAdapter.ConnectionStatus == ConnectionStatus.OK)
        {
            statusLabel.Text = "Connected";
        }
        else 
        {
            statusLabel.Text = "Not connected";
        }
    }
}

在此示例中,我希望根据当前的文化信息本地化“已连接”和“未连接”。

【问题讨论】:

    标签: .net localization internationalization


    【解决方案1】:

    当您将表单标记为可本地化时,您正在为每种语言创建不同的资源文件。您应该在资源文件中为“已连接”和“未连接”添加一个字符串键,并手动从资源文件中提取,而不是对字符串进行硬编码。

    ResourceManager resmgr = new ResourceManager("MyResource", Assembly.GetExecutingAssembly());
    
    private CultureInfo englishCulture = new CultureInfo("en-US");
    private CultureInfo frenchCulture = new CultureInfo("fr-FR");
    private CultureInfo spanishCulture = new CultureInfo("es-ES");
    

    然后要获取一个字符串,调用 GetString() 并带有一个键和一个区域性

    string msg = resmgr.GetString("FormLabel.Connected",frenchCulture);
    string msg = resmgr.GetString("FormLabel.NotConnected", frenchCulture);
    

    您可能已经在管理您的文化,因此您可以利用它,然后您只需指定使用什么键来从资源文件中获取正确的值。

    【讨论】:

    • 我想您的意思是在 Form1.resx 或 Form1.nl-NL.rex 文件中添加一个字符串?不是个好主意!当您之后编辑表单时(例如调整文本框的大小),您添加的字符串资源将被删除!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多