有没有办法通过变量传递给 Kohana 消息,然后可以通过 il8n 翻译获取该消息,例如:
Kohana::message('user', 'greeting')
消息/用户.php:
return array
(
'greeting' => __('user.greeting', array(':user' => $name ))
);
i18n/en.php:
return array
(
'greeting' => 'Hello, :user'
);
我抓住了将 il8n 链接到来自 i18n 的消息和 Kohana 3 中的错误消息的方法
我没有您正在寻找的确切答案,但是如果您不介意覆盖当前的Kohana::message()方法,我可以建议一个解决方案。我在自己的应用程序中做了类似的事情。
只需使用以下代码在"应用程序/类"中创建一个 Kohana.php 文件:
class Kohana extends Kohana_Core {
public static function message($file, $path = NULL, $default = NULL, $replacements = array())
{
static $messages;
if ( ! isset($messages[$file]))
{
// Create a new message list
$messages[$file] = array();
if ($files = Kohana::find_file('messages', $file))
{
foreach ($files as $f)
{
// Combine all the messages recursively
$messages[$file] = Arr::merge($messages[$file], Kohana::load($f));
}
}
}
if ($path === NULL)
{
// Return all of the messages
$message = $messages[$file];
}
else
{
// Get a message using the path
$message = Arr::path($messages[$file], $path, $default);
}
return !empty($replacements) ? strtr($message,$replacements) : $message;
}
}
基本上,唯一值得注意的变化是添加了$replacements
参数和return !empty($replacements) ? strtr($message,$replacements) : $message;
,它将消息的内容替换为替换数组中的内容。
所以你现在可以这样做:
Kohana::message('user', 'greeting', NULL, array(':user' => $name));
消息/用户.php:
return array
(
'greeting' => __('user.greeting'),
);