Как правильно реализовать локализацию статического контента на сайте?

Доброго времени суток.
Перед тем, как приступить к реализации локализации сайта ( только изучаю 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>


Расскажите, пожалуйста, что мне нужно исправить либо укажите куда копать?
  • Вопрос задан
  • 319 просмотров
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Сегментируйте словарь перевода по модулям: есть модуль логина - цепляем словарь оттуда, есть модуль меню - конкатенируем и его из модуля меню. Нет модуля на странице - строк для этого модуля соответственно нет, т.к. они не нужны.
Тоже самое и с JS: если есть в модуле - грузим; модуля нет на странице - не грузим.

Алгоритм определения языка: Юзер/неЮзер->Cookie(LocalStorage)->AcceptLanguage->Default
IP-тут не нужен, обычно далее AcceptLanguage не нужно.
А Default - для роботов, которые не указывают язык при парсинге.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы