Gettext占位符

时间:2011-03-26 22:37:39

标签: php internationalization gettext placeholder

我正在PHP + CodeIgniter中构建一个多语言应用程序。我已经决定使用gettext进行UI文本翻译,到目前为止,它已被证明是高效且易于使用的。

但现在我面临着一些非常烦人的事情:gettext()函数只接受一个参数,而我想从Zend Framework的gettext适配器获得类似printf的行为,我可以使用{{1 }},%1$s等作为占位符,然后将替换字符串指定为Zend视图的%2$s函数的附加参数。

由于使用.po文件和poEdit进行简单的翻译管理,我不想放弃gettext(毕竟我只需点击一下即可更新)。我有什么选择?

我已经尝试编写一个帮助器来与gettext交互:通过gettext运行第一个参数,然后在结果字符串上运行strtr。你会推荐其他/更好的方法吗?

1 个答案:

答案 0 :(得分:6)

实际上很简单,你定义一个像这样的可变函数:

function myGettext($id)
{
    return vsprintf(gettext($id), array_slice(func_get_args(), 1));
}

现在执行myGettext('%u %s in a %s', 3, 'monkeys', 'tree')将返回预期的字符串,其中占位符替换为其余参数。您显然还需要实现一个多重感知函数,而不是调用ngettext()

关于poEdit,你必须修改它搜索的关键词,自从我上次使用它以来已经有一段时间了,但它很简单,我遇到的唯一问题是识别复数支持的关键字(see this)。

希望它有所帮助!