有多种选择。
首先,到UI 的标签和元素.
通常有两种可能的选择,您可以使用资源 (*.resx) 或在数据库级别推出您自己的多语言支持。它们都有各自的优点和缺点。
资源:
[+] 简单的解决方案,一切准备就绪,可以立即使用。您可以在一系列文件中定义文本资源,其名称如下Orders.en.resx, Orders.fr.resx
等等。在代码中,您将这些字符串引用为Resources.Orders.Title
。所以这是一个简单的解决方案static用户界面的元素。
[+] 资源文件基本上是简单的 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>
在这里,您的数据库模型会更简单,但您需要解析每个文本以提取所需的版本。
这些是广泛使用的策略。哪一种最适合您取决于您的需求和预期的使用场景。
希望有帮助。 :)