与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)
您对如何更好地实现此类功能以及避免这些冲突有任何建议吗?
答案 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))