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

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

В указаном выше примере эти 2 структуры по сути никак не связаны между собой.
Т.е вы отдельно создаете русскую версию и отдельно создаете латышскую.
Однако иногда (а на практике даже довольно часто) нужно логически связать определенные категории одного языка с такими-же категориями в другом языке.
Например в каком либо из ваших модулей нужна логика :
"Для категории 'новости' - нужно вывести дополнительный блок - архив новостей"
ID категории "новости" - 123.
как код это могло бы выглядеть так
if ($web->active_category == 123){
display_news_archive();
}
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();
}
а что будет если потом добавится еще один язык ? Править все модули ?display_news_archive();
}
Есть еще один вариант : сделать "MIRROR" между этими двумя категориями и код бы выглядел так:
if ($web->active_category == WBG::mirror(123)){
display_news_archive();
}
display_news_archive();
}
Что такое MIRROR ("зеркало") описывает этот раздел
Языки в файловой системе
Как правило директории категорий начинаются с префикса языка. Например /rus/ или /lat/. Ниже тот-же сайт но показаны директории категорий русской версии:

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