.NET本地化

3
我正在开发一个支持多种语言环境的应用程序。
这是通过使用单独的dll来实现的,每种语言都有一个资源,每个资源存储了一个字符串到特定语言的翻译。在WPF应用程序中,这很好地运作着:每当应用程序需要一个字符串时,它会请求dll,并返回根据应用程序选择的语言而变化的文本。如果语言被更改,则从语言dll返回的文本反映出更改。
现在我正在创建一个使用相同语言dll的ASP.Net MVC网站。
问题在于,对于语言dll上的资源管理器,据我所知,它总是返回系统文化的文本。我更改了资源管理器使用的CultureInfo,但它不起作用。有人有解决这个问题的想法吗?
抱歉回复晚了。周末没有上网......这是我第一次拥有一个项目同时使用Web和Windows,我期望行为相同,但它并不是这样。基本上,我有一个全局类,存储用户和应用程序设置,其中之一是当前的CultureInfo,当用户更改它时,语言管理器更新其当前的CultureInfo变量。当我调用获取语言字符串的代码时:
resmgr.GetString(label, ci);
其中resmgr是语言管理器的ResourceManager对象,ci是CultureInfo对象,label是我想要获取的字符串,它会返回标签/语言的文本。我为项目支持的每种文化有一个resx文件和一个不变/默认的resx文件。在Windows应用程序中运行良好,但在Web和某些单元测试中,尽管我将ci值更改为新的Culture,结果始终是相同的,来自不变的文化的字符串。我尝试更改当前线程文化和当前UI文化,但它没有起作用。
为什么ResourceManager方法GetResourceSet在WPF应用程序中返回传递到特定文化的正确资源集,但在单元测试或Web中使用相同代码时返回不变的资源集。我错过了什么,只是不知道它是什么......由于使用IOC并且因为语言项目未被引用而是在编译完成后复制到文件夹中,我发现为每个资源创建的文件夹没有复制到单元测试调试文件夹和网站bin文件夹中。我纠正了这一点,现在文件已经被复制,但问题仍然存在。

3
具有讽刺意味的是,通常将此称为“本地化”,而非全球化;或者称之为国际化(i18n简写)。 - user395760
@kurtnelle,你找错人了 :p - Kheldar
@Ruben,你有考虑请求中的区域信息吗?HttpContext.Current.Request.UserLanguages[0](感谢Kheldar) - user220583
3个回答

4
请参阅这个多部分教程,因为它是一个相当广泛的主题。

谢谢提供链接,我会去查看的。 - Ruben Monteiro

0

您可能需要设置您的web.config文件:

<configuration>

  <system.web>
    ...
    <globalization uiCulture="auto" culture="auto" />
    <!--
    <globalization uiCulture="auto" culture="auto" />
    <globalization uiCulture="en" culture="en-US" />
    <globalization uiCulture="de" culture="de-CH" />
    -->
    ...
  </system.web>

</configuration>

嗨,感谢您的帮助,但问题与网络无关,因为我的单元测试也有相同的行为。 - Ruben Monteiro
您可以在测试设置期间使用 Thread.CurrentThread.CurrentUICulture = xxx 更改 UI-Culture。 - user687474
是的,我可以,但结果仍然相同,资源管理器从不变文化返回字符串。 - Ruben Monteiro
你的时间控制怎么样?在你改变文化之前,ResourceManager会被初始化吗?从ResourceManager派生并设置构造函数断点。 - user687474
我注意到的一件事是,当我运行Windows应用程序时,资源管理器会加载一个名为“_resourceSets”的属性,该属性在调试中可见。在Windows应用程序中,此属性将加载DLL具有的资源,但在单元测试和Web应用程序中,则不会,它只有不变的资源。 - Ruben Monteiro

0

就像我在更新3中所说的那样,我没有为每种语言复制资源dll文件,导致当我尝试获取标签时,网站和单元测试失败,因为资源管理器找不到正确的语言,它总是返回与标签相关联的不变字符串。起初,复制dll似乎没有起作用,但在我从Visual Studio运行“清理解决方案”和“重新生成解决方案”之后,网站和单元测试开始按预期工作。 感谢所有提示,这些对我非常有帮助,我能够确定问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接