兄弟姐妹们,
我想知道是否有人会分享他们认为使用.NET启用动态多语言系统的最佳策略的经验
我有一位客户希望拥有一个存储所有产品材料和规格的半MRP系统。这些信息稍后将用于其他模块,如发票,采购,市场营销(提取信息以进行打印)等等。
问题是,他希望一切都能存储多种语言。他也无法修复语言数量。因此,语言的数量将随着时间的推移而增长。
所以我想我要问的是,设置动态语言网站的最佳策略是什么,该网站包含字段名称(例如,名称)以及它的数据(例如,Lasker)。
非常感谢, 斯克
答案 0 :(得分:4)
有几种选择。
首先,
这里通常有两个选项,您可以使用资源(* .resx)或在数据库级别推出自己的多语言支持。他们都有自己的优点和缺点。
<强> Resoures:强>
[+]简单的解决方案,一切都准备好立即使用。您可以在名为Orders.en.resx, Orders.fr.resx
等文件系列中定义文本资源。在代码中,您将这些字符串引用为Resources.Orders.Title
。因此,它是UI的静态元素的简单解决方案。
[+]资源文件基本上是可以快速读取和解析的简单XML文档,因此没有太多的开销或性能损失。
[ - ]如果您需要更改某些内容,则必须重新编译该项目。因此,这意味着您将需要为可能考虑更新文本的任何人安装开发环境(VS)。然后,您还需要再次部署重新编译的版本。这同样适用于将新语言引入系统。
[ - ]不适用于非技术性的东西,因为需要专家的参与。
自定义数据库驱动的多语言解决方案:
[ - ]需要一些努力和时间来设计和实施
[ - ]每个UI文本都将从数据库中提取,这意味着数据库性能下降和额外负载
[+]将允许动态动态更改文本和删除/添加新语言。不需要重新编译或部署。
[+] 现在是一个巨大的优势。由于不需要技术技能来处理文本,因此您可以将此工作外包到任何位置。您可以为专业翻译服务商店实施网络界面和更改跟踪系统,以便在发现新文本后更正您的文本并快速翻译成您需要的任何语言。
现在转到动态文本(实际内容)。
在这里,您可以将每个文本拆分为某个表中每种语言的额外记录,或者将所有翻译合并为一个实体。
多条记录:
想象一下以下数据库模型:
[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>
这里您的数据库模型会更简单,但您需要解析每个文本以提取所需的版本。
这些是广泛使用的策略。哪一个最适合您将取决于您的需求和您的预期使用情况。
希望有所帮助。 :)
答案 1 :(得分:0)
我们有同样的难题,New in Town已经基本上给出了选择。
为什么我们使用resx选项,主要是因为在大多数情况下,尤其是网站,所有需要更改的是静态内容,即标签,UI元素。如果你正在使用VS,一旦你创建了一个页面,就可以选择为你创建resx文件。这可以在“工具”选项的“生成本地资源”中找到。这将获取所有具有ID的元素(这很重要),并为您生成第一个resx文件。在此之后,为不同语言创建副本非常简单。
更改语言就像更改web.config一样简单。 例子
<globalization enableClientBasedCulture="true" culture="ar-EG" uiCulture="ar-EG"/>
希望有所帮助