Мультиязычность CMS

Web-gooroo - система изначально спроектированая как CMS для мультиязычных web-проектов.

Для каждого языка сайта создается свое отдельное дерево категорий.
Ниже 2 скриншота одного из проектов - пример дерева русской и латышской версии
сайта

Русская версия:


Латышская версия:


В указаном выше примере эти 2 структуры по сути никак не связаны между собой.
Т.е вы отдельно создаете русскую версию и отдельно создаете латышскую.
Однако иногда (а на практике даже довольно часто) нужно логически связать определенные категории одного языка с такими-же категориями в другом языке.
Например в каком либо из ваших модулей нужна логика :
"Для категории 'новости' - нужно вывести дополнительный блок - архив новостей"
ID категории "новости" - 123.
как код это могло бы выглядеть так
if ($web->active_category == 123){
    display_news_archive();
}

В русской версии сайта все будет замечательно работать.
Однака в английской версии нет категории с номером 123 (и не может быть - все ID уникальны) , в английской версии есть категория NEWS с ID=256. Т.е если пользователь ходит по английской версии условие $web->active_category == 123 не  выполнится никогда. У нас 2 варианта :
if ($web->active_category == 123 OR $web->active_category == 256){
    display_news_archive();
}
а что будет если потом добавится еще один язык ? Править все модули ?
Есть еще один вариант : сделать "MIRROR" между этими двумя категориями и код бы выглядел так:
if ($web->active_category == WBG::mirror(123)){
    display_news_archive();
}

Что такое MIRROR ("зеркало") описывает этот раздел

Языки в файловой системе


Как правило директории категорий начинаются с префикса языка. Например /rus/  или /lat/.  Ниже тот-же сайт но показаны директории категорий русской версии:





Пользователь

Пароль

Поиск по сайту



CMS на PHP и mySQL