如何获取.NET以生成所有资源文件

时间:2018-06-22 20:25:34

标签: .net resources globalization

我一直在查看此页面Programmatic way to get all the available languages (in satellite assemblies)上的建议,并决定此建议最合适:

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”。

我已经检查了包含Resource文件的库的.csproj文件-看不到明显的东西。

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

  • 1>文化“”已分配给文件“ LanguageResources \ LanguageResource.resx”。 (TaskId:22)
  • 1>文化“”被分配给文件“ LanguageResources \ LanguageResource.vn-VN.resx”。 (TaskId:22)

并且由于既没有英文也没有越南文的resources.dll文件的产生,所以我认为这可能与它有关。

有人能对此有所启示吗?告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

对不起,

实际上,经过进一步的挖掘(很抱歉,我应该在发布之前这样做)-我发现我的System.Globalization.CultureInfo列表不包含vn-VN的定义。
因此,然后我查看了语言环境列表,并且只看到了vi-VN,但是这篇文章说vn-VN String.Format consider locale or not?是有效的。

最重要的是,文件夹和资源文件未显示在我的机器上是因为不支持区域性。

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

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

谢谢!