Форумы / National / Russian / Модули и плагины / Как правильно настроить i18n?

prostogorod
#1 17.10.2016 20:06

Сделал в соответствии с этой инструкцией https://www.cotonti.com/ru/docs/help/i18n_quickstart
В поле «Список локалей сайта» вставил:

pl|Polska
en|English
ru|Russia

Опускать параметр языка в URL, если он указывает на основной язык: Да  
Включить ЧПУ для параметра языка в ссылках: Да 

Но есть несколько моментов, которые я не понял как работают.


1. Принудительная установка языка по умолчанию для всех пользователей: если нет, работает верно переводит меню, страницы,
но почему-то главная страница на русском языке, а должна быть на польском? И админка на русском, хотя в config.pp - $cfg['defaultlang'] = 'pl';    

2. Принудительная установка языка по умолчанию для всех пользователей: если да, не происходит перевод меню, и главная страница на польском
Происходит перевод контента, но языкавые переменные в меню, показывает все равно на польском, хотя находимся на английской версии страницы?


Подскажите, пожалуйста, как корректно настроить 3 языковых версии сайта?

Macik
#2 17.10.2016 22:55

0. Количество языков никак не влияет на этапы их настройки. Т.е. 3 языка настраиваются в точности также как и 2.

1. «Принудительная установка языка по умолчанию» подразумевает, что у вас все пользователи будут видеть сайт на польском (раз он прописан в `config.php`) вне зависимости от персональных настроек. Если опция отключена должно отображаться в соответствии с настройками профиля, или по факту выборя языка в меню (то, что здесь на сайте обозначено флажками ).

2. Используете ли ЧПУ? Какой пресет? Если ЧПУ не включено язык должен фигурировать в GET переменной `l` (английская L). Если используете ЧПУ, проверьте, что есть необходимые строки в `.htaccess`.

3. Сделайте вывод языковой переменной где-либо в шаблоне, посмотрите меняется ил она и в каких случаях (она на прямую связана с GET переменной `l`):

{PHP.i18n_locale} 

4. Язык админки зависит, в первую очередь от настроек профиля администратора.

5. Убедитесь, что соотв. языковые файлы у вас установлены (папка `lang` и соотв. папки Расширений). И что содержимое этих файлов соответствует их имени.

6. Убедитесь, что текстовые строки в шаблоне (например главной страницы) забиты там в виде языковых Тегов, а не прямым текстом. Т.е. как пример {PHP.L.Access}, а не тупо строкой «Доступ».

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
prostogorod
#3 18.10.2016 10:49

 

Спасибо за ответ! Многое стало на места. Но есть еще два вопроса?

1. Работает ли перевод, если страница создана в папке system? У меня нет, возможно не правильно настроил?

2. Главная по тайтлу и дискрипшену прописана на польском, при переключении главной на английский либо русский, тайтл и дискрипшен также на польском. Подскажите,  пожалуйста, как это исправить или где искать в коде решение этой проблемы?

 

Отредактировано: prostogorod (18.10.2016 11:00, 7 лет назад)
Macik
#4 18.10.2016 20:55
  1.  Работает. Зайдите в настройки плагина `i18n` и добавте `system` в «Корневые категории для применения i18n»
  2. Плагин i18n не имеет настройки для задания отдельных заголовка и описания для каждого из языков. Но, как всегда, движок достаточно гибок и можно настроить это в 2 счета: 
    • Редактируем языковые файлы своей темы оформления (пример для дефолтной Nemesis) `themes\nemesis\nemesis.*.lang.php`
    • втсавляем туда строки для изменения глобальных настроек:
      $cfg['maintitle']='maintitle-en';
      $cfg['subtitle']='subtitle-en';

       

     
https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
prostogorod
#5 19.10.2016 00:48

Вроде многое заработало, но еще есть вопросы связанные с категорией System.

1. Когда производим интернационализацию структуры у меня две колонки, например польский и русский, как категорию System во второй колноке прописываваем? Тоже System либо оставить пустым?

2. В категорию System, добавил страницу about.

site.com/about/ - отображается, основной польский язык
site.com/en/about/- не отображается, 404 ошибка
site.com/ru/about/- не отображается, 404 ошибка

а если по этим ссылкам

site.com/pl/system/about/ - отображается страница
site.com/en/system/about/- отображается страница
site.com/ru/system/about/- отображается страница

Подскажите, пожалуйста, что не так настроил? Где искать решение?

Хотя, если страница находится в другой категории, например services

site.com/services/delivery/
site.com/en/services/delivery/
site.com/ru/ services/delivery/

все страницы корректно отображаются...

Добавлено 17 часов спустя:

Апну тему)))

Отредактировано: prostogorod (21.10.2016 10:07, 7 лет назад)
Macik
#6 21.10.2016 23:39

1. Не принципиально, т.к. это всего лишь перевод названия раздела для `system` он вроде в явном виде нигде не светиться.

2. Интересный кейс! Потестировал локально. Похоже это баг выросший из двух разных «багофич»: первое это баг апача, когда при многократном преобразовании исходного URI может дублировать хвосты путей. Второй, это уже известная «фича» URLEditor'а Cotonti, который учитывает только первый и последний элемент пути, а на остальное кладет болт. Т.е. если бы не эта особенность в реализации URLEditora, то не работали бы оба приведенные вами варианта.

Решается рекомендованным в Apache методом — добавлением в правило трансформации (в .htaccessспециально созданного «DPI» флага для «обнуления ранее обработанных путей» :

# Language selector
RewriteRule ^(en|ru|de|nl|ua)/(.*) $2?l=$1 [QSA,NC,NE,DPI]

Попробуйте и отпишитесь о результатах.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
prostogorod
#7 25.10.2016 19:26

Да, решение проблемы действительно определяеться добавлением «DPI» флага .  Спасибо!

Но после решения этих вопросов, всплыл такой баг связаный с выводом тайтла страницы, котороя находиться в категории system.

Если установлен, основной язык то  страница в категории system, выдает только тайтл, а для остальных языковых версий этой страницы добавляеться еще надпись - System

Для себя сделал такое решение, в функции cot_title, добавил:

if($params['CATEGORY']=='System'){unset($params['CATEGORY']);$mask=str_replace(' - {CATEGORY}', '', $mask);} 

 

 

Отредактировано: prostogorod (25.10.2016 19:32, 7 лет назад)
Macik
#8 25.10.2016 21:04

Крайне не рекомендую править код ядра. Себе же создаете проблемы на будущее.
Вот такой код должен помочь:

if (strtolower($_GET['c']) == 'system') $cfg['page']['title_page'] = '{TITLE}';

Добавляем туда же, куда и прежнее — в языковые файлы темы оформления.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
prostogorod
#9 31.10.2016 14:36

Работает, как часы... Спасибо! Но столкнулся с такой задачей, если загруженое изображение имеет надпись на определенном языке... а также альт и тайтл изображения....

Использую плагин mavatars и модуль files.

Как менять изображение, альт и тайтл изображения взависимости от языковой версии сайта?

Macik
#10 31.10.2016 15:43
#42273 prostogorod:

Использую плагин mavatars и модуль files.

Как менять изображение, альт и тайтл изображения взависимости от языковой версии сайта?

На сколько помню в этих расширениях нет поддержки `i18n`. Поэтому если только городить огород.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
prostogorod
#11 11.12.2016 13:06

Теперь столкнулся с работой хлебных крошок при многоязычности и увидел еще одну проблемку.
Напомную у меня сайт на трех языках, основной польский... Перевод хлебных крошок работает, но ссылка (url) на главную в хлебных крошках не меняется.
Если я нахожусь на английской версии, например в разделе статьи, и хочу перейти на главную (английской версии) по хлебным крошкам вместо урла site.com/en переходит site.com а это главная на польском.
Подскажите, пожалуйста, как это можно исправить? Спасибо!

Macik
#12 12.12.2016 11:31

Такое поведение «зашито» в ф-ю `cot_breadcrumbs`. Создайте тикет на ГитХабе — исправим.

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
prostogorod
#13 12.12.2016 12:44
Macik
#14 12.12.2016 14:28

Исправлено. Протестируйте...

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
prostogorod
#15 12.12.2016 14:36

Спасибо! Все отлично работает!