ASP.NET 多语言策略建议

2023-12-13

嗨,兄弟姐妹们,

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

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

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

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

提前谢谢了, 拉斯克


有多种选择。


首先,到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>

在这里,您的数据库模型会更简单,但您需要解析每个文本以提取所需的版本。


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

希望有帮助。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET 多语言策略建议 的相关文章

随机推荐

  • 当其他应用程序启动时,手电筒会关闭。安卓

    我正在使用 Widget 开发手电筒应用程序 当我在小部件手电筒打开的情况下打开手电筒时 当我启动某些应用程序时 手电筒会关闭 为什么会发生这种情况 为什么我的手电筒无法在后台运行 我怎样才能防止这种情况发生 我希望手电筒只能由用户而不是系
  • 如何在不共享敏感信息的情况下从github推送和拉取?污迹和清洁?

    当我从 github 拉取到服务器存储库时 我想避免覆盖某些文件中的本地化敏感信息 例如 config php 注意 它不是开源类型的存储库 我完全控制存储库 我是唯一的用户 它是私有的 但最重要的是 它基于一个开源框架 可能会改变配置文件
  • 在 VS 2010 C# 项目之间共享 .cs 文件

    我想知道两个独立的 C Windows 项目 在两个独立的解决方案中 是否可以共享一个具有共享定义的 cs 文件 如果是这样 那又如何呢 附言 第一个项目是 ASP NET Web 应用程序 第二个项目是 C Windows 服务 作为 W
  • display:none 是否仍使用渲染性能

    可以说我有这样的标记 div style display none div 浏览器是否仍然使用资源来加载 Flash 对象 或者是否会延迟到调用 javascript 来切换 Flash 对象 dislplay block 现在请记住 我不
  • .NET Core 2.1 HttpClient 不返回预期值

    我正在使用一个接口从这个 url 调用 apihttp localhost 55260 api Accounts GetList 这是控制器的引用 HttpGet Route GetList AllowAnonymous public Ac
  • 单击按钮即可删除/添加类

    我希望能够从 div 中删除一个类 并通过单击按钮添加另一个类 但我无法让它发挥作用 div class hiddennav displaynone ul ul div div class fixednav div class showna
  • 将 Dataframe 传递给 Apply 函数 pandas 作为参数

    可以将 DataFrame 传递给apply像这样的功能 df2 df1 apply func axis 1 args df2 def func df1 df2 do stuff in df2 for each row of df1 ret
  • 在 Athena Aws 中连接行值

    我有 2 个列 可以说 id 和值 我想连接按 id col 分组的值 例如 我有 ID值 1 个 1b 2个 2b 我需要输出为 ID值 1a b 2a b 您可以使用array agg随后是一个array join select id
  • 如何在 Flutter 中使用查询访问 Cloud Firestore 的数组索引?

    我有田地users在文档中 该字段包含数组中的两个元素 我必须检查该数组中的特定两个值 首先 我用了array contains为此方法两次 但出现错误 如何访问 Cloud Firestore 中数组字段的索引 下面的代码是我的方法 但它
  • 存在寄存器溢出机制时,为什么会因为寄存器使用过多而无法启动内核呢?

    1 内核什么时候开始将寄存器溢出到本地内存 2 当没有足够的寄存器时 CUDA运行时如何决定不启动内核并抛出太多资源请求错误 多少个寄存器足以启动内核 3 既然存在寄存器溢出机制 即使没有足够的寄存器 难道不应该启动所有CUDA内核吗 1
  • 将信号连接到插槽会立即导致信号被发射

    我正在用 python 3 3 3 和 pyqt5 编写一个程序 我已经连接了很多信号和插槽 没有任何问题 这导致了一个问题 我的代码如下 def populateVendorAndModelComboBoxes self vendorCo
  • java 中的错误填充异常(RSA 解密)

    在解密 java 中的 RSA Base64 编码字符串时 我遇到一些问题 RSA 加密字符串是由 c Net 生成的 实际上 我使用java创建了公钥和私钥 然后我将公钥交换给 Net Team 他们使用公钥加密了一个字符串RSACryp
  • 复制模板电子表格脚本时,可在 Google 电子表格脚本中安装 onEdit 触发器

    我有一个复制模板电子表格的脚本 A 该电子表格模板中有一个脚本 B 模板电子表格和脚本已成功以编程方式复制并与其他人共享 模板脚本需要使用 onEdit 触发器来修改第三个电子表格 模板电子表格副本中的编辑将同步到第三个电子表格 简单触发器
  • Jquery可排序更新事件只能调用一次吗?

    我正在尝试使用 Jquery 和 Php 进行类别更改 我对此没有问题 我的问题是 当调用更新事件时 它返回 2 个结果 拖动父项有 1 个结果 删除父项有 1 个结果 我只想拨打失联父母的身份证 这是我的脚本 gallery ul sor
  • 如何使用 Cucumber 激活 Spring Boot 配置文件

    我正在寻找一种好方法来激活我的黄瓜测试的弹簧配置文件 黄瓜测试需要使用标记为以下内容的服务的存根版本 Profile test Component class FooServiceStub extends FooService 常规服务如下
  • 检查 pickle 转储的依赖关系

    假设我写了下面的代码 import pickle def foo return foo def bar return bar foo pickle dump bar open bar bin wb 此时 我有一个二进制转储 当然不依赖于fo
  • 如何将单击事件处理程序分配给绘制矩形的一部分?

    想象一下我使用 NET 图形类来绘制一个矩形 然后 我如何分配一个事件 以便如果用户单击某个点或某个点范围 就会发生某些事情 单击事件处理程序 我当时正在阅读 CLR via C 和事件部分 我从所读到的内容中想到了这个场景 这样的代码示例
  • matplotlib:使用 fill_ Between 制作彩色三角形

    我用下面的代码在空间中绘制了随机三角形 但我想用颜色填充三角形 我知道fill between matplotlib 中的函数 但是我不确定如何在下面的示例中实现它 import matplotlib pyplot as plt trian
  • Processbuilder 不重定向 StdOut

    是否可以将输出流重定向回进程 或者根本不重定向 背景故事 我正在尝试使用 processbuilder 启动可执行文件 确切地说是源专用服务器 srcds exe 使用 processbuilder 启动它的结果是 该可执行文件的控制台窗口
  • ASP.NET 多语言策略建议

    嗨 兄弟姐妹们 我想知道是否有人会分享他们认为使用 NET 启用动态多语言系统的最佳策略的经验 我有一位客户希望拥有一个半 MRP 系统来存储所有产品的材料和规格 这些信息稍后将用于其他模块 例如发票 采购 营销 提取信息用于打印目的 等等