我有一个服务器应用程序,我希望使用资源文件支持多种语言。由于它是服务器,我不能使用附属程序集(因为不同的线程使用不同的语言)。
我尝试按以下方式添加多个资源文件:
它们包含一个字符串表,其中包含一个文本。
我使用Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(1053);
来切换语言。但是在使用var string = MyResourceName.MyText
时我仍然使用默认语言。
我也试图改变CurrentUICulture。
如何添加对多种语言的支持?
更新
不知道是否重要。但我正在我的单元测试项目(mstest)中尝试。资源文件也是测试项目的一部分。
答案 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)并且应该可以正常工作。