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

关于ASP.NET多语言策略的建议,asp.net,multilingual,Asp.net,Multilingual,嗨,兄弟姐妹们 我想知道是否有人会分享他们的经验,他们认为使用.NET实现动态多语言系统的最佳策略是什么 我有一位客户希望有一个半MRP系统来存储所有产品的材料和规格。这些信息稍后将用于其他模块,如发票、采购、营销(为打印目的提取信息)等 问题是,他希望所有东西都能用多种语言存储。他也无法确定语言的数量。因此,语言的数量将随着时间的推移而增长 所以我想我要问的是,建立一个包含字段名(如name)和数据(如Lasker)的动态语言网站的最佳策略是什么 多谢各位, 拉斯克有几种选择 首先,指向UI

嗨,兄弟姐妹们

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

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

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

所以我想我要问的是,建立一个包含字段名(如name)和数据(如Lasker)的动态语言网站的最佳策略是什么

多谢各位,
拉斯克

有几种选择


首先,指向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>

命令
贝斯特隆
命令
在这里,数据库模型将更简单,但需要解析每个文本以提取所需的版本


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


希望有帮助。:)

我们也遇到了同样的难题,新城区基本上已经给出了选择

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

更改语言与更改web.config一样简单。 范例



希望这能有所帮助

非常感谢你的回答。。我想我将继续使用资源(用于静态文本)和多记录数据库驱动的实际数据。
<globalization enableClientBasedCulture="true" culture="ar-EG" uiCulture="ar-EG"/>