国际化问题 - 始终显示英文 DLL 数据

发布于 2024-09-17 23:48:18 字数 1539 浏览 6 评论 0原文

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

我创建了两个 DLL

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

Component.resources.dll 只包含 类

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;
        }
}

UI 和Component.dll 中的

label1.text = PResources.GetNLSString("IDS_LABEL1");

来显示标签文本我使用以下英文它工作正常... 但是,当语言设置更改为法语或任何其他语言时,显示的字符串仍然是英语文本。

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

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

有什么办法解决这个问题吗?我错过了什么吗?

I have a requirement where my UI should be shown in 5 different languages apart from English.

I have created two DLLs

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

Component.resources.dll contains nothing but all the strings that are shown in the UI and a class

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;
        }
}

In Component.dll to display the label text I use the following

label1.text = PResources.GetNLSString("IDS_LABEL1");

In English it works fine...
But when the language settings is changed to French or any other, the string displayed is still the English text.

Note: The Component.Resources.dll strings are translated in all languages.

When I debugged... I found that the GetNLSString function the Thread.Current.UICulture is French ... but the resourceMgr object is still pointing to the English .dll path and also the Thread.Current.Culture is English!

Is there any solution to this ? have I missed anything.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一直在等你来 2024-09-24 23:48:18

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

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

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

For every culture, you should create a folder (in the folder where the main program is) for every culture you want to support (id = two letter iso code + optional two letter region).

Inside this folder, you place the *.resources.dll, with only the strings/constants for the target culture.

Visual Studio does this automatically for you if you create an example.resx file (for the default culture) and an example.fr.resx file for French, inside the same project.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文