1

它类似于Drupal 所拥有的。

我当前的函数定义是这样的:

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

参数的顺序不必遵循这种模式。只string $singular需要出于明显的原因成为第一个。

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

  • 翻译“你好”:

    t('Hello')
    
  • 翻译“Hello”并格式化字符串(我正在使用vsprintfwith 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)
    

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

4

2 回答 2

3

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

于 2012-05-26T21:11:24.810 回答
2

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

array('plural_int' => 5, 'plural_str' => '%d apples', 'singular_int' => 10) 

或者

array('singular_int' => array(10,20,30))
于 2012-05-26T21:05:14.357 回答