gpt4 book ai didi

c# - Resx 文件的本地化替代方案

转载 作者:行者123 更新时间:2023-11-30 12:22:22 27 4
gpt4 key购买 nike

为什么我不想使用 Resx 文件:

我正在寻找 resx 文件的替代方案来为我的项目提供多语言支持,原因如下:

  • 我不喜欢在编写消息时指定“messageId”,这需要更多的努力,而且对流程来说很烦人,因为我看不到日志消息实际说的是什么,我需要打开另一个选项卡编辑消息
  • 有时我使用内联代码,因为我不想为简单的步骤创建新变量(例如 Log.Info("Iterated {i+1} times");)。使用变量或进行简单的内联计算有时会使整个代码比创建额外的代码行更清晰

我能想到的是:

一个外部应用程序,它为所有字符串抓取已编译的 exe,让您有机会忽略/添加应翻译的字符串。它也可以为所有语言创建一个 XML 或 Json 文件。它将用哈希/id 替换所有字符串,以便仍然可以查找所有语言的字符串。

我是唯一一个对常用的 Resx/集中式字符串数据库解决方案不满意的人吗?我是否遗漏了为什么这不是一个好主意?

最佳答案

依赖既定方法而不是实现您自己的格式的一个原因是翻译。这实际上取决于您的资源是如何翻译的:如果它是由具有技术背景且不介意在纯文本编辑器中工作的志愿者完成的,那么您可以自由地提出自己的资源格式。另一方面,如果您将资源发送给专业翻译人员,他们的技术不是很好,并且更喜欢在具有集成术语管理、翻译内存库、拼写和质量检查等的翻译环境中工作,那么这个环境很可能不会能够处理您自制的资源格式。

因为我已经提到了专业的翻译环境:其中一些工具依赖于 ID 来确定哪些字符串是旧的,哪些是新的。如果您使用文本是 ID 的方法,源语言中的每个固定拼写错误都意味着您创建了一个需要翻译的新字符串 - 并为此付费。如果译者发现字符串的源文本发生了变化,他可以查看变化,注意到拼写错误已得到修复,认为翻译仍然可以并在字符串上签字,无需额外的翻译费用。

顺便说一句,如果您想要像 Log.Info("Iterated {i+1} times"); 这样的字符串进行良好的本地化,您必须找到一些正确处理复数形式的方法。某些语言对不同的数字有不同的语法规则(请参阅 Unicode Language Plural Rules 了解概述)。恐怕仅仅因为某些事情在代码中很容易做并不意味着它很容易本地化。

总结一下:如果您想创建自己的资源格式,请与您的译员交谈。询问他们可以处理哪些格式。考虑一下您的格式附带的与翻译相关的限制,例如,是否有翻译人员不应使用的任何字符,因为它们会破坏您的字符串?撇号和引号在这里是主要候选者,因为它们通常用作资源文件中的字符串定界符,或者 < 和 & 如果您决定采用 XML 方式。考虑转换为 XLIFF反之:大多数翻译环境都可以处理 XLIFF。

关于c# - Resx 文件的本地化替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41090578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com