C# 不变的.resx文件

C# 不变的.resx文件,c#,resx,C#,Resx,我有一个可本地化的c应用程序。 有一个文件Localization.resx和一个文件Localization.de.resx。 resx包含不变的语言-它是英语 用户应该能够选择自己喜欢的语言。我找到了这个问题的第一个答案,以确定哪些文化是可用的。我看到有de和不变量文化可用 但我不能提供不变的文化。用户不知道这是什么。相反,我应该提供给你 我无法将Localization.resx重命名为Localization.en.resx,因为创建保存资源的类需要此文件 我可以将Localizatio

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

用户应该能够选择自己喜欢的语言。我找到了这个问题的第一个答案,以确定哪些文化是可用的。我看到有de和不变量文化可用

但我不能提供不变的文化。用户不知道这是什么。相反,我应该提供给你

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

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

我可以编写一个转换器,将不变量文化可视化为en。但我认为这是一个丑陋的黑客行为


有什么帮助吗?

在用户界面中,我们让用户知道默认应用程序具有英语本地化。并通过显示除不变量之外的所有可用选项来更改它。另外,编写一个将不变量文化可视化为en的转换器也不是一个难看的技巧。

您可以使用assembly属性来设置中性语言

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.Satellite)]
这也使得如果在一个资源中找不到密钥,它会退回到其他卫星。如果您请求一个未在resource.en-US.resx中定义的密钥,它将在resource.en.resx中搜索,最后在resource.resx中搜索


我不确定您是如何列出语言名称的,但如果这仍然提供不变量文化,您可以有一个空的Localization.en.resx,使用此方法,它将在Localization.resx中找到所有缺少的资源,因此无需将它们同步。

我也遇到过类似的情况,并最终硬编码en。我很好奇是否有人有更好的解决方案。我们称这种语言为默认语言,它有点英语,但更乏味。为了实现这一目标,我们宁愿制造一颗专用卫星。@Sinatr。那么,你的意思是复制到Localization.en.resx并从可选择的资源中删除不变量文化?很难看出这会是一个问题。你已经知道你的不变语言是什么样子了,它永远不会改变。在实现这样的特性时,通常缺乏实用主义。用户已经知道他喜欢的语言是什么样子,这是他至少在过去5年中使用过的语言,他不必告诉你。Steffen-既然“de”和“invariant”对你有用,那么从选择UI中隐藏invariant并创建另一个“en”且为空的资源怎么样?如果我记得清楚的话,找不到的钥匙会退回到不变量,因此en=不变量,到mantain只有1个resx。谢谢你,先生。不变式文化主义者仍然存在。但我想我会这样做。从可选语言中删除不变语言,并保留一个空的Localization.en.resx。如果您100%确定且您确定不变文化是英语,为什么不直接替换可选语言UI中的字符串?我确定-现在。但我认为这是一个丑陋的黑客。我不知道当另一个人得到源代码时会发生什么。@Steffen我理解。。。我不认为这是一个丑陋的黑客,只要它在规范中,没有任何规范的软件只是一个整体丑陋的黑客;-。如果说明书上说中性语言是英语,那么这只是遵守说明书的一种方式。。。拥有一个空的资源或者没有任何规范的任何其他方式都可能是黑客行为,拥有一个空的资源也是黑客行为。区别在于是否指定了。规范可以是一个简单的注释,替换字符串//非本地化资源被认为是英语。我明白你的意思了。但是,我认为空白资源文件会造成更少的麻烦。如果我替换了字符串,并且有人决定添加英语资源文件,这可能会导致问题。我会选择两次英语。此外,对于空白资源,默认语言可以很容易地更改,不要认为这是发生的。你说得对,那两个都是黑客。我拿了一个,我的直觉告诉我这是更好的一个。