pokupo
@pokupo
Разработчик, архитектор, предприниматель

Какие есть средства локализации на уровне MySQL?

Возможно я не знаком с таким велосипедом, но есть БД на MySQL, есть приложение на PHP, есть задача сделать прозрачную работу с данными с учетом текущего языка пользователя, т.е. организовать поддержку мультиязычности сайта, причем число языков должно расширяться без перепахивания БД. На уровне PHP все ясно, это gettext() и файлы локализации, а как быть с базой? Возможно уже есть какие-то готовые решения, которых я не смог нагуглить? Буду признателен за указатель.
  • Вопрос задан
  • 4686 просмотров
Пригласить эксперта
Ответы на вопрос 8
Shedal
@Shedal
Как вариант, можно создать таблицу translations (text, culture, translation).

Определить функцию translate(text, culture), которая будет возвращать или перевод, если он есть, или изначальную строку, если перевода нет.
Использовать её можно будет с любой таблицей:

SELECT Id, translate(Value), translate(Value2) ...

Конечно, для разных ситуаций подходят разные решения. Например, из вашего описания непонятно, нужно ли вам переводит данные из одной или многих таблиц, могут ли строки текста переводиться по-разному в зависимости от контекста, и т.д.
Ответ написан
@Vampiro
А еще можно сделать отдельные таблицы, и тогда производительность не будет зависеть от количества языков в системе.
Ответ написан
Комментировать
@Jurik
Я бы добавил в таблицы поле, отвечающее за язык, и далее собирал данные на основе языка. Т.е. люди с русским языком видят только записи с метекой 'ru'. Если же языка нет в базе, то брать какой то язык по умолчанию. Также можно сделать мультиязычную метку, благодаря ей данные будут видны всем.
Ответ написан
Комментировать
@rPman
Если не перелопачивать базу данных, простенько, для галочки… то вместо текста в поле храните сериализованный массив {ru:'Бла, бла, бла',en:'Blah, Blah, Blah',..}…

Но в общем случае это не решит проблем, которых на самом деле гораздо больше появляется при переходе от одноязычного сайта к мультиязычному. Они все специфичные, вида что делать с данными, смысл которых 'перевод'… нужна ли новая сущность на них со ссылкой на оригинал или достаточно связи 1к1 и т.п.
Ответ написан
@Xenkok
deleted
Ответ написан
Комментировать
crackedmind
@crackedmind
web-developer
Хм, я конечно дико извиняюсь, но какая суть в локализации на стороне dbms? Разве этим не «отображение» должно заниматься?
Ответ написан
strib
@strib
dictionary_id|string_id|lang|value — тоже неплохо работает.
Ответ написан
Комментировать
@ValentinWebStd
веб мастер
Доброї ночі! Як на мене можливий такий варіант:
1)робите копію таблиці ( включаючи дані) певної таблиці додаючи префікс який буде вказувати на мову.. Наприклад products_ua.
2)в sql запитах де є вибірка з даної таблиці додаєм префікс до назви таблиці.. ('SELECT * FROM products_'. $_SESSION[`lang`]. ' WHERE product_id=1' )
3)відомо що колонки не текстового типу не потрібно переводити а вони можуть бути присутні в таблиці і щоб все вірно працювали потрібно прикріпити трігери які будуть визивається при update і вставці полів в таблицю оригінал... Подальший опис механізму можу обговорити з вами в skype: webstd.studio
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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