1

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

我创建了两个 DLL

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

Component.resources.dll只包含 UI 中显示的所有字符串和一个类

public class 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对象仍然指向英语.dll路径并且也是Thread.Current.Culture英语!

有什么解决办法吗?我错过了什么吗?

4

1 回答 1

0

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

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

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

于 2010-09-08T07:26:54.130 回答