IO v6. Мультиязычность и словарь фраз
Фреймворк позволяет работать с языками. Проекты напрямую завязаны с BMC CMS и Twig.
// Получить список языков фреймворка
$languages = IOCore::$languages;
// Язык по умолчанию. Берется из настроек сайта
$langDefault = IOCore::$langDefault;
// Текущий язык. Берется из настроек сайта
$currentlanguage = IOCore::$currentlanguage;
<!-- Получить список языков фреймворка -->
{{languages}}
<!-- Получить список установленных языков сайта -->
{{site.languages}}
<!-- Язык сайта по умолчанию. Берется из настроек сайта -->
{{site.langdefault}}
<!-- Текущий язык сайта. Береться из настроек сайта -->
{{site.lang}}
{{currentlang}}
ВАЖНО
Список языков фреймворка и сайта это разные вещи. Список языков сайта может быть меньше, либо больше чем список языков у фреймворка.
Список всех языков доступен через функцию IOCore::$languages. Это массив вида: $lang => $name.
Подключение словаря фраз в проект
Указание поддерживыемых языков в проекте
Для добавления в проект многоязычных надписей или фраз, нужно использовать словарь фраз.
Для того, чтобы проект имел поддержку многоязычных надписей и фраз, в папке с файлами словарей фраз (project/app/dictionary) должен существовать файл словаря фраз (<apiname_проекта>.json), где apiname_проекта это значение из константы IOPROJECT.
Перед написанием словаря фраз, нужно определиться, какие языки будут использоваться при написании слов/фраз в словаре фраз и затем описать их в файле персональных настроек проекта project/app/i.php в формате 'язык' = 'Название языка'. Список поддерживаемых языков может быть любым по вашему усмотрению.
Пример с использованием 3 языков:
// поддерживаемые языки
IOCore::$languages = [
'kz' => 'Қазақша',
'ru' => 'Русский',
'en' => 'English',
];
ВАЖНО
Имена ключей (пример: ru, kz, en) должны указываться в нижнем регистре и только в виде 2х латинских букв.
Список всех поддерживаемых языков можно посмотреть в глобальной переменной $ioLangs.
Подключение файла словаря фраз к проекту
Чтобы файл словаря фраз применился к проекту, его нужно подключить в файле персональных настроек проекта project/app/i.php.
// загрузка словаря фраз
IOCore::loadDictionary(BASE_PATH.'/app/dictionary/<apiname_проекта>.json');
Где apiname_проекта это значение из константы IOPROJECT.
ВАЖНО
Подключение файла словаря фраз (IOCore::loadDictionary()) должно осуществляться после объявления поддерживаемых языков (IOCore::$languages)!
Пример содержимого файла словаря фраз:
{
"ru": {
"trade.goods.title": "Товары",
"trade.goods.btn.add": "Добавить товар"
},
"kz": {
"trade.goods.title": "Тауарлар",
"trade.goods.btn.add": "Тауарды қосыңыз"
},
"en": {
"trade.goods.title": "Goods",
"trade.goods.btn.add": "Add goods item"
}
}
При этом:
'ru','kz','en'- коды языков.'trade.goods.title','trade.goods.btn.add'- имена переменных, которые должны быть уникальными.'Товары','Тауарлар','Goods'- это слова/фразы, которые меняются при смене языков.
Рекомендуется создавать цепочки слов, используя нотацию "точка".
Первое слово, это обычно apiname проекта (значение из константы IOPROJECT).
ВАЖНО
В словаре фраз обязательно должны содержаться секции с указанными языками (имена ключей, пример: ru, kz, en) из массива IOCore::$languages. Ключи для переводов (пример: trade.goods.title) должны повторяться во всех языковых секциях (пример: ru, kz, en) и иметь свой вариант перевода слова/фразы.
Вывод слова/фразы из словаря фраз
Для вывода слова/фразы, используя twig, необходимо прописать в нужном участке кода следующее:
{{translate['trade.goods.title']}}
Где 'trade.goods.title' это ключ слова/фразы.
Для вывода слова/фразы, используя PHP, необходимо прописать в нужном участке кода следующее:
IOCore::translate('trade.goods.title')
Где 'trade.goods.title' это ключ слова/фразы.