在 WPF 应用程序中运行时枚举已翻译的 .resx 资源
-
06-09-2019 - |
题
我一直通过在 .resx 文件中存储字符串来为我的 WPF 应用程序进行本地化。我的默认(英语)字符串资源是 strings.resx。对于其他语言,法语称为 strings.fr-FR.resx,西班牙语称为 strings.es-ES.resx,依此类推。
这种本地化方法非常棒,因为当我将全球化区域设置为匹配的区域设置时,我的应用程序会自动加载正确的字符串,而如果没有,则默认为英语。
是否可以在运行时枚举我的程序集中包含哪些语言?
我可以绕过这个问题以及包含语言的硬代码,但是随着构建服务器将语言 resx 组合在一起并动态构建,这可能会随着构建而改变。
解决方案
我看到两个选择,但没有一个是理想的......
- 枚举所有已知的文化(CultureInfo.GetCultures),并尝试获取该文化的给定资源=>简单但缓慢
- 在应用程序的目录中查找附属程序集:对于每个子目录,检查其名称是否对应于区域性名称 (CultureInfo.GetCultureInfo),以及是否包含 .resources.dll 文件
不隶属于 StackOverflow