Доброго времени суток.
Перед тем, как приступить к реализации локализации сайта ( только изучаю php и раньше не приходилось сталкиваться с подобной проблемой) хотелось бы спросить мнения более опытных людей.
Суть:
На начальном этапе сайт будет иметь 3 языковых версии: русскую, английскую и украинскую, с возможным добавлением еще одного или двух языков.
Для определения языка написан класс, который выбирает нужный язык по следующим критериям ( в порядке убывания важности):
- Из БД, где в записи пользователя указан prefered_locale (если пользователь зарегистрирован и уже выбрал предпочительный язык);
- Проверка cookie на наличие соответствующей записи (если пользователь уже посещал сайт, выбрал язык, но не регистрировался)
- Определение страны по IP-адресу (Отправляю REMOTE_ADDR GET запросом на стороннее API)
- Значение по умолчанию
После этого должен подтягиваться нужный язык. И вот здесь у меня возникает основной вопрос: как это правильно реализовать, что бы у того, кто занимался бы этим после меня не выпали волосы?
Переводится должны только статические фразы. Весь текст в динамическом контенте имеет перевод и всё это дело хранится в БД.
Пока что единственным более-менее адекватным для себя решением я выбрал следующий алгоритм:
К примеру было определено, что язык пользователя английский ( en ).
В корневой папке создана под-папка locales, который содержит в себе файлы en.php, ru.php, ua.php c приблизительно следующей структурой :
$locales = array(
"search_form_placeholder" => "What you are looking for?",
"search_results" => "Search results",
"search_nothing_found" => "Nothing found",
"login_form" => "Authorization",
"login_form_e_mail" => "E-Mail",
"login_form_e_mail_placeholder" => "Your E-Mail",
"login_form_password" => "Password",
"login_form_password_placeholder" => "Password",
);
Все три файла будут иметь абсолютно одинаковую структуру и в html файлы вставляться будет таким образом
<div class="login-form-raw">
<?=$locales[login_form]?>
<div class="login-form-container">
<form class="login-form-inputs">
<div><?=$locales[login_form_e_mail]?></div><input placeholder="<?=$locales[login_form_e_mail_placeholder]?>" type="text" name="login-form-username"></input>
<div><?=$locales[login_form_password]?></div><input placeholder="<?=$locales[login_form_password_placeholder]?>" type="password" name="login-form-userpass"></input>
<span><?=$locales[login_enter]?></span>
</form>
</div>
</div>
Расскажите, пожалуйста, что мне нужно исправить либо укажите куда копать?