Языковые константы: различия между версиями

Материал из Wiki from ADT Web Solutions
Перейти к навигации Перейти к поиску
(Новая страница: «В отличие от Б, мы можем добавить на сайт сколько угодно языков. "Из коробки" сразу доступ...»)
 
Строка 7: Строка 7:
 
Если переключиться на английский язык, который уже есть, то увидим, что структура сайта пустая, там нет ни одной страницы. Более того, к этой версии сайта не привязан никакой шаблон. Это еще одна засада UMI CMS!
 
Если переключиться на английский язык, который уже есть, то увидим, что структура сайта пустая, там нет ни одной страницы. Более того, к этой версии сайта не привязан никакой шаблон. Это еще одна засада UMI CMS!
  
Идем в раздел "Шаблонны сайта" и повторяем процедуру добавления шаблона, которую уже [[Установка UMI CMS Trial#Создаем шаблон|проделывали после установки системы]].
+
Идем в раздел "Шаблонны сайта" и повторяем процедуру добавления шаблона, которую уже [[Установка UMI CMS Trial#Создаем шаблон|проделывали после установки системы]]. '''Господа разработчики''', нельзя было сразу создать шаблон для всех языков? Вряд ли кто-то делает отдельные шаблоны для языковых версий сайта, а если и делает - то поправит.
  
Можем теперь добавить страницы, или скопировать их с русской версии, для чего надо сначала переключиться обратно на русскую версию сайта, и в структуре, выбрав нужные страницы, скопировать их в английскую часть (выбрать, куда копировать, можно в процессе копирования). В сущности, там все просто, но при копировании возникает ощущение, что ничего не происходит, и есть опасность накопировать страницы много раз подряд. Господа разработчики, может,
+
Можем теперь добавить страницы, или скопировать их с русской версии, для чего надо сначала переключиться обратно на русскую версию сайта, и в структуре, выбрав нужные страницы, скопировать их в английскую часть (выбрать, куда копировать, можно в процессе копирования). В сущности, там всё просто, но при копировании возникает ощущение, что ничего не происходит, и есть опасность накопировать страницы много раз подряд. '''Господа разработчики''', может, сообщение выдавать, что страница скопирована???
 +
 
 +
Итак, мы выделили раздел "Страница 1", жамкнули по крайней правой пиктограмме "Скопировать в", выбрали English - и ничего не произошло! Не спешим жамкать ещё раз, выбираем в верхнем меню English, и видим, что всё скопировалось, жабу им в карму!
 +
 
 +
Что касается контента страниц, то мы его конечно переведем. Но некоторые слова в нашем шаблоне так и останутся не переведенными. Как это поправить? Очень просто!
 +
 
 +
Заводим в директории php нашего шаблона раздел i18n, а в нем файлы i18n.ru.php и i18n.en.php. Содержимое файла i18n.en.php такое:
 +
 
 +
<pre>
 +
<?php
 +
    /** Языковые константы для английской версии шаблона */
 +
    return [
 +
        'back-to-catalog' => "Go back to <a href='/'>catalog</a> and add items to Shopping Cart.",
 +
        'yes' => 'Yes',
 +
        'no' => 'No',
 +
        'welcome' => 'Welcome,',
 +
        'errors' => 'Errors',
 +
        'error' => 'Error',
 +
        'pay' => 'Pay',
 +
    ]
 +
?>
 +
</pre>
 +
 
 +
Для i18n.ru.php то же самое, но справа - перевод на русский язык. Понятно, что константы используем те, которые нам нужны, не обязательно вышеперечисленные.
 +
 
 +
Как использовать? Вместо слов в шаблоне пишем:
 +
 
 +
<pre>
 +
<?= $this->translate('something is wrong') ?>
 +
</pre>
 +
 
 +
Метод translate() находит в нашем языковом файле ключ 'something is wrong' и подставляет значение этого элемента массива. А что делает, если не находит? Или если вообще такого массива нет? Просто выводит этот ключ. Удобно и наглядно. Если видим на сайте что-то не на том языке - просто добавляем элемент в массивы, сразу во все, желательно.
 +
 
 +
А если надо добавить еще один язык, после добавления его в админке копируем файл i18n.en.php, скажем, в i18n.ge.php, и переводим все значения на немецкий.
 +
 
 +
Осталось рассказать только еще про одну засаду. Языковых файлов в UMI много, они находятся в каждом модуле, и, вообще говоря, они системные. Это значит, что дополнять и исправлять их бесполезно, они будут перезаписаны при обновлениях системы. Часто результат работы модулей содержит такие языковые константы, и если перевод бывает мягко говоря неудовлетворительным, найти и поправить может быть проблематично.

Версия 12:28, 30 октября 2020

В отличие от Б, мы можем добавить на сайт сколько угодно языков. "Из коробки" сразу доступно 2 языка, русский и английский. Но если зайти в админке в раздел "Конфигурация", и нажать на закладку "Языки", можно под списком имеющихся увидеть пустое поле для добавления:

Screenshot 2020-10-30 UMI CMS - Языки.png

Каждый добавленный язык - это отдельный сайт, переключаться с одного языка на другой в админке можно, используя мало заметную выпадашку в верхнем черном меню справа. Казалось бы по логике, что эта выпадашка должна менять язык админки, но нет - это переключатель между языковыми версиями сайта, а язык админки можно выбрать только в форме логина.

Если переключиться на английский язык, который уже есть, то увидим, что структура сайта пустая, там нет ни одной страницы. Более того, к этой версии сайта не привязан никакой шаблон. Это еще одна засада UMI CMS!

Идем в раздел "Шаблонны сайта" и повторяем процедуру добавления шаблона, которую уже проделывали после установки системы. Господа разработчики, нельзя было сразу создать шаблон для всех языков? Вряд ли кто-то делает отдельные шаблоны для языковых версий сайта, а если и делает - то поправит.

Можем теперь добавить страницы, или скопировать их с русской версии, для чего надо сначала переключиться обратно на русскую версию сайта, и в структуре, выбрав нужные страницы, скопировать их в английскую часть (выбрать, куда копировать, можно в процессе копирования). В сущности, там всё просто, но при копировании возникает ощущение, что ничего не происходит, и есть опасность накопировать страницы много раз подряд. Господа разработчики, может, сообщение выдавать, что страница скопирована???

Итак, мы выделили раздел "Страница 1", жамкнули по крайней правой пиктограмме "Скопировать в", выбрали English - и ничего не произошло! Не спешим жамкать ещё раз, выбираем в верхнем меню English, и видим, что всё скопировалось, жабу им в карму!

Что касается контента страниц, то мы его конечно переведем. Но некоторые слова в нашем шаблоне так и останутся не переведенными. Как это поправить? Очень просто!

Заводим в директории php нашего шаблона раздел i18n, а в нем файлы i18n.ru.php и i18n.en.php. Содержимое файла i18n.en.php такое:

<?php
    /** Языковые константы для английской версии шаблона */
    return [
        'back-to-catalog' => "Go back to <a href='/'>catalog</a> and add items to Shopping Cart.",
        'yes' => 'Yes',
        'no' => 'No',
        'welcome' => 'Welcome,',
        'errors' => 'Errors',
        'error' => 'Error',
        'pay' => 'Pay',
    ]
?>

Для i18n.ru.php то же самое, но справа - перевод на русский язык. Понятно, что константы используем те, которые нам нужны, не обязательно вышеперечисленные.

Как использовать? Вместо слов в шаблоне пишем:

<?= $this->translate('something is wrong') ?>

Метод translate() находит в нашем языковом файле ключ 'something is wrong' и подставляет значение этого элемента массива. А что делает, если не находит? Или если вообще такого массива нет? Просто выводит этот ключ. Удобно и наглядно. Если видим на сайте что-то не на том языке - просто добавляем элемент в массивы, сразу во все, желательно.

А если надо добавить еще один язык, после добавления его в админке копируем файл i18n.en.php, скажем, в i18n.ge.php, и переводим все значения на немецкий.

Осталось рассказать только еще про одну засаду. Языковых файлов в UMI много, они находятся в каждом модуле, и, вообще говоря, они системные. Это значит, что дополнять и исправлять их бесполезно, они будут перезаписаны при обновлениях системы. Часто результат работы модулей содержит такие языковые константы, и если перевод бывает мягко говоря неудовлетворительным, найти и поправить может быть проблематично.