我有一个可本地化的c#应用程序。
有一个文件Localization.resx
和一个文件Localization.de.resx
。
Localization.resx
包含不变语言 - 它是英语。
用户应该能够选择他喜欢的语言。我找到了这个问题的第一个答案Programmatic way to get all the available languages (in satellite assemblies)来确定哪些文化可用。我看到有de
和InvariantCulture
可用。
但我无法提供InvariantCulture。用户不知道这是什么。相反,我应该提供en
。
我无法将Localization.resx
重命名为Localization.en.resx
,因为需要此文件来创建包含资源的类。
我可以将Localization.resx
复制到Localization.en.resx
,但我必须始终保持这些文件的一致性,还需要从可用的文化中删除InvariantCulture
。
我可以编写一个转换器,将InvariantCulture
显示为en
。但是,我认为这是一个丑陋的黑客。
请帮忙吗?
答案 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的转换器也不是一个丑陋的黑客。