我在我的应用程序中加入了一个类似于 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'
最佳答案
gettext 一次只处理一个字符串。 你可能想要的是 ngettext。 (查找语法)
在那里,您将输入一个文本表示单数,另一个文本表示复数,还有数字。
聪明的是,许多语言的复数结构与英语完全不同。 例如,俄语使用三种不同的形式。 一个是计数以发音的“一”结尾的地方: 1、21、31、41 等 第二种形式用于计数,以发音为 2、3 或 4 结尾。 第三种形式是为了其余...
并且,使用 ngettext,这可以完成。 是的,在 poedit 中,必须正确定义目标语言的复数结构,但是这样就可以了。
关于php - PoEdit 关键字 - 复数形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407840/