我有一个使用.resx
files for localization的MVC网站。但是,确定支持哪些本地化的当前行为需要迭代物理.resx
文件,并且一旦网站被编译用于发布,它们就不存在。
目前的文件夹结构是:
- 语言资源
- Resource.en-US.resx
- Resource.fr-CA.resx
- Resource.hi.resx
- Resource.resx
根据this answer,尝试通过GetManifestResourceNames()
获取所有资源文件的列表,只生成代表主,非本地化列表的单个LanguageResources.Resource.resources
文件。它可能会也可能没有嵌入本地化,但我无法看到它。
如何在运行时告诉我支持三种语言?
<子> 最终目标是基于这三个值构建下拉列表。如果还有另一种方法我应该接近这个问题,那些解决问题的答案也是可以接受的。
答案 0 :(得分:0)
根据我的问题的侧边栏链接,我最终找到this question和Hans Holzbart的excellent answer,我将在下面复制。问题本身是从不同的方向接近它,但答案同样适用于我的情况。
// Pass the class name of your resources as a parameter e.g. MyResources for MyResources.resx
ResourceManager rm = new ResourceManager(typeof(MyResources));
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (CultureInfo culture in cultures)
{
try
{
ResourceSet rs = rm.GetResourceSet(culture, true, false);
// or ResourceSet rs = rm.GetResourceSet(new CultureInfo(culture.TwoLetterISOLanguageName), true, false);
string isSupported = (rs == null) ? " is not supported" : " is supported";
Console.WriteLine(culture + isSupported);
}
catch (CultureNotFoundException exc)
{
Console.WriteLine(culture + " is not available on the machine or is an invalid culture identifier.");
}
}
出于我的目的,我不得不用.Where(x => x.Name != "")
过滤掉不变文化,但除此之外,这很有效。