Как сделать перевод страницы на PHP?

У меня есть сайт визитка. Клиент захотел добавить для него еще два языка. Делать отдельную папку и дублировать код я не хочу.
Некоторые данные должны отображаться с БД.
Плюс возможно в будущем придется добавить новые языки, потому важно подумать и об этом.

Как это лучше и быстрее реализовать?
  • Вопрос задан
  • 315 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Picknice
Веб-программист (FULL STACK)
Добавляешь в таблицы поля, что-то типа 
было text
стало text, text_en, text_sp, text_pl  и т.д.
$lang = $_GET['lang']; // Допустим lang хранится в гет параметре (можно и в куки хранить выбранный язык)
$lang = in_array( $lang, [ 'ru', 'en', 'sp', 'pl' ] ) ? "_$lang" : ''; // Получается так "_ru" (вместо ru язык выбранный) или пустая строка.
При генерации страницы где выводишь $row['text'] заменяешь на $row["text$lang"].
Что касается статичных данных, то проще хранить шаблоны для каждого языка и подключать при генерации страницы.
Ответ написан
Комментировать
@bestauction
То что вы ищете, называется i18n (принятое сокращение от internationalization). Есть множество способов реализации. Если используете фреймворк, то там этот механизм скорее всего уже есть (гуглите по *названиефреймворка* i18n). Если самопис, то вот простой пример.

Весь статичный текст из кода можно вынести в отдельный файл json (или просто php файл который возвращает массив, и инклудить его).

В файле должен быть многомерный массив вида

return [
            'ru' => [
                'text1' => 'текст 1',
                'text2' => 'текст 2'
            ],
            'en' => [
                'text1' => 'text 1',
                'text2' => 'text 2'
            ],
            'es' => [
                'text1' => 'texto 1',
                'text2' => 'texto 2'
            ]
        ];


Если различные языки будут еще и в БД, то нужно либо дублировать таблицы, либо заводить доп поля с префиксами языков. Это уже зависит от структуры БД
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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