Xandr24
@Xandr24
учиться и еще раз учиться

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

Парни добрый день, подскажите пожалуйста следующую ситуацию!
Есть сайт на ноде, на данном адресе site.com - англ версия, на ru.site.com - русская версия
Перевести я могу с помощью переводчика и залить контент (сайт - блог с постами, у которых есть теги, заголовки, описание и тд, все на двух языках)
Вопрос вот в чем, как мне организовать бд чтобы можно было искать и на рус и на англ языке?
У меня в этом огромный затык, то есть либо я создаю 2 бд и тогда как мне обращаться к каждой из них при поиске, ведь на страницы любой версии сайта нужна возможность поиска по 2 языкам, как правильно организовать такое хранение и поиск дальнейший на 2 языках на любой из версий сайта?
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Напишу как я делаю.
Колонки с именами просто дублирую в ширину таким образом (пример: на поле title): title[ru], title[en] и т.д. и просто при запросе select ставлю нужный язык из переменной языка отображения контента и всё.
Таким образом, менять код нужно минимально, а основную структуру БД и вовсе не нужно: только добавить поля с доп. языками в таблицы.
Ответ написан
Комментировать
@itxor
PHP/Golang/VueJS Developer
Лучше не модифицировать и не переполнять базу переведёнными данными. Проще завести какой-то отдельный словарь, где хранить переведённую информацию и дёргать значения оттуда.
Ответ написан
Комментировать
profesor08
@profesor08
Для всего, что не касается контента (текст статей и тд), заводится отдельный файл с текстом для всех нужных языков. Это самый популярный метод, при этом самый быстрый и никакой зависимости от бд. Лично у меня файлы локализации хранятся по пути lang/ru-RU/*.php, lang/en-US/*.php, сами файлы имеют структуру:
<?php

return [
  "login" => [
    "buttonText" => "Вход",

    "form" => [
      "bla", => [], // любая вложенность
    ],
  ],
];

Пара небольших классов считывают нужные файлы локализации и предоставляют доступ к любым полям:
$lang = Lang::get("login");

echo $lang->buttonText;
echo $lang->form->bla->blabla->blablablabla; // любая вложенность


Для контента, проще создавать отдельные статьи, а в тегах указывать перевод, а в статье ссылки на оригинал (в сайте и в бд ничего менять не надо).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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