理解Gettext复数:如何在WordPress中处理复杂的复数形式
在英语中,复数形式很简单。你有一个“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:
- 有3种可能的形式(
nplurals=3)。 - 如果数字以1结尾(但不是11),使用形式0。
- 如果数字以2-4结尾(但不是12-14),使用形式1。
- 其他情况使用形式2。
为什么大多数翻译者在这里失败
当你使用通用的AI Wrapper或基本的自动化工具时,它通常会忽略Plural-Forms头部。
它看到英语输入(2种形式)并试图将其强加给目标语言。
- 错误: 它可能会填充
msgstr[0]和msgstr[1],但将msgstr[2]留空。 - 结果: 当一个俄罗斯用户有5条消息时,WordPress寻找形式2。如果是空的或缺失的,WordPress通常会回退到原始的英语字符串。
突然之间,你完全本地化的网站在俄语句子中间用英语显示“You have 5 new messages”。这破坏了沉浸感和用户信任。
解决方案:支持复数的上下文感知AI
正确处理复数需要两件事:
- 严格遵守Gettext标准: 工具必须尊重头部中的
nplurals计数。 - 语言智能: AI必须知道如何为那些特定的数字范围变位单词。
这是SimplePoTranslate的一个原生功能。
我们如何处理复杂的复数
我们不仅仅是翻译文本;我们阅读你.po头部中的数学。
当你上传一个文件以翻译成波兰语(有3种复数形式)时:
- 头部分析: 我们检测到
nplurals=3。 - 提示工程: 我们的系统指示上下文感知AI:“将此字符串翻译成波兰语。准确提供3种形式:一种用于单数,一种用于以2-4结尾的数字,一种用于其他。”
- 验证: 在编译文件之前,我们验证输出是否准确包含
msgstr[0]、msgstr[1]和msgstr[2]。
我们要自动处理这个问题。你不需要知道目标语言的语法规则。你上传文件,我们正确地填充每个所需的复数形式。
比人工翻译更好?
除非你能流利地说目标语言,否则你无法手动填写这些复数形式。你将会是猜测。SimplePoTranslate利用在这些精确语法规则上训练过的高级LLM,确保母语级别的准确性。
搞定你的复数
不要让“1 Apple, 5 Apples”毁了你网站的专业形象。使用一个理解全球语法复杂性的工具。
SimplePoTranslate允许你免费测试我们的复数化引擎。
准备好毫无头痛地翻译了吗?在SimplePoTranslate.com免费开始