До сих пор я поддерживал таблицу «словарь» в своей базе данных, например:
+-----------+---------------------------------------+-----------------------------------------------+--------+
| phrase | en | fr | etc... |
+-----------+---------------------------------------+-----------------------------------------------+--------+
| generated | Generated in %1$01.2f seconds at %2$s | Créée en %1$01.2f secondes à %2$s aujourd'hui | ... |
| submit | Submit... | Envoyer... | ... |
+-----------+---------------------------------------+-----------------------------------------------+--------+
Затем я выберу все строки в базе данных для столбца, который соответствует интересующему нас языку (или прочту кэш из файла для ускорения поиска в БД), и дам дамп словаря в массив с именем $lng
.
Тогда я буду иметь вспомогательные объекты HTML, как это на мой взгляд:
$html->input(array('type' => 'submit', 'value' => $lng['submit'], etc...));
...
$html->div(array('value' => sprintf($lng['generated'], $generated, date('H:i')), etc...));
Переводы могут также отображаться в ответах в формате PDF, XLS и AJAX.
Проблема с моим подходом состоит в том, что теперь у меня есть загрузки global $lng;
в каждом классе, где есть функция, которая выплевывает код пользовательского интерфейса.
Как другие люди получают перевод на объект? Это один из сценариев, где глобалы не так уж и плохи? Было бы безумием создавать класс со средствами доступа, когда все словарные термины статичны?
Добавление
Поскольку у меня есть класс HTML, класс PDF, класс JSON и т. Д., Каждый из которых имеет словарь в качестве зависимости, это ситуация, в которой я мог бы использовать внедрение зависимостей в классе Lng
, чтобы упростить проверить разные переводы?