具有多种语言的资源文件

时间:2010-11-26 12:00:44

标签: .net multilingual embedded-resource

我有一个服务器应用程序,我希望使用资源文件支持多种语言。由于它是服务器,我不能使用附属程序集(因为不同的线程使用不同的语言)。

我尝试按以下方式添加多个资源文件:

  • MyResourceName.resx
  • MyResourceName.sv.resx

它们包含一个字符串表,其中包含一个文本。

我使用Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(1053);来切换语言。但是在使用var string = MyResourceName.MyText时我仍然使用默认语言。

我也试图改变CurrentUICulture。

如何添加对多种语言的支持?

更新

不知道是否重要。但我正在我的单元测试项目(mstest)中尝试。资源文件也是测试项目的一部分。

3 个答案:

答案 0 :(得分:0)

首先,控制它的是CurrentUICulture(我注意到你也试过了;只是想澄清一下)。

第二:应用程序是多线程的吗?可能是你在一个帖子上设置了CurrentUICulture,但在另一个帖子上读了MyResourceName.Text(那时它没有相同的文化)?

答案 1 :(得分:0)

如果你有ResourceManager这样的话

var manager = new ResourceManager("you.resource.strings.file", Assembly.GetExecutingAssembly());

通过调用以GetString对象作为参数的重载CultureInfo方法,您始终可以使用所需语言从中获取字符串。这样,您就不必在线程上设置文化。

var string = manager.GetString("myText", CultureInfo.GetCulture(1053));

答案 2 :(得分:0)

如果.RESX在Visual Studio中定义了“嵌入式资源”构建操作(自定义工具设置为“ResXFileCodeGenerator”),则必须部署为瑞典语编译的.resources.dll。它应该在bin \ sv文件夹中。

对于ASP.NET webapps,如果在名为App_GlobalResources的文件夹中定义.RESX文件,那么您将没有bin \ sv文件夹(在这种情况下,构建操作将我们“内容”设置为自定义工具“GlobalResourceProxyGenerator”),正如您所说,您不必部署额外的dll。

在这两种情况下代码都很好(使用 CurrentUICulture ,而不是CurrentCulture)并且应该可以正常工作。