Вообще говоря, локализация интерфейса в OctoberCMS такая же как в Laravel. Есть файлы типа lang.php
, разложенные по директориям, соответствующим языку, в них есть строки, их можно переводить. Неудобство лично для меня лишь в одном — когда нужно куда-то вставить локализованный текст, не видно самого текста, только идентификатор строки. В остальном, на мой взгляд, система эта несколько удобнее перевода интерфейса в Друпале.
Даже если поддерживать сайт или интерфейс на нескольких языках не нужно, с переводами можно столкнуться, например, при плюрализации, то есть склонении в зависимости от значения числа. Потому что в 2018 году уже как-то стыдно делать сайт, на котором написано «1 предложений», «22 предложений» и т.д. Надо склонять.
В Ларавеле это делается тривиально, для английского языка в lang.php
пишем например:
return [
'count' => [
'offers' => 'offer|offers',
],
];
Тогда при вызове trans_choice('lang.count.offers', 10);
выведется слово offers, а при trans_choice('lang.count.offers', 1);
— offer.
И для перевода на русский достаточно добавить в соответствующий lang.php
перевод:
return [
'count' => [
'offers' => 'предложение|предложения|предложений',
],
];
И больше ничего делать не нужно, правильное склонение выберет библиотечная функция в соответствии с формулой для выбранного языка локали.
Но в OctoberCMS есть нюанс. Дело в том, что Ларавел поддерживает единую директорию lang
для локализации всего проекта, поэтому туда можно складывать любые строки и обращаться тоже можно к любым строкам. А в Октябре у каждого плагина своя директория переводов, у ядра — своя директория переводов, а у используемой темы её и вовсе нет.
Из-за этого, в первый раз столкнувшись с задачей, можно немного смутиться — а как же сделать плюрализацию для строки, которую я просто в теме вывожу. Документация пока об этом ничего не говорит. А строчка:
Note: For translating front-end content, there are plugins that can be used for this purpose.
и вовсе может навести на мысль, что для перевода строк в теме (каковая и есть фронт-энд) нужно какие-то плагины ставить (нужно, но только для контента, то есть моделей из БД).
На самом деле для обращения к строкам локализации из темы, то есть из шаблонов Twig, есть фильтры. Для обычного перевода — фильтр trans
, а для плюрализации — transchoice
. Его и нужно применить, чтобы получить склоняемое количество предложений:
{{ "graker.touristic::lang.count.offers"|transchoice(quantity) }}
graker.touristic
здесь — это обращение к плагину Touristic
за авторством Graker
: к сожалению, поскольку у темы нет своего файла локализаций, необходимые строки придется разместить в каком-нибудь плагине.