Блог

Многоязычность, недокументированные возможности

Заявленный функционал поддержки нескольких языков на поверку оказывается не такой уж прозрачной задачей. Константа LANGUAGE_ID, к которой приковывают все внимание на экзамене по интеграции шаблона в академии битрикса, по факту не поддается переопределению (на то она и константа) в коде страницы. По документации тип константы заявлен как А (автоматическое определение в прологе). В админке она устанавливается в настройках сайта для публичной части. Ну и дальше начинается общая информация о том, что многоязычность можно организовать как на многосайтовости, так и на одном сайте. Для многоязычности в папках битрикса достаточно разместить папку lang с подпапками для языков (en, ru, …), в этих папках положить файлы того же имени, что и в корневой папке (index.php как пример), а в самих файлах положить $MESS["CFT_MORE"] = "More about"; соответствующие языку. В нужном месте в корневом index.php функцией GetMessage('CFT_ABOUT') дергаем фразу и казалось бы счастье наступает, ан нет. Константа LANGUAGE_ID всегда будет выдавать значение присвоенное в админке, переопределение в коде страницы ей «по барабану». И стало быть сообщения написанные для других языков мы никогда не увидим. Но… Волшебство ТП Битрикса на этот раз вызывает только самые положительные отзывы, ни тебе «а вы стекла протирали, а вы по колесам стучали…». Практически на третьем посте получаю нужную рекомендацию, и счастье наступает. Заявленный функционал работает, удобство в редактировании контента для всех. Однако суть ответа выводит нас за рамки традиций и правил битрикса, вся тайна и весь фокус-покус изменения константы LANGUAGE_ID лежит в месте кода где это можно сделать, а это место… та-дам, перед подключением header.php. Вот так вот просто, пренебрегая правилами можно сделать многоязычность, без многосайтовости.