我正计划开发一个本地化的 Windows 8 应用商店应用程序。Microsoft 建议在标记目录和 ResourceLoader 类中使用资源文件,所以——现在——这就是我打算做的。
对于简单的翻译,这很好用,例如:
var resourceLoader = new Windows.ApplicationModel.Resources.ResourceLoader();
string text = resourceLoader.GetString("FileDeletedMessage");
text = string.Format(text, fileName);
GetString
自动将当前文化和首选语言与最合适的资源文件匹配,并返回相应的条目,例如The file "{0}" was deleted
或Die Datei "{0}" wurde gelöscht
。这是透明地发生的。
但现在我也想实现Unicode Consortium 的 CLDR 图表中描述的正确复数。AFAIK,.NET 不支持这个开箱即用的,对吧?因此,我想使用或实现类似SmartFormat的东西。在这种情况下,GetString 将返回一个类似{0} {0:file|files} {0:was|were} deleted
.
问题:要将特定于文化的复数规则应用于此字符串,我需要知道字符串的文化。但是 GetString 不提供它,只有字符串本身。有什么方法可以查找字符串及其文化吗?(我不想自己重新实现它。这很复杂!)
顺便说一句,使用System.Globalization.CultureInfo.CurrentCulture
orCurrentUICulture
代替不起作用,因为 GetString 不一定返回当前文化的直接匹配项(考虑具有单一本地化的应用程序,英语,在法语机器上运行)。