C#:如何从某种文化中获取资源字符串

Svi*_*ish 20 .net c# resources localization

我有一个资源程序集,其中包含各种语言的翻译文本.项目类似于:

  • FooBar.resx
  • FooBar.nb-NO.resx
  • FooBar.sv-SE.resx
  • ...

我可以使用这样的静态属性来获取文本:

var value = FooBar.Hello;
Run Code Online (Sandbox Code Playgroud)

或者使用这样的反射:

var value = resourceAssembly
      .GetType("Namespace.FooBar")
      .GetProperty("Hello")
      .GetValue(null, null) as string;
Run Code Online (Sandbox Code Playgroud)

两种方式都将获得属于当前线程的当前UI文化的值.这很好,完全是我通常喜欢的.

但是,如果我明确地想要瑞典的价值,而不必改变UI文化,我能做些什么吗?

Kon*_*man 19

您可以手动更改CultureVisual Studio生成的FooBar类的属性.或者,如果您直接使用ResourceManager类,则可以使用GetString的重载,该重载将所需的区域性作为参数.

  • ResourceManager 是否可以轻松创建和丢弃,或者是否需要清理和/或应该只创建一次并多次使用? (2认同)

小智 15

请尝试以下代码.它至少对我来说很好:

FooBar.ResourceManager.GetString("Hello", CultureInfo.GetCultureInfo("sv-SE"))
Run Code Online (Sandbox Code Playgroud)