资源理解Gettext复数:如何在WordPress中处理复杂的复数形式

理解Gettext复数:如何在WordPress中处理复杂的复数形式

SimplePoTranslate团队2025年12月1日

在英语中,复数形式很简单。你有一个“Apple”,你有两个或更多的“Apples”。

但是,如果你正在将你的WordPress网站翻译成波兰语、俄语或阿拉伯语,你即将步入一个语言雷区。

你知道吗,在俄语中,“文件”这个词会根据你有1个文件、2-4个文件还是5个以上的文件而变化?

  • 1 файл(1个文件)
  • 3 файла(3个文件)
  • 5 файлов(5个文件)

如果你的翻译工具盲目地假设每种语言都像英语一样运作(单数 vs 复数),你的用户将会看到语法错误的句子,这会让你的品牌看起来不专业。

本指南解释了WordPress和Gettext如何处理这些复杂的规则,以及如何正确地自动化它们。

复数字符串的技术剖析

在标准的.po文件中,复数字符串如下所示:

msgid "You have %d new message"
msgid_plural "You have %d new messages"
msgstr[0] ""
msgstr[1] ""
  • msgid: 单数形式(用于数量 = 1)。
  • msgid_plural: 复数形式(用于数量 != 1)。
  • msgstr[N]: 翻译。

对于英语,你只需要msgstr[0](单数)和msgstr[1](复数)。但对于其他语言,你可能需要msgstr[2]msgstr[3]甚至msgstr[5]

Plural-Forms头部

WordPress如何知道使用哪个msgstr?它会查看你的.po文件的头部。

对于俄语,头部如下所示: "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"

这个可怕的数学公式告诉WordPress:

  1. 有3种可能的形式(nplurals=3)。
  2. 如果数字以1结尾(但不是11),使用形式0。
  3. 如果数字以2-4结尾(但不是12-14),使用形式1。
  4. 其他情况使用形式2。

为什么大多数翻译者在这里失败

当你使用通用的AI Wrapper或基本的自动化工具时,它通常会忽略Plural-Forms头部。

它看到英语输入(2种形式)并试图将其强加给目标语言。

  • 错误: 它可能会填充msgstr[0]msgstr[1],但将msgstr[2]留空。
  • 结果: 当一个俄罗斯用户有5条消息时,WordPress寻找形式2。如果是空的或缺失的,WordPress通常会回退到原始的英语字符串。

突然之间,你完全本地化的网站在俄语句子中间用英语显示“You have 5 new messages”。这破坏了沉浸感和用户信任。

解决方案:支持复数的上下文感知AI

正确处理复数需要两件事:

  1. 严格遵守Gettext标准: 工具必须尊重头部中的nplurals计数。
  2. 语言智能: AI必须知道如何为那些特定的数字范围变位单词。

这是SimplePoTranslate的一个原生功能。

我们如何处理复杂的复数

我们不仅仅是翻译文本;我们阅读你.po头部中的数学。

当你上传一个文件以翻译成波兰语(有3种复数形式)时:

  1. 头部分析: 我们检测到nplurals=3
  2. 提示工程: 我们的系统指示上下文感知AI:“将此字符串翻译成波兰语。准确提供3种形式:一种用于单数,一种用于以2-4结尾的数字,一种用于其他。”
  3. 验证: 在编译文件之前,我们验证输出是否准确包含msgstr[0]msgstr[1]msgstr[2]

我们要自动处理这个问题。你不需要知道目标语言的语法规则。你上传文件,我们正确地填充每个所需的复数形式。

比人工翻译更好?

除非你能流利地说目标语言,否则你无法手动填写这些复数形式。你将会是猜测。SimplePoTranslate利用在这些精确语法规则上训练过的高级LLM,确保母语级别的准确性。

搞定你的复数

不要让“1 Apple, 5 Apples”毁了你网站的专业形象。使用一个理解全球语法复杂性的工具。

SimplePoTranslate允许你免费测试我们的复数化引擎。

准备好毫无头痛地翻译了吗?在SimplePoTranslate.com免费开始