关于ASP.NET多语言策略的建议

时间:2009-09-01 08:48:53

标签: asp.net multilingual

兄弟姐妹们,

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

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

问题是,他希望一切都能存储多种语言。他也无法修复语言数量。因此,语言的数量将随着时间的推移而增长。

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

非常感谢, 斯克

2 个答案:

答案 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"/> 

希望有所帮助