2009-01-27
Использование String::insert для локализации в CakePHP
Представим себе будни локализатора веб-приложения. Предположим, что у нас имеется форма логина (английский вариант)
и русский вариант
Обратите внимание, что порядок следования ссылок «сброс пароля» и «создание аккаунта» изменен. Возникает вопрос, как сделать такую надпись с минимумом возни. И тут же возникает ответ — String::insert. Вот код (всей этой формы, хочу заметить, не только надписи)
if ($session->check(‘Message.auth’)) $session->flash(‘auth’);
$pass_opts = String::insert(
__(‘You may :create or :recover’, true),
array(
‘create’ => $html->link(__(‘create account’, true),
array(‘plugin’=>‘users’, ‘controller’=>‘users’, ‘action’=>‘create’)),
‘recover’ => $html->link(__(‘reset password’, true),
array(‘plugin’=>‘users’, ‘controller’=>‘users’, ‘action’=>‘reset’))
)
);
echo $form->create(‘User’, array(‘action’ => ‘login’));
echo $form->input(‘email’);
echo $form->input(‘password’, array(‘after’ => $pass_opts));
echo $form->end(__(‘Login’, true));
Плюсы такого решения очевидны — очередное разделение кода и представления, формат вывода задается локализатором в его любимом poEdit (или чем он там пользуется). Не забудьте только ему сказать, чтобы не переводил слова с двоеточиями перед ними.
Щасливо.