4

我们将开发一个 30 种语言的 ASP.NET 网站。开发该网站的最佳解决方案是什么?要使用哪种架构?

4

2 回答 2

6

我建议将 UI 属性存储在资源文件 ( .resx) 中,并CurrentUICulture为每个请求使用特定语言:

<globalization culture="auto" uiCulture="auto" />

如果您的网站主要面向内容而不是面向业务的应用程序,该应用程序在语言上存在很大差异,您可能需要考虑为每种语言构建单独的页面集,并根据 cookie 或配置文件属性或Request.UserLanguages. 对全球化问题给出一个通用的处方是不可能的。最佳架构因每个项目的性质而异。

于 2009-08-01T12:08:11.727 回答
1

NLS 是一个反复出现的需求,通常当询问有关 NLS 功能的问题时,提出问题的人并没有意识到其复杂性。NLS 通常分为(至少)2 个区域:

  • 用户界面中的 NLS

  • 数据中的 NLS

在您的情况下,基于内容的网站,您甚至可以将第二点拆分为 - 网站提供商生成的数据和 - 用户生成的数据。

对于 UI NLS,您可以使用 Mehrdad 提到的 .resx 机制,但您应该知道,每项本地化工作总是需要编辑源代码(即 resx 文件)。

当我不得不开发一个多语言的网络应用程序时,我因此选择在我的代码中处理 NLS 要求,并创建了几个反映 UI 的特定于 NLS 的表(顺便说一句,这是编写grassx的动机:提取所有可见的来自 aspx 源的文本,例如 Label.Text 等)。有一个单独的应用程序可以上传 UI 定义,并让翻译人员完成他们的工作。主应用程序具有翻译文本的导入功能。

数据模型看起来像这样:Page - PageItems - PageItemTexts(参考一种语言),所以很简单。

可以将相同的模型应用于内容:除了 Page 和 PageItems,您只需拥有 ContentItems,它只包含一个 PK 和一个标识符,以及一个包含与一种语言相关联的 ContentItems 文本的表。

此外,您可以定义某种语言回退链,以便尚未翻译的文本以原始语言或其他(密切相关的)语言显示。

显示的语言可以通过浏览器提供的语言(HTTP_ACCEPT_LANGUAGE)来选择,但应该允许用户覆盖(例如通过组合框)。所选语言应存储在会话变量、cookie 或数据库中(对于注册用户)。

于 2009-08-01T12:30:53.300 回答