【问题标题】:Enumerating translated .resx resources at runtime in WPF application在 WPF 应用程序中在运行时枚举已翻译的 .resx 资源
【发布时间】:2009-05-27 17:26:28
【问题描述】:

我一直在通过将字符串存储在 .resx 文件中来为我的 WPF 应用程序进行本地化。我的默认(英文)字符串资源是 strings.resx。对于其他语言,法语称为 strings.fr-FR.resx,西班牙语称为 strings.es-ES.resx,依此类推。

这种本地化方法非常棒,因为当我将全球化区域设置为匹配的区域设置时,我的应用程序会自动加载正确的字符串,并且在没有时默认为英语。

是否可以在运行时枚举我的程序集中有哪些语言?

我可以绕过包含语言的硬代码,但这可能会随着构建服务器的构建而改变,因为构建服务器将语言 resx 组合在一起并动态构建。

【问题讨论】:

    标签: wpf localization resources internationalization resx


    【解决方案1】:

    我看到了两个选项,没有一个是理想的......

    • 枚举所有已知的文化 (CultureInfo.GetCultures),并尝试获取该文化的给定资源 => 简单但缓慢
    • 在您的应用程序目录中查找附属程序集:对于每个子目录,检查其名称是否对应于文化名称 (CultureInfo.GetCultureInfo),以及是否包含 .resources.dll 文件

    【讨论】:

    • 关于选项 (2) 和提出问题的方式,默认 resx 不只是主程序集的一部分,并且没有要查找的“en_US”目录吗?我知道这是一个 olie,但我有一个与此相关的悬而未决的问题。干杯
    • @Berryl,是的,默认区域性的资源始终在主程序集中(但不一定是 en-US...)
    • 因此,如果您选择只拥有 main.resx 而没有 en-US,并且想要列举可用的资源文化 - 您会找到所有子目录,然后呢?主组件 resx 有什么明确表示字符串是“en-US”的吗?干杯
    • @Berryl,主程序集资源的文化可以用NeutralResourcesLanguageAttribute表示
    • 是的,这是有道理的。我也会在另一个问题中给你答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多