ShelestovAnt
@ShelestovAnt
Верстаю и программирую

Где и как хранить языковые фразы для javascript в Битрикс?

Всем привет.
Насколько я понимаю при создании модулей для битрикса языковые файлы lang/*/*.php нужно хранить в cp1251 кодировке, а остальные в UTF

Но как быть с js файлами в которых присутствуют языковые фразы?
Если сайт в UTF и файл в UTF то проблем нет
Но если сайт в cp1251 а файл в UTF то все плохо.

В битриксе есть механизм для хранения и подгрузки языковых враз в скрипт?
  • Вопрос задан
  • 3594 просмотра
Пригласить эксперта
Ответы на вопрос 4
ShelestovAnt
@ShelestovAnt Автор вопроса
Верстаю и программирую
Все намного проще оказалось.
Регистрируем скрипты через CJSCore::RegisterExt, там же можно указать файл локализации
Ответ написан
@ZardoZAntony
программист, сис. админ
Я так делаю в шаблоне:
<script>
  BX.message({
    'BTN_MESSAGE_BASKET_REDIRECT': '<?=GetMessageJS("BTN_MESSAGE_BASKET_REDIRECT")?>',
    'BTN_MESSAGE_CLOSE_POPUP': '<?=GetMessageJS("BTN_MESSAGE_CLOSE_POPUP")?>',
    'CART_CAPTION_ADD': '<?=GetMessageJS("CART_CAPTION_ADD")?>',
    'CART_ADDED_TEMPLATE': '<?=GetMessageJS("CART_ADDED_TEMPLATE")?>'
  });

  console.log(BX.message("CART_CAPTION_ADD"));
</script>
Ответ написан
Комментировать
Посмотрите как реализовано в стандартных компонентах, для языковых фраз в js используется BX.message
Ответ написан
Комментировать
AlexeyGfi
@AlexeyGfi
YouTube >>> Битриксоид из Колхоза
Так или иначе, задача сводится к тому, чтобы в яваскрипт передать фразу в правильной кодировке.

Это либо подключение */lang_id/*.js файла, внутри которого определены лингвистические фразы в виде значения переменных, либо инлайн-инициализация переменных с лингвистическими фразами, транслируемыми через php.
...либо подгрузка через аякс, но и там сводится к одному из двух.

Подключение файла: готовите файл и подключаете его например таким кодом:
$doc_root= \Bitrix\Main\Application::getDocumentRoot();
$js= __DIR__ . '/lang/'.LANGUAGE_ID.'/js_lang.js';
\Bitrix\Main\Page\Asset::getInstance()
	->addJs( $js . '?x=' . md5( filemtime( $doc_root . $js ) ), true );


Инлайн-инициализация при сборке страницы:
<script ...>
lang_me= {
	'MENU_TITLE' : 'php-код'
	...
}
</script>

где php-код:
<?=GetMessageJS('MENU_TITLE')?>
Ныряя в GetMessageJS видим обычный GetMessage, обёрнутый escape-функцией (CUtil::JSEscape) для корректной трансляции символов.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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