使用 Poedit 在哪里确定“源文本”

Posted

技术标签:

【中文标题】使用 Poedit 在哪里确定“源文本”【英文标题】:Where is 'source text' determined, using Poedit 【发布时间】:2016-02-12 10:39:28 【问题描述】:

我对 Poedit 还很陌生,但我正在尝试翻译一个 Wordpress 主题。我想我正在慢慢开始理解整个 I18n、l10n 和 po、pot 和 mo 的事情。

我已经购买了 Poedit 许可证,然后正在尝试创建一个新的 pot-file。当我选择我要翻译的文件夹时,它会自动将我要翻译的语言设置为英语(我没有选择它)。这是一个旧主题,我已经修改并使用过,所以这张图片上的一些词是英文,但主题实际上是丹麦文。

那么,我应该在哪里更改 Poedit 认为我正在翻译的语言?

【问题讨论】:

【参考方案1】:

gettext 翻译系统假定源文本始终为英文。它有充分的理由,包括它是计算的通用语言,并且为任何源语言设计复数形式处理都是疯狂的。你能做的最好的事情就是用英语开发你的代码。

因此,PO 文件格式(不是 Poedit 的,而是标准的东西)无法对源语言进行编码 - 没有必要,已知它是英语。

一些开发者坚持使用非英语源文本,违背他们的更好判断(出于某种原因,这在德国相对普遍)。为了适应这一点,Poedit 使用 CLD2 自动检测自 1.8 以来的语言(即 Chrome 使用的相同语言)。没有办法覆盖它,因为...好吧,见上文。

换句话说,就您而言,Poedit 将来源视为英语,因为它主要是英语。如果是丹麦语,Poedit 会检测到。恰当的例子:您的整个屏幕截图(可能只保留 1 个字)是英文的,而不是您所说的丹麦文。

除了次优建议外,错误检测的源语言不会产生负面影响。不用担心。

【讨论】:

然而这太愚蠢了,因为很容易有数以百万计的程序是用其他语言的字符串开发的,当你想翻译其中一个时,就会出现这种尴尬的情况......但如果它只影响建议,那么当我从“英语”翻译成英语时,我会忍受警告。 “数以百万计的程序”可能有点高估了它...... gettext 的设计是相当合理的选择,如果您考虑它的创建地点、时间和用途,肯定不是“愚蠢”。无论如何,正如我上面解释的,Poedit 确实 支持其他语言并且可以很好地检测它们。当您确实拥有(大部分)英文源文本时,您只会收到“English to English”警告。不要将其视为“愚蠢”,而是检查您的文件。 仅为一家本地或国家公司开发的大多数程序根本没有内置国际化功能,这意味着所有 IHM 字符串都将仅使用本地语言。大多数情况下,国际化(和本地化)只是在产品或公司有机会扩展到国外市场时才添加的。这就是说,我对 poedit 默认为英语没有任何问题,只是我希望能够更改它(特别是因为它试图猜测语言,为什么不启用在 PO 中编辑源语言的可能性?)。 至于我的具体问题,我同意这是一团糟,因为我有英文和法文的字符串。由于很多英语单词看起来像法语单词,我并不感到惊讶,总的来说它会猜测英语是源语言,但在这个项目上,官方的源语言应该是法语,而英语单词是由于项目管理非常马虎.所以是的,我可以说我的项目设计更加“愚蠢”,但这就是生活^^无论如何我+1ed,因为这回答了这个问题和我的问题。 “为什么不启用在 PO 中编辑源语言的可能性”?因为,正如我在上面的答案中解释的那样,在 PO 格式中没有办法做到这一点......【参考方案2】:

自从回答了这个问题后,就可以使用 PO Header 中的自定义标题字段告诉 Poedit 源语言。 (自 1.8.10 起)

X-Source-Language: de

见:Specify the source language of the PO file

【讨论】:

是的。请注意,它是仅用于 Poedit 的非标准扩展,并且仅在您具有混合语言源(否则检测有效)时才有用,因此您通过以下方式有效地为 Poedit 故意错误信息使用它。如果您要进行多次传递预翻译,或者用于从 XLIFF 进行往返,其中可能存在可以检测到的更精细调整的源语言(例如 en_GB 与 en),则很有用,否则不多。

以上是关于使用 Poedit 在哪里确定“源文本”的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 不是确定性的,它应该在哪里

“未定义 ctrls”错误不确定在哪里定义它

是否可以从翻译中创建新的 .po 文件?

确定浮点数中的第一个零在哪里

什么是 get-pip.py 校验和?我在哪里可以确定?

不确定在哪里订阅 3 个与 switchMap 链接的 observables