Как лучше реализовать мультиязычность на сайте?

Возник следующий вопрос, необходимо проработать структуру сайта на нескольких языках.

Сразу отойдем от идеи скосячить и зацепить всякие там гуглопереводчики и тому подобное.

В реализации этого дела есть несколько вопросов:

1) К примеру у нас есть таблица "news" новости проекта:
news_id
title
news_short
news_full
status


И к примеру мы работаем с несколькими языками на сайте (русс, англ, франц)

Как будет лучше осуществить создание новости на сайте администратором ? Тоесть администратор должен сделать тройную работу, а именно написать контент 3 раза под каждый язык.

Вариант первый:
Дублировать поля в таблице:
title_ru
title_en
news_short_en
news_full_en
news_short_ru
news_full_ru
...


Вариант второй:
Таблица "news" содержит язык по умолчанию, русский и есть еще одна таблица в которой переводы на другие языки.
tr_id
lang
title
news_short
news_full
news_id


И к примеру если у нас просматривают сайт на англ., то мы берем по атрибутам news_id и lang данные из таблицы переводов.

Какой вариант лучше ? Может кто-то посоветует свой?

Вопрос номер 2
Как быть с контентом ? К примеру у нас есть файлы шаблонов: news_full.tpl, news_short.tpl и тп....
Будет ли оптимально в каждом модуле в видах создавать папки с языками и дублировать файлы вида только с разными переводом:

views
    - ru
      - news_full.tpl
      - news_short.tpl
    - en
      - news_full.tpl
      - news_short.tpl
...


И последний вопрос номер 3
К примеру у нас сайт работает полностью на ajax и сервер выдает ответы ну к примеру с ошибкой:
Неправильный пароль

Тоесть тут в любом случае у нас есть таблица переводов, но как ее лучше оформить ? Каждая ошибка имеет свой код (к примеру ERROR_WRONG_PASSWORD) и по этому коду исходя из нужного языка мы достаем перевод?

Или можно воспользоваться языковыми файлами и хранить например пакеты так: отталкиваясь от дефолтного языка:

array(
  'Неверный пароль' => 'Wrong Password'
 )


Поделитесь советами пожалуйста.
  • Вопрос задан
  • 9600 просмотров
Решения вопроса 2
alexiusp
@alexiusp
senior frontend developer
1) конечно второй вариант. каждый раз при добавлении нового языка переделывать таблицу - не комильфо.
2) У вас шаблоны для разных языков различаются визуально? Я обычно делаю один шаблон, а все стандартные тексты (надписи на кнопках и т.п.) выношу в языковые файлы/классы. Т.е. собственно шаблон у меня один, просто он помимо собственно контента статьи ещё проходит этап простановки всех стандартных текстов из текущего языкового файла.
3) То же самое, что и в вопросе номер 2. Я делаю для каждого языка свой файл, который подгружаю до того, как начинаю работать с видом. Из него и беру все текстовые константы, будь то надписи на кнопках или сообщения об ошибках. Из базы при ошибке приходит только код. По этому коду из текстового файла я беру текст и отправляю на клиент.
Ответ написан
Комментировать
Satanpit
@Satanpit
Front-end developer
Можно делать разные таблички news_ru, news_en и т.д., а префиксы доставлять соответственно по языку пользователя, но тут минус, некоторые поля будут дублироваться, да и при изменении структуры будет гемор.
Можно, как вариант, создать отдельную таблицу для хранения переводов, по типу section_id, resource_id, key, value,
если это только новости то news_id, lang_id, title, content.

По второму, views для каждого языка - не вариант, допустим Вам нужно будет поменять что-то в шаблоне и придется менять это во всех 3, как-то не спортивно :)

Второй и третий вопрос переплетаются, для стандартных системных фраз, да лучше хранить отдельный файл с константами или массивом.
Все что сюда не подпадает хранить в той же БД
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Комментировать
@antimind
Посмотрите как реализована мультиязычность в prestashop. На мой взгляд вполне удачное решение.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы