不变的.resx文件

时间:2016-03-09 16:15:25

标签: c# resx

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

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

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

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

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

我可以编写一个转换器,将InvariantCulture显示为en。但是,我认为这是一个丑陋的黑客。

请帮忙吗?

2 个答案:

答案 0 :(得分:3)

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

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

如果在一个资源中找不到密钥,这也会使其“回退”到其他卫星(如果您要求在resource.en-US.resx中未定义密钥,则会在resource.en.resx中进行搜索最后在resource.resx

我不确定您是如何列出语言名称的,但如果仍然提供InvariantCulture,您可以使用空Localization.en.resx,并使用此方法找到所有缺少的资源在Localization.resx,所以不需要让它们同步。

答案 1 :(得分:2)

在UI中,我们让用户知道“默认”应用程序具有英语本地化。并提供通过显示除Invariant之外的所有可用选项来更改它。编写一个将InvariantCulture可视化为en的转换器也不是一个丑陋的黑客。