首页 > 解决方案 > 如何让 .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 文件(位于单独的库项目中):

因此,当我转到正在执行的程序集 bin 目录时,我只看到以下文件夹:es-ES 和 fr-FR

当然,文件夹里面是 resources.dll 文件。

有人知道为什么在构建过程中没有创建 vn-VN 文件夹/resources.dll 文件吗?英语也不存在,但我有一半的期望,因为它是我们的默认设置,并且 LanguageResources.resx 文件名中不包含“en-US”。

我检查了包含资源文件的库的 .csproj 文件 - 并没有看到任何明显的东西。

但是,我确实在构建日志中找到了这个:

由于没有生成英语或越南语的 resources.dll 文件,我认为这可能与它有关。

任何人都可以对此有所了解吗?并告诉我如何纠正这个问题?

标签: .netresourcesglobalization

解决方案


对不起,

实际上,经过一些进一步的挖掘(抱歉,我应该在发布之前这样做) - 我发现我的 System.Globalization.CultureInfo 列表不包含 vn-VN 的定义。
所以然后我查看了语言环境列表,主要只看到 vi-VN,但是这篇文章说 vn-VN String.Format 考虑语言环境吗?已验证。

底线是文件夹和资源文件未显示在我的机器上的原因是不支持文化。

一旦我将文件名更改为使用 vi-VN - 它就起作用了。

有人知道 vn-VN 是否有效吗?还是现在?

谢谢!


推荐阅读