用于gettext转换的多功能功能

时间:2012-05-26 20:52:48

标签: php function gettext

what Drupal has类似。

我目前的功能定义是这样的:

string t(string $singular, [string $plural, int $number, mixed $arg1, ...])

参数的顺序不必遵循这种模式。由于显而易见的原因,只有string $singular需要成为第一个。

一些示例来说明它是如何工作的:

  • 翻译“你好”:

    t('Hello')
    
  • 翻译“Hello”并格式化字符串(我正在vsprintf使用func_get_args()

    t('Hello %s', $user)
    
  • 多个翻译:

    t('%d apple', '%d apples', 5, 5)
    

    所以这里的问题就开始了。我假设这是一个复数翻译的请求,如果第二个参数是一个字符串并且第三个参数是整数。

    问题在于我可以错误地拦截单个翻译请求:

    $user = 'Mary';
    t('%s, you need at least %d apples for me to take you srsly', $user, 420)
    

您对如何更好地实现此类功能以及避免这些冲突有任何建议吗?

2 个答案:

答案 0 :(得分:3)

我会使用标准_()和ngettext(),因为这样你就可以获得通过xgettext shell命令收集的所有可本地化字符串。您甚至可以使用自己的函数名称,如t()和nt(),并仍然使用xgettext提取它们(请参阅https://developer.mozilla.org/en/gettext中的--keyword param),但您不能(也不应该)避免使用两个函数。

答案 1 :(得分:2)

如果你只有2个参数,首先是一个字符串,第二个是简单的int,但是在复杂的情况下,它会是像

这样的关联数组
array('plural_int' => 5, 'plural_str' => '%d apples', 'singular_int' => 10) 

array('singular_int' => array(10,20,30))