【问题标题】:How can I ensure that the appropriate language version of a string resource is loaded at runtime?如何确保在运行时加载适当语言版本的字符串资源?
【发布时间】:2011-02-11 12:30:33
【问题描述】:

我的 VB.NET 项目中有一个名为“strings.resx”的字符串资源文件,定义为嵌入式资源。我有另一个名为strings.es.resx 的文件,其中包含所有相同的西班牙语字符串。我正在使用以下代码在运行时加载资源:

MyStrings = New ResourceManager("myprog.strings", GetType(MainForm).Assembly)

我已在 Windows 中将语言区域设置为 Espanol 并重新登录,但在执行上述操作时,我仍然会加载英文字符串资源。如果 Windows 语言环境是 ES,我如何加载西班牙语资源?我期待它会被自动处理。

【问题讨论】:

    标签: .net resources internationalization locale resourcemanager


    【解决方案1】:

    看看System.Threading.Thread.CurrentThread.CurrentUICulture 属性 - 它有一个固定为 en-US 的习惯。

    如果是,请尝试将其设置为与CurrentCulture 相同。

    更新

    由于这不起作用,请检查应用程序的输出文件夹是否有一个 es 文件夹,其中包含一个名为 strings.resources.dll 的 dll。如果没有,那么,基本上,资源管理器没有找到特定于文化的字符串资源,因为它不存在,在这种情况下将它们复制进去,它应该可以工作。

    【讨论】:

    • CurrentUICulture 是 es-ES。表单资源是本地化的,只是我在代码中使用的这些“文字”值似乎总是中性文化。
    • @Robinson - 如果您使用ResourceManagerGetString(string) 方法,您/您可以尝试显式的GetString(string, CultureInfo) 重载,并明确传递西班牙文化吗?如果它仍然不起作用,那么我的猜测是它没有在 bin 文件夹中找到您的资源文件
    • 呃!我的错误......字符串加载正确。此后我只是在做其他事情(从英文设置文件中读取),其中包含英文版本的字符串。将为您的努力标记您的答案正确,因为原因是我自己的愚蠢:p。
    • @Robinson - 如果你和我一起在我的办公室,那么我就可以完成“纸板程序员”的角色。这是一项非常重要的工作:)
    【解决方案2】:

    免责声明 - 这完全来自记忆,可能不是 100% 准确 :-)

    .NET 资源使用Thread.CurrentUICulture 加载(除非您在代码中加载资源时显式覆盖它)。 Thread.CurrentUICulture 由您在安装 Windows 时使用的 UI 语言设置,并且无法更改。这和Thread.CurrentCulture不一样,在控制面板中设置,可以随时更改。

    例如,在我的 PC 上,CurrentCulture 返回 "en-GB",因为那是我所在的位置,但 CurrentUICulture 返回 "en-US",因为 Microsoft 只提供一种英语版本的 Windows。

    【讨论】:

    • CAN 设置 Thread.CurrentUICulture - ResourceManager 实际上对此作出响应并为此文化加载资源集。
    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多