Бесплатная CMS для вашего сайта Разумная альтернатива WordPress

Пробный вариант локализации в MaxSite CMS

13-11-2008Reading time ~ 2 min.Roadmap 23533

Задача довольно сложная, но, учитывая большой опыт локализации WordPress, я решил сразу не спешить, а хорошенько подумать. Сделать качественный алгоритм локализации довольно тяжело, потому что нужно учитывать сразу множество факторов. Главные это легкость изменения и поддержки разработчиком; легкость интеграци (по возможности «на лету») и небольшая ресурсоемкость.

Таким образом я предлагаю всем желающим потестировать новую возможность, скачав последний latest.zip (от 14 ноября 2008 г.).

[cut Далее технические подробности]

По-умолчанию система работает на русском языке. Для того, чтобы переключить язык следует в файле mso_config.php указать $MSO->language = 'en'; (для английского языка). Естественно должны быть сами файла перевода.

Общий принцип трансляции таков: фразы, которые должны или могут быть переведены оформляются в виде функции t(). Первый параметр - переводимое слово. Второе - каталог с файлом перевода. Файл перевода должен находиться подкаталоге language и иметь имя «язык».php. Файл перевода представляет собой обычный php-файл, в котором указан массив с переводом:

    $lang['Слово 1'] = 'perevod 1';    $lang['Слово 2'] = 'perevod 2';

Например для плагина ушки: .../application/maxsite/plugins/ushki/language/en.php

    $lang['Ушки'] = 'Ushki';

В самом плагине переводимые фразы указываются так:

    t('Ушки', FILE);

или можно так:

    t('Ушки', 'plugins/ushki');

Константа __FILE__ используется в PHP для указания имени текущего php-файла. Функция t() сама определит каким способом указан каталог. Таким образом, если у вас используется свой языковой файл, то удобней использовать __FILE__. Если же используется какой-то предопределенный, то лучше указать явный. Если второй параметр не указывать, то будет использован файл перевода из /common/.

Если данный алгоритм окажется эффективным, то я запланирую во всех входящих в комплект поставки плагинах, файл перевода включить в единый language-файл. Это будет проще для переводчиков. Также будет единый файл системы в каталоге common и admin. То есть все сведется к трем файлам локализации: общий, админки и плагинов.

Related Posts
Comments (15) RSS
1 G3D 2008-11-14 15:27:48

Давним давно очікував цього кроку! Спасибі за розуміння)


2 Александр Захаров 2008-11-15 11:01:16

Судя по отзывам, движок действительно очень хороший. Я веду свой блог на WordPress, и у меня возник вопрос: если я переведу свой ресурс на MaxSite CMS, возможно ли сделать так, чтобы остались все мои старые записи (причем по старым url-ам) и комментарии, а также url-прочих страниц - архивы, разделы, метки и т.д.?

И второй вопрос - а где можно скачать MaxSite CMS? Я что-то не нашел ссылки :(


3 Wave 2008-11-15 11:42:24

1. Нет.

2. http://max-3000.com/page/maxsite-cms-025


4 Александр Захаров 2008-11-15 11:43:37

Прошу прощения, ссылки уже нашел :)


5 Вот ты какой 2008-11-15 20:52:38

Бывает.

Движек действительно класный


6 Vaswiliy 2008-11-24 20:48:13

а на денвер его можно поставить а то поставил

Версия: 0.25 а у меня в самом верху пишет

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at X:\home\maxsite.fp\www\application\config\database.php:1)

Filename: libraries/Session.php

Line Number: 295

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: mso_install

Filename: common/common.php

Line Number: 142

=(


7 Wave 2008-11-24 21:54:31
Vaswiliy, читай readme идущую в архиве. Там эта ошибка описана.

8 Аноним 2008-12-02 07:14:53

перевод стандартный будет?


9 Николай Громов (nicothin) 2008-12-30 10:37:11

а уже сейчас, для самой новой (0.27) версии движка можно делать многоязычные сайты (хотя бы простой установкой нескольких копий движка)?

php-фреймворк включен в двигло, вопрос: можно ли сделать несколько сайтов на MaxSite CMS с использованием одних и тех же сайлов фреймворка?

довольно часто делаю сайты, присматриваюсь к Вашей CMS :)


10 Wave 2008-12-30 12:01:47

Можно даже на одной копии движка. Просто разные префиксы для базы данных задать и немного допилить напильником в сторону выбора языка до выбора префикса БД. Где-то на форуме это обсуждалось.

Проблема ещё в том, что в исходниках много русского языка. Приходится лазить по исходникам и менять func_name($param, 'что-то по русски') на func_name($param, t('что-то по русски', FILE)) после чего ещё перевод вписывать в соответствующем файлике.

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

Конечно, можно было бы просто менять русский на украинский, или если понадобится — на английский (а больше я языков не знаю), но хочется сделать правильно, с заделом на будущее, чтобы если что, только файлы перевода отдать переводчикам. Тем более, что уже дважды приходилось сталкиваться с арабским, где куча дополнительных приколов из-за Right-To-Left написания и рендеринга в браузерах.


11 Максим 2008-12-30 13:57:54 admin

Арабский это круто! :)

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


12 Николай Громов (nicothin) 2009-01-07 13:50:48

посотой поиск по форуму с запросом "func_name" никаких результатов не дал.

а вообще, очень неудобно искать по WP-форуму темы, касающиеся MaxSiteCMS.

имхо, но уже созрела необходимость для отдельного форума.


13 Wave 2009-01-07 14:19:43

func_name — это как «такой-то имярек». Т.е. просто в коде дофига функций (разных), которые вызываются с русскими строками в параметрах. Или печатают-возвращают что-то по русски.

Но что неудобно искать по WP-форуму темы, касающиеся MaxSiteCMS — поддерживаю. Как впрочем и припоминаю чайников, задающих вопросы по WP в подфоруме MSO.

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

Самый неудобный цимес там, где по нескольку строк идёт. Например, описания плагинов или вступительное слово в админке. Описание, как зарегиться комьюзеру. И так далее. Вызывать функи вида:

t('Этот плагин предназначен для … здесь длинное многострочное описание', FILE)

как-то некошерно.

Т.е. теоретически можно так:

t('descr-01', FILE);

$lang['descr-01'] = 'Этот плагин предназначен для … здесь длинное многострочное описание';

Но тоже не самое удобное решение.


14 Максим 2009-01-07 15:00:31 admin

Верно. Меня этот вопрос тоже смущает. Но есть одна идея, которая имеет совсем другой подход к локализации и при этом значительно проще в использовании. Пока я не готов об этом говорить, вначале сам поэкспериментирую, а потом уже предложу для обуждения. Так что пока остаемся на текущем алгоритме.

Кстати вместо __FILE__ удобней использовать явное указание каталога. Я в админке буду делать единй файл перевода, поэтому там получается просто:

t('фраза', 'admin');

Для плагинов, которые в комплекте тоже будет один общий каталог. Там не очень большой файл, поэтому удобней его править в одной куче.


15 Wave 2009-01-07 15:14:00
Кстати вместо FILE удобней использовать явное указание каталога.

Я условно.

Leave a comment!