Как сделать мою CMS многоязычной

Я сделал CMS, используя PHP и MYSQL для серверной части. Проблема в том, что я хотел бы, чтобы сайт был доступен на нескольких языках; Итак, я уже перевел сам CMS и поместил его в файлы вроде:

  • en.ini
  • nl.ini

Это прекрасно работает для самого содержимого CMS, например, для администрирования и т. Д. Фактическая проблема возникает, когда я пытаюсь перевести сайт дальше: посты и страницы блогов хранятся в базе данных, поэтому они динамические. Структура таблицы моих страниц выглядит следующим образом:

urlname | name | id | content | position | hidden | redirect | type | permission

Поэтому, если бы я перевел страницу, например, на голландский, я не хочу создавать новую таблицу с именем pages_nl например, потому что большая часть информации будет такой же, как в другой таблице.
Я мог бы добавить строку, которая содержит доступные языки страницы, и заставить php читать массив и анализировать, если текущий $lang соответствует одному из доступных языков страницы, а затем прочитайте content_nl а также name_nl строка в качестве примера.
Та же проблема возникла бы с моими сообщениями в блоге, и я искал решение, но большинство результатов были для конкретных CMS и просто плагинов.

Я спрашиваю, что было бы лучшим способом (и структурой базы данных) для хранения многоязычных страниц / постов, где языки могли бы быть добавлены динамически и иметь запасной вариант исходного контента, если нет переведенной версии.

1

Решение

В основном вы добавляете lang-ключ к вашей базе данных

urlname | name | id | content | position | hidden | redirect | type | permission | lang

Теперь допустим, что приходит запрос на страницу с 5 элементами содержимого. Ваша CMS сначала ищет записи с определенным lang-кодом, например, nl. Если он не находит запись с кодом языка, он возвращается к языку по умолчанию и принимает эту запись.

Допустим, вы перевели Содержание 1, 3 и 5:

Content 1       Content 1 nl
Content 2
Content 3       Content 3 nl
Content 4
Content 5       Content 5 nl

Result:

Content 1 nl
Content 2
Content 3 nl
Content 4
Content 5 nl

Другой способ — сделать перевод в файлах шаблонов (как это делает magento).
В magento у вас есть что-то вроде этого:

"Hello, this is the " . $this->__("English") . " page"

И файлы переводов. Например, lang.nl:

"English", "Dutch"

В этом случае у вас будет только 1 элемент контента, но вы завернете каждый элемент, который должен быть переведен. Это также работает с изображениями и всем, что вы хотите. Вы также можете абстрагировать эту оболочку для работы в бэкэнд-редакторе RTE. Например, вы напишите Hello, this is the English page в вашем бэкэнде тогда отметьте Englishи нажмите кнопку перевода. Это добавит тэг вокруг английского языка, и при рендеринге контента вы сканируете эти тэги и замените его, если найдете какой-либо перевод для этой строки на запрошенном языке.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]