【问题标题】:How can I get .NET to generate all of the resource files如何让 .NET 生成所有资源文件
【发布时间】:2018-06-22 20:25:33
【问题描述】:

我正在查看此页面上的建议 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”。

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

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

  • 1> 将“”的文化分配给文件“LanguageResources\LanguageResource.resx”。 (任务 ID:22)
  • 1> 将“”的文化分配给文件“LanguageResources\LanguageResource.vn-VN.resx”。 (任务 ID:22)

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

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

【问题讨论】:

    标签: .net resources globalization


    【解决方案1】:

    对不起,

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

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

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

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

    谢谢!

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      相关资源
      最近更新 更多