国际化中的问题

时间:2010-09-08 07:18:55

标签: c#

我有一个要求,即除了英语之外,我的UI应该以5种不同的语言显示。

我创建了两个DLL

1)Component.dll 2)Component.resources.dll

Component.resources.dll只包含UI和类

中显示的所有字符串

公共类PResources     {         private static System.Resources.ResourceManager resourceMgr = new System.Resources.ResourceManager(typeof(PEditResources));

    /// <summary>
    /// Get NLS String method string method
    /// </summary>
    /// <param name="identifier"></param>
    /// <returns></returns>
    public static string GetNLSString(string identifier)
    {
        return resourceMgr.GetString(identifier, Thread.CurrentThread.CurrentUICulture);
    }
    /// <summary>
    /// Returns the NLS Resource Mgr.
    /// </summary>
    /// <returns></returns>
    public static System.Resources.ResourceManager GetNLSResourceMgr()
    {
        return resourceMgr;
    }

}

在Component.dll中显示标签文本我使用以下

label1.text = PResources.GetNLSString(“IDS_LABEL1”);

在英语中它工作得很好...... 但是当语言设置更改为法语或任何其他语言时,显示的字符串仍然是英语文本。

注意:Component.Resources.dll字符串已翻译成所有语言。

当我调试时...我发现GetNLSString函数Thread.Current.UICulture是法语...但是resourceMgr对象仍然指向englis dll路径,而且Thread.Current.Culture也是英文!

这有什么解决方案吗?我错过了什么。

1 个答案:

答案 0 :(得分:0)

对于每种文化,您都应该为要支持的每种文化创建一个文件夹(在主程序所在的文件夹中)(id =两个字母的iso代码+可选的两个字母区域)。

在此文件夹中,放置* .resources.dll,仅包含目标文化的字符串/常量。

如果您在同一项目中创建了一个example.resx文件(对于默认区域性)和一个法语的example.fr.resx文件,Visual Studio会自动为您执行此操作。