3

兄弟姐妹们好,

我想知道是否有人会分享他们认为使用 .NET 启用动态多语言系统的最佳策略的经验

我有一位客户希望拥有一个存储所有产品材料和规格的半 MRP 系统。这些信息稍后将用于其他模块,例如发票、采购、营销(提取信息以用于打印目的)等等。

问题是,他希望所有内容都以多种语言存储。他也无法确定语言的数量。因此,语言的数量将随着时间的推移而增长。

所以我想我要问的是,设置包含字段名称(例如,名称)及其数据(例如,Lasker)的动态语言启用网站的最佳策略是什么。

非常感谢,拉斯克

4

2 回答 2

4

有几个选项可用。


首先,到UI 的标签和元素

这里通常有两个可能的选项,您可以使用资源 (*.resx) 或在数据库级别推出自己的多语言支持。他们都有自己的优点和缺点。

资源:

[+] 简单的解决方案,一切都可以立即使用。您在名为Orders.en.resx, Orders.fr.resxetc 的文件系列中定义文本资源。在代码中,您将这些字符串引用为Resources.Orders.Title. 所以它是UI静态元素的简单解决方案。

[+] 资源文件基本上是简单的 XML 文档,可以快速读取和解析,因此不会有太多开销或性能损失。

[-] 如果您需要更改某些内容,则必须重新编译项目。因此,这意味着您需要为可能考虑更新文本的任何人安装开发环境 (VS)。然后,您还需要再次部署重新编译的版本。这同样适用于将新语言引入系统。

[-] 不适用于非技术性内容,因为需要专家的参与。

自定义数据库驱动的多语言解决方案:

[-] 需要一些努力和时间来设计和实施

[-] 每个单独的 UI 文本都将从数据库中提取,这意味着性能下降和数据库上的额外负载

[+] 将允许动态动态更改文本和删除/添加新语言。不需要重新编译或部署。

[+]现在是一个巨大的优势。由于处理文本不需要技术技能,因此您可以将这项工作外包到任何地点。您可以为专业翻译服务商店实施 Web 界面和更改跟踪系统,以便在发现新文本后快速更正您的文本并翻译成您需要的任何语言。


现在到动态文本(实际内容)。

在这里,您可以将每个文本拆分为某个表中每种语言的额外记录,也可以将所有翻译合并到一个实体中。

多条记录:

想象一下以下数据库模型:

[Language]
-----------------
ID    Description

[Translation]
------------------
ID    FallbackText

[TranslationText]
--------------------------------
ID    TRID    LanguageID    Text

[Order]
------------------------------------------------
ID    TitleTRID    DescriptionTRID    RemarkTRID

在数据库中您需要存储多语言文本的任何地方,您都将引用一些 TranslationID。然后根据活动语言,您的系统将寻找适当的翻译,或者如果找不到,则返回默认文本(通常由开发人员设置)。

单一实体:

通过使用某种区分特定翻译的方法,您可以将给定文本的所有翻译保存在一个字符串中。XML 自然地在这里工作。

<translation>
  <en>Order</en>
  <de>Bestellung</de>
  <fr>Commande</fr>
</translation>

在这里,您的数据库模型会更简单,但您需要解析每个文本以提取所需的版本。


这些是广泛使用的策略。哪一个最适合您将取决于您的需求和预期的使用场景。

希望有帮助。:)

于 2009-09-01T09:25:49.260 回答
0

我们遇到了同样的难题,New in Town 基本上提供了选择。

为什么我们选择 resx 选项,主要是因为在大多数情况下,尤其是网站,需要更改的只是静态内容,即标签、UI 元素。如果您正在使用 VS,则在创建页面后,可以选择为您创建 resx 文件。这可以在工具选项的生成本地资源中找到。这将获取所有具有 id 的元素(这很重要),并为您生成第一个 resx 文件。之后为不同的语言创建副本非常简单。

更改语言就像更改 web.config 一样简单。例子

<globalization enableClientBasedCulture="true" culture="ar-EG" uiCulture="ar-EG"/> 

希望有帮助

于 2009-09-01T09:36:25.450 回答