BloodKarl
@BloodKarl
В прошлом программист

Какие есть нормальные методы по созданию многоязычного сайта?

Для себя видел два варианта создания переключения языка:
1) Создаю 2 файла состоящие из таких данных
рус
прив = Здравствуй мир
сайт = Мой сайт

eng
прив = Hello World
сайт = my site

В зависимости от выбранного языка скачиваю файл в массив и подставляю в нужных местах содержимое прив и сайт.

2) создаю базу вида:
имя | рус | eng
прив | Здравствуй мир | Hello World
сайт | Мой сайт | my site

В зависимости от выбранного языка скачиваю в массив и подставляю в нужных местах содержимое прив и сайт.
может есть более правильные варианты? или какой метод из этих эффективнее?
  • Вопрос задан
  • 474 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
В большинстве случаев, первый вариант лучше.

1. Поддерживать языковые файлы - проще, чем sql (проще и свободнее синтаксис)
2. Проще расширять в случае дополнительных языков - главное заранее продумать именование языковых файлов, чтобы переход на язык автоматически подгружал нужный файл, типа include lang_$lang.php

Хранить все в базе имеет смысл только из-за организационных/security решений (например дать доступ к базе безопаснее, чем к файловой системе, и тогда все хранить в базе)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
dimonchik2013
@dimonchik2013
non progredi est regredi
первый общепринятый

en={}
en['hw'] = 'Hello, Microsoft Word!'
en['title'] = 'This is my multilangual site'

ru={}
ru['hw'] = 'Привет, Ворд'

#templates/ru.html
title = ru['title'] if 'title' in ru else en['title']


та же особенность у редактора - сразу видно состояние перевода на конкретный язык

единственные вариации: хранение в разных языковых файлах/модулей массивов с одинаковыми именами, лбо в одном с именами языков, обычно хранят в разных, т.к. а) не нужно включать ненужное; б) языки - это не только слова, но и форматирование (оцените длину немецких слов), и таким же образом хранят параметры div ов и проч
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
Есть несколько стандартов для локализации (i10n) и интернационализации (i18n).

Довольно неплохой разбор разных правил сделан здесь
guides.rubyonrails.org/i18n.html
https://www.npmjs.com/package/i18n
https://docs.angularjs.org/guide/i18n
php.net/intl

Везде несколько разный подход, но в целом все сводится к созданию карты и условностей.
Лично я бы хранил данные для перевода в 2х местах.
Первое место - самый быстрый способ хранения для вашего ЯП/фреймворка. Этот вариант для продакшена и нагрузки.
Второе место - база, для редактирования. После редактирования автоматическая генерация файлов для первого варианта.
Механизм перевода должен быть реализован так, что если в режиме разработки/тестирования встречается незнакомый перевод, он сохраняется в базу. В дальнейшем это приводится в нормальный вид профессиональным переводчиком, для которого должен быть создан соответствующий интерфейс.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Потом начнется второй виток:

"на сайте 3 пользователя" <> "на сайте 5 пользователей"
супротив
"online 5 users" == "online 3 users"
Ответ написан
Ваш ответ на вопрос

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

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