【问题标题】:PoEdit keywords - pluralsPoEdit 关键字 - 复数
【发布时间】:2011-12-06 22:31:33
【问题描述】:

我在我的应用程序中加入了类似 gettext 的本地化系统,但我的翻译功能如下所示:

 t($category, $string, [$plural_string, $number, $vprintf_arguments])

我的 PoEdit 关键字:

t:2
t:2,3
  • t:2 告诉 PoEdit 解析 $string,它显然可以工作
  • t:2,3 应该告诉 PoEdit 解析 $string$plural_string - 但它不是:(

它只看到$string,所以我没有解析复数形式......我该如何解决这个问题?我不想将我的函数切换为不同的参数格式,因为我喜欢这个:(

此外,此函数的作用类似于 sprintf 替换:

  • 如果第三个参数 ($plural_string) 是一个数组,则函数会将数组中的值视为 vsprintf 的参数
  • 如果第三个参数是字符串并且提供了 $number,该函数将把 $vprintf_arguments 作为 vsprintf 的参数(如果提供的话),并且将 $plural_string 作为 $string 的复数形式

无论如何,PoEdit 不应该干扰未引用的参数,对吧?我的意思是它只会将 $plural_string 解析为字符串,如果它看起来像 'abc abc'

【问题讨论】:

  • 抱歉,如果这些问题对您来说是微不足道的,但我对这个产品的经验非常有限。您能否向我们展示 .po 文件的片段,其中包含无法获得复数的字符串?您是否填充了 msgid_plural 字段?您是否在文件中使用了预期的字符集/编码?
  • 你能发布更多的php函数吗?还有另一个例子?你期望什么,你得到什么。谢谢-Tim =)
  • 是的,没有看到任何代码就很难理解出了什么问题..而且,您使用哪种分词器来提取翻译字符串?

标签: php localization gettext poedit xgettext


【解决方案1】:

gettext 一次只处理一个字符串。 您可能追求的是 ngettext。 (查找语法)

在那里,您将输入一个单数文本,另一个用于复数,还有数字。

聪明之处在于,许多语言的复数结构与英语完全不同。 例如,俄语使用三种不同的形式。 一种是计数以发音的“一”结尾的地方: 1、21、31、41 等 第二种形式用于计数,以明显的 2、3 或 4 结尾。 第三种形式是其余的......

而且,使用 ngettext,可以做到这一点。 是的,在 poedit 中,必须正确定义目标语言的复数结构,但这样就可以了。

http://www.gnu.org/s/hello/manual/gettext/Plural-forms.html

【讨论】:

  • 欢迎来到 Stack Overflow;很棒的第一个答案。我一直认为gettext 无法帮助对大多数语言进行适当的多元化。谢谢!
【解决方案2】:

就像 Tor-Bjorn Fjellner 已经回答的那样,这实际上应该可以工作。

如果您告诉 poedit 该语言实际上有复数形式 (Translating Plural Forms with Poedit) 并考虑了您的关键字,poedit 会提供它们进行翻译。

示例

复数形式: nplurals=2; plural=n != 1;

关键词:

  • t:2
  • t:2,3

PHP 代码:

<?php

t("cat", "strA");

t("cat", "strB1", "strB2", 2, array());

t("cat", "strC1", "strC2", 3, array());

Poedit 用户界面:

我在您的问题中不明白的是关于数组等的要点。我无法破译您在 poedit/gettext 域中的意图,我认为如果您添加一些具体的代码示例以及结果应该如何,您的问题会有所帮助。

【讨论】:

  • 好的,我让它工作了!!事实证明,我必须在关键字列表中颠倒 t:2 和 t:2,3。你是怎么让它按这个顺序处理关键字的?
  • 不知道,我不认为我做了什么特别的事情。可能是程序版本不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2017-09-17
  • 2013-04-04
  • 2013-12-17
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多