不变的 .resx 文件

Invariant .resx file

我有一个可本地化的 C# 应用程序。 有一个文件 Localization.resx 和一个文件 Localization.de.resxLocalization.resx 包含不变的语言 - 它是英语。

用户应该能够select他的首选语言。我找到了这个问题的第一个答案 Programmatic way to get all the available languages (in satellite assemblies) 来确定哪些文化是可用的。我看到有 deInvariantCulture 可用。

但我无法提供 InvariantCulture。用户不会知道这是什么。相反,我应该提供 en.

我无法将 Localization.resx 重命名为 Localization.en.resx,因为创建包含资源的 Class 需要此文件。

我可以将 Localization.resx 复制到 Localization.en.resx,但是我必须始终保持这些文件的一致性,并且还需要从可用区域性中删除 InvariantCulture

我可以编写一个转换器,将 InvariantCulture 可视化为 en。但我认为这是一个丑陋的 hack。

有什么帮助吗?

在 UI 中,我们让用户知道哪些 "By Default" 应用程序有英文本地化。并提供通过显示除不变量之外的所有可用选项来更改它。编写一个将 InvariantCulture 可视化为 en.

的转换器也不会是一个丑陋的 hack

您可以使用 NeutralResourcesLanguageAttribute 程序集属性来设置中性语言。

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.Satellite)]

如果在一个资源中找不到密钥(如果您要求的密钥未在 resource.en-US.resx 中定义,它将在 "fallback" 中搜索 "fallback" =12=] 最后在 resource.resx)

我不确定你是如何列出语言名称的,但如果这仍然给出 InvariantCulture,你可以有一个空的 Localization.en.resx,使用这种方法它会找到所有Localization.resx 中缺少资源,因此无需同步它们。