如何让Assembly.GetManifestResourceStream返回本地化资源?

时间:2017-09-21 23:27:34

标签: c# localization cultureinfo

我已将三个嵌入文件添加到我的C#程序集

Resources\ErrorMessages.de_DE.json
Resources\ErrorMessages.en_US.json
Resources\ErrorMessages.json

当我这样称呼时:

Assembly.GetExecutingAssembly().GetManifestResourceNames()

我明白了:

{string[3]}
    [0]: "MyNamespace.Resources.ErrorMessages.en_US.json"
    [1]: "MyNamespace.Resources.ErrorMessages.de_DE.json"
    [2]: "MyNamespace.Resources.ErrorMessages.json"

如果我像这样设置当前的文化:

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("de-DE");

- 并检索这样的资源:

Assembly.GetExecutingAssembly().GetManifestResourceStream("MyNamespace.Resources.ErrorMessages.json");

- 我得到了默认的资源文件;没有" de_DE"和" en_US"。

我希望得到与我当前文化背景相对应的资源流。我是否真的必须自己指定特定于语言的资源?

如果我这样做,我可以检索资源:

var language = CultureInfo.CurrentCulture.Name.Replace("-", "_");
var localResourceName = string.Format(CultureInfo.InvariantCulture, "MyNamespace.Resources.ErrorMessages.{0}.json", language);
var defaultResourceName = "MyNamespace.Resources.ErrorMessages.json";
var jsonStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(localResourceName) ??
                 Assembly.GetExecutingAssembly().GetManifestResourceStream(defaultResourceName);

0 个答案:

没有答案