Мне очень нравится максимально автоматизировать код.
Иногда даже пара строк кода в нужном месте могут существенно сократить время разработки или облегчить его дальнейшую поддержку.
Я много пишу на Yii framework. В нем реализована очень удобная, на мой взгляд, система мультиязычности. Кто не использовал, настоятельно рекомендую ознакомиться и внедрять в свой проект на самом начальном этапе разработки. Сложно предсказать скорость развития проекта и время его выхода на международную аудиторию :)
Итак, по умолчанию сообщения проекта хранятся в директории messages/{ID языка}.
В своей практике я разбиваю папку языка messages/ru на поддиректории: controllers, models, widgets. Затем в них уже собираю файлы с сообщением. Имя файла соответствует имени контроллера/модели/виджета. Файл с общими фразами для всего приложения, по умолчанию app.php, оставляем в папке языка.
Ок, удобно, скажете вы, но ведь теперь нужно вместо
набирать еще более длинное выражение:
Открываем файл app.php и меняем его содержимое с:
Как быть дальше с моделями и виджетами, я расскажу во второй части статьи.
Я много пишу на Yii framework. В нем реализована очень удобная, на мой взгляд, система мультиязычности. Кто не использовал, настоятельно рекомендую ознакомиться и внедрять в свой проект на самом начальном этапе разработки. Сложно предсказать скорость развития проекта и время его выхода на международную аудиторию :)
Итак, по умолчанию сообщения проекта хранятся в директории messages/{ID языка}.
В своей практике я разбиваю папку языка messages/ru на поддиректории: controllers, models, widgets. Затем в них уже собираю файлы с сообщением. Имя файла соответствует имени контроллера/модели/виджета. Файл с общими фразами для всего приложения, по умолчанию app.php, оставляем в папке языка.
Ок, удобно, скажете вы, но ведь теперь нужно вместо
Yii::t("app", "Hello, world")
набирать еще более длинное выражение:
Yii::t("controllers/controller", "Hello, world")Да, отвечу я вам, но пусть за нас это сделает машина.
Открываем файл app.php и меняем его содержимое с:
return [ "message 1" => "сообщение 1", "message 2" => "сообщение 2", ... "message N" => "сообщение Н", ]на следующее:
$controllerMessages = dirname(__FILE__).'/controllers/'.Yii::app()->controller->id.'.php'; return return CMap::mergeArray( [ "message 1" => "сообщение 1", "message 2" => "сообщение 2", ... "message N" => "сообщение Н", ], (is_file($controllerMessages) ? require_once($controllerMessages) : []) )Теперь при вызове Yii::t('app', 'Hello world'), словарь сообщений для текущего контроллера подключится автоматически.
Как быть дальше с моделями и виджетами, я расскажу во второй части статьи.