我们将开发一个30种语言的ASP.NET网站。 开发该网站的最佳解决方案是什么?要使用哪种架构?
答案 0 :(得分:6)
我建议将UI属性存储在资源文件(.resx
)中,并为每个请求使用CurrentUICulture
特定语言:
<globalization culture="auto" uiCulture="auto" />
如果您的网站主要面向内容而不是面向业务的应用程序,这些应用程序根据语言而有很大差异,您可能需要考虑为每种语言构建单独的页面集,并根据cookie或配置文件属性重定向用户或Request.UserLanguages
。对全球化问题给出一般处方是不可能的。最佳架构根据每个项目的性质而有很大差异。
答案 1 :(得分:1)
NLS是一项反复出现的要求,通常在询问有关NLS功能的问题时,人们要求不了解复杂性。 NLS通常分为(至少)2个区域:
用户界面中的NLS
数据中的NLS
在您的情况下,基于内容的网站,您甚至可以将第二点分为 - 网站提供商生成的数据和 - 用户生成的数据。
对于UI NLS,您可以使用Mehrdad提到的.resx机制,但是您应该知道,本地化的每项工作总是需要编辑源代码(即resx文件)。
当我不得不开发一个多语言的Web应用程序时,我因此选择在我的代码中处理NLS要求,并创建了一些镜像UI的特定于NLS的表(顺便说一句,这是写{{0}的动机。 3}}:从aspx源中提取所有可见文本,例如Label.Text等)。有一个单独的应用程序来上传UI定义,让翻译人员完成他们的工作。主应用程序具有翻译文本的导入功能。
数据模型如下所示:Page - PageItems - PageItemTexts(参考语言),所以它非常简单。
可以将相同的模型应用于内容:而不是Page和PageItems,您只需拥有仅包含PK和标识符的ContentItems,以及包含与语言关联的ContentItems文本的表。
此外,您可以定义某种语言回退链,以便使用原始语言或其他一些(密切相关的)语言显示尚未翻译的文本。
可以通过浏览器提供的语言(HTTP_ACCEPT_LANGUAGE)选择显示的语言,但是应该允许用户覆盖(例如,通过组合框)。所选语言应存储在会话变量,cookie或数据库中(对于注册用户)。