.net - 如何让 .NET 生成所有资源文件
问题描述
我正在查看此页面上的建议Programmatic way to get all the available languages (in satellite assembly),并决定这个可能最适合:
public IEnumerable<CultureInfo> GetSupportedCulture()
{
//Get all culture
CultureInfo[] culture = CultureInfo.GetCultures(CultureTypes.AllCultures);
//Find the location where application installed.
string exeLocation = Path.GetDirectoryName(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path));
//Return all culture for which satellite folder found with culture code.
return culture.Where(cultureInfo => Directory.Exists(Path.Combine(exeLocation, cultureInfo.Name)));
}
所以,我创建了一个小测试方法,但我注意到我们的一个资源文件没有生成。
例如,以下是 .resx 文件(位于单独的库项目中):
- (英语)LanguageResources.resx
- (法语)LanguageResource.fr-FR.resx
- (西班牙语)LanguageResource.es-ES.resx
- (越南语)LanguageResource.vn-VN.resx
因此,当我转到正在执行的程序集 bin 目录时,我只看到以下文件夹:es-ES 和 fr-FR
当然,文件夹里面是 resources.dll 文件。
有人知道为什么在构建过程中没有创建 vn-VN 文件夹/resources.dll 文件吗?英语也不存在,但我有一半的期望,因为它是我们的默认设置,并且 LanguageResources.resx 文件名中不包含“en-US”。
我检查了包含资源文件的库的 .csproj 文件 - 并没有看到任何明显的东西。
但是,我确实在构建日志中找到了这个:
- 1> "" 的文化被分配到文件 "LanguageResources\LanguageResource.resx"。(任务编号:22)
- 1> "" 的文化被分配给文件 "LanguageResources\LanguageResource.vn-VN.resx"。(任务编号:22)
由于没有生成英语或越南语的 resources.dll 文件,我认为这可能与它有关。
任何人都可以对此有所了解吗?并告诉我如何纠正这个问题?
解决方案
对不起,
实际上,经过一些进一步的挖掘(抱歉,我应该在发布之前这样做) - 我发现我的 System.Globalization.CultureInfo 列表不包含 vn-VN 的定义。
所以然后我查看了语言环境列表,主要只看到 vi-VN,但是这篇文章说 vn-VN String.Format 考虑语言环境吗?已验证。
底线是文件夹和资源文件未显示在我的机器上的原因是不支持文化。
一旦我将文件名更改为使用 vi-VN - 它就起作用了。
有人知道 vn-VN 是否有效吗?还是现在?
谢谢!
推荐阅读
- amazon-web-services - AWS EC2 UserData 脚本不会在 t3 实例上触发
- node.js - UnhandledPromiseRejectionWarning: TypeError: res.send is not a function
- javascript - 将嵌套数组转换为具有键值 Javascirpt 的单个对象
- python - 熊猫系列获取指定时间段
- java - DatabaseReference 的 setValue() 方法是否具有可在单个调用中写入的最大子项数?
- c++ - 无法从向量中删除元素,试图引用已删除的函数
- apache-spark - 是什么导致了配置单元表分区中的不同模式?
- rxjs - 使用回调使方法主体化
- ios - 当 Firebase 中的数据发生变化时更新视图错误
- python - python3中的数组乘法