将变量绑定到Kohana消息

时间:2012-05-09 14:58:39

标签: php kohana kohana-3 kohana-3.2

有没有办法将变量传递给Kohana消息,然后可以通过il8n翻译来获取,例如:

Kohana::message('user', 'greeting')

消息/ user.php的:

return array
(
    'greeting' => __('user.greeting', array(':user' => $name ))
);

I18N / en.php:

return array
(
    'greeting' => 'Hello, :user'
);

我抓住了将il8n链接到来自i18n and Error messages in Kohana 3

的消息的方法

1 个答案:

答案 0 :(得分:2)

我没有您正在寻找的确切答案,但如果您不介意覆盖当前的Kohana :: message()方法,我可以建议一个解决方案。我在自己的应用程序中做了类似的事情。

使用以下代码在'applications / classes'中创建一个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));

消息/ user.php的:

return array
(
    'greeting' => __('user.greeting'),
);