【发布时间】: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