6

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

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

由于 .po 文件和 poEdit 易于翻译管理,我不想放弃 gettext(毕竟,我只需单击一下即可更新它)。我有哪些选择?

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

4

1 回答 1

7

其实很简单,你可以像这样定义一个可变参数函数:

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

现在做myGettext('%u %s in a %s', 3, 'monkeys', 'tree')将返回预期的字符串,占位符被剩余的参数替换。您显然还需要实现一个复数感知函数来调用ngettext()

关于 poEdit,您必须修改它搜索的关键字,自从我上次使用它已经有一段时间了,但它很简单,我面临的唯一问题是识别用于复数支持的关键字(请参阅此)。

希望能帮助到你!

于 2011-03-27T01:52:42.080 回答