【问题标题】:Problem in Internationalization - English DLL data is always displayed国际化问题 - 始终显示英文 DLL 数据
【发布时间】:2010-09-08 07:18:55
【问题描述】:

我有一个要求,我的 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 是英语!

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

【问题讨论】:

    标签: c# dll internationalization culture uiculture


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,文件夹在那里......相应的语言资源也在那里......但仍然没有出现。
    • 哦,我以为/希望这很容易。 :-(
    猜你喜欢
    • 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
    相关资源
    最近更新 更多