兄弟姐妹们好,
我想知道是否有人会分享他们认为使用 .NET 启用动态多语言系统的最佳策略的经验
我有一位客户希望拥有一个存储所有产品材料和规格的半 MRP 系统。这些信息稍后将用于其他模块,例如发票、采购、营销(提取信息以用于打印目的)等等。
问题是,他希望所有内容都以多种语言存储。他也无法确定语言的数量。因此,语言的数量将随着时间的推移而增长。
所以我想我要问的是,设置包含字段名称(例如,名称)及其数据(例如,Lasker)的动态语言启用网站的最佳策略是什么。
非常感谢,拉斯克
兄弟姐妹们好,
我想知道是否有人会分享他们认为使用 .NET 启用动态多语言系统的最佳策略的经验
我有一位客户希望拥有一个存储所有产品材料和规格的半 MRP 系统。这些信息稍后将用于其他模块,例如发票、采购、营销(提取信息以用于打印目的)等等。
问题是,他希望所有内容都以多种语言存储。他也无法确定语言的数量。因此,语言的数量将随着时间的推移而增长。
所以我想我要问的是,设置包含字段名称(例如,名称)及其数据(例如,Lasker)的动态语言启用网站的最佳策略是什么。
非常感谢,拉斯克
有几个选项可用。
首先,到UI 的标签和元素。
这里通常有两个可能的选项,您可以使用资源 (*.resx) 或在数据库级别推出自己的多语言支持。他们都有自己的优点和缺点。
资源:
[+] 简单的解决方案,一切都可以立即使用。您在名为Orders.en.resx, Orders.fr.resx
etc 的文件系列中定义文本资源。在代码中,您将这些字符串引用为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>
在这里,您的数据库模型会更简单,但您需要解析每个文本以提取所需的版本。
这些是广泛使用的策略。哪一个最适合您将取决于您的需求和预期的使用场景。
希望有帮助。:)
我们遇到了同样的难题,New in Town 基本上提供了选择。
为什么我们选择 resx 选项,主要是因为在大多数情况下,尤其是网站,需要更改的只是静态内容,即标签、UI 元素。如果您正在使用 VS,则在创建页面后,可以选择为您创建 resx 文件。这可以在工具选项的生成本地资源中找到。这将获取所有具有 id 的元素(这很重要),并为您生成第一个 resx 文件。之后为不同的语言创建副本非常简单。
更改语言就像更改 web.config 一样简单。例子
<globalization enableClientBasedCulture="true" culture="ar-EG" uiCulture="ar-EG"/>
希望有帮助