各位兄弟姐妹:
我想知道是否有人可以分享他们的经验,他们认为使用.NET实现动态多语言系统的最佳策略是什么
我有一个客户谁希望有一个半MRP系统,存储所有产品的材料和规格。这些信息稍后将用于其他模块,如发票、采购、市场营销(提取信息用于打印)等。
问题是,他希望所有的东西都存储在多种语言中。他也无法确定语言的数量。因此,语言的数量将随着时间的推移而增长。
所以我想我问的是,什么是最好的策略来建立一个动态语言启用的网站,包括字段名称(例如,名称)和它的数据(例如,Lasker)。
非常感谢,Lasker
发布于 2009-09-01 09:25:49
有几个选项可用。
首先,到UI的标签和元素。
通常有两种选择,要么使用资源(*.resx),要么在数据库级别推出自己的多语言支持。它们都有各自的优点和缺点。
资源:
+简单的解决方案,一切都准备就绪,可以立即使用。您在名为Orders.en.resx, Orders.fr.resx等的一系列文件中定义一个文本资源。在代码中,您将这些字符串引用为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-01 09:36:25
我们遇到了同样的难题,New in given基本上给出了选择。
我们为什么选择resx选项,主要是因为在大多数情况下,尤其是网站,所有需要更改的都是静态内容,即标签、UI元素。如果你正在使用VS,一旦你创建了一个页面,就会有一个为你创建resx文件的选项。这可以在Tools选项的Generate Local Resource中找到。这将拾取所有具有ids的元素(这一点很重要),并为您生成第一个resx文件。在那之后,为不同的语言创建副本就非常简单了。
更改语言就像更改web.config一样简单。示例
<globalization enableClientBasedCulture="true" culture="ar-EG" uiCulture="ar-EG"/> 希望这能有所帮助
https://stackoverflow.com/questions/1361311
复制相似问题