Языковые константы: различия между версиями
Olga (обсуждение | вклад) (Новая страница: «В отличие от Б, мы можем добавить на сайт сколько угодно языков. "Из коробки" сразу доступ...») |
Olga (обсуждение | вклад) |
||
| Строка 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 языка, русский и английский. Но если зайти в админке в раздел "Конфигурация", и нажать на закладку "Языки", можно под списком имеющихся увидеть пустое поле для добавления:
Каждый добавленный язык - это отдельный сайт, переключаться с одного языка на другой в админке можно, используя мало заметную выпадашку в верхнем черном меню справа. Казалось бы по логике, что эта выпадашка должна менять язык админки, но нет - это переключатель между языковыми версиями сайта, а язык админки можно выбрать только в форме логина.
Если переключиться на английский язык, который уже есть, то увидим, что структура сайта пустая, там нет ни одной страницы. Более того, к этой версии сайта не привязан никакой шаблон. Это еще одна засада 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 много, они находятся в каждом модуле, и, вообще говоря, они системные. Это значит, что дополнять и исправлять их бесполезно, они будут перезаписаны при обновлениях системы. Часто результат работы модулей содержит такие языковые константы, и если перевод бывает мягко говоря неудовлетворительным, найти и поправить может быть проблематично.
