【问题标题】:.NET localization.NET 本地化
【发布时间】:2011-09-02 15:05:06
【问题描述】:

我正在开发一个支持多种语言环境的应用程序。

这是通过一个单独的 dll 完成的,该 dll 具有每种语言的资源,每个资源存储字符串到特定语言的翻译。

这在 WPF 应用程序上工作得很好,每次应用程序需要一个字符串时,都会向 dll 发出请求,并根据应用程序上选择的语言返回文本。如果更改了语言,则从语言 dll 返回的文本会反映更改。

现在我正在 ASP.Net 中创建一个使用相同语言 dll 的 MVC 网站。

问题是语言 dll 上的资源管理器,据我所知,总是返回系统文化的文本。我更改了资源管理器使用的文化信息,但它没有工作。

有人知道我该如何解决这个问题吗? 谢谢

更新: 这么晚才回复很抱歉。周末无法访问互联网...这是我第一次有一个项目为 web 和 windows 使用相同的 dll,我希望行为相同,但事实并非如此。基本上我有一个存储用户和应用程序设置的全局类,其中之一是当前的文化信息,当用户更改它时,语言管理器更新是当前的文化信息变量。当我调用代码来获取字符串的语言时,

resmgr.GetString(label, ci);

其中 resmgr 是语言管理器的 ResourceManager 对象,ci 是cultureinfo 对象并标记我想要获取的字符串,它返回标签/语言的文本。 我为项目支持的每种文化都有一个 resx 文件,一个用于不变/默认的 在 windows 应用程序中工作正常,但在 web 和我所做的一些单元测试中没有,即使我将 ci 值更改为新的文化,结果总是相同的,来自不变文化的字符串。 我试图改变当前的线程文化和当前的 ui 文化,但它没有工作

更新 2: 为什么资源管理器方法 GetResourceSet 为传入 wpf 应用程序但单元测试或 web 中的相同代码返回不变资源集的文化返回正确的资源集。 我错过了一些东西,只是不知道它是什么......

更新 3:由于 IOC 的使用以及语言项目不是引用而是在完成编译时复制到文件夹中,我发现为每个资源创建的文件夹没有被复制到单元测试调试文件夹和网站 bin 文件夹。我更正了,现在正在复制文件,但问题仍然存在。

【问题讨论】:

  • 具有讽刺意味的是,这通常称为本地化,而不是全球化;)或国际化(简称i18n)。
  • @kurtnelle 你找错人了:p
  • @Ruben,您是否考虑了请求中的文化信息? HttpContext.Current.Request.UserLanguages[0](感谢 Kheldar)

标签: c# .net asp.net wpf globalization


【解决方案1】:

请参阅此multipart tutorial,因为它是一个相当扩展的主题。

【讨论】:

  • 谢谢你的链接,我去看看
【解决方案2】:

您可能需要设置您的 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>

【讨论】:

  • 嗨,感谢您的帮助,但问题与网络无关,因为我的单元测试也有相同的行为
  • 您可以在测试设置期间使用Thread.CurrentThread.CurrentUICulture = xxx更改 UI 文化
  • 可以但是结果还是一样,资源管理器从不变的文化中返回字符串
  • 你的时间安排如何。 ResourceManager 会在你改变文化之前启动吗?从 ResourceManager 派生并设置构造函数断点。
  • 我注意到的一件事是,当我运行 Windows 应用程序加载属性称为“_resourceSets”时,资源管理器在调试中可见,Windows 应用程序中的此属性加载了dll 拥有的资源,但在单元测试和 Web 应用程序上却没有,它只是具有不变的资源。
【解决方案3】:

就像我对 update3 感到难过一样,因为我没有为每种语言复制资源 dll,所以当我尝试获取标签时网站和单元测试失败,因为资源管理器没有找到正确的语言,它将始终返回与标签关联的不变字符串。起初,dll 的副本似乎不起作用,但在我从 Visual Studio 运行“清洁解决方案”和“重建解决方案”后,网站和单元测试开始按预期工作。 感谢所有提示,这些对我有很大帮助,然后我就可以确定问题了。

【讨论】:

    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多