User Tools

Site Tools


ru:plugins:i18n

Интернационализация (I18N) и плагины

Самый простой способ вывода текстовых сообщений в плагине – жестко прописать их в коде, например, вот так:

<input type="submit" name="save" value="Save Settings"/>

Этот метод, безусловно, работает. Но ведь при создании плагина вы предполагаете, что он может использоваться по всему миру, поэтому следует подумать об его интернационализации (I18N), чтобы интерфейс административной панели и интерфейс плагина был доступен и на родном языке очередного пользователя.

В целях интернационализации плагина можно использовать уже существующие файлы переводов GetSimple. Их можно найти в папке /Путь_к_GetSimple/admin/lang или загрузить из секции Extend. В нашем примере мы бы использовали ключ BTN_SAVESETTINGS:

<input type="submit" name="save" value="<?php i18n("BTN_SAVESETTINGS"); ?>"/>

Если ваш плагин поддерживает и GetSimple 2.03, используйте следующий код:

<?php global $i18n; ?>
<input type="submit" name="save" value="<?php $i18n["BTN_SAVESETTINGS"]; ?>"/>

Список встроенных в систему ключей для перевода со значениями можно найти на этой странице, хотя он не всегда соответствует текущей версии. Самая актуальная версия содержится, конечно, в исходниках GetSimple.

Если вы хотите добавить в файл перевода собственные ключи, отсутствующие в файлах GetSimple, добавьте их в свой языковой файл с переводом самостоятельно, например, для русского языка (ru_RU.php) это будет выглядеть так:

$i18n = array(
  'BTN_SAVEMYSETTINGS' => 'Моя кнопка для сохранения изменений',
  'MYHEADER' => 'Мой заголовок'
);

Все языковые файлы размещаются в директории мой_плагин/lang/, структура файлов плагина должна выглядеть следующим образом:

- мой_плагин.php
- мой_плагин (директория)
   - .htaccess (с одной строкой: Deny from all)
   - lang (directory) 
      - .htaccess (с одной строкой: Deny from all)
      - en_US.php
      - de_DE.php (если есть такой файл)
      - ru_RU.php

Начиная с версии GetSimple 3.0 строки перевода из языкового файла легко подгружаются с помощью следующего кода:

i18n_merge('мой_плагин') || i18n_merge('мой_плагин ','en_US');

Система пытается получить перевод для текущего языка системы, установленного в административной панели в GetSimple. Если попытка не удается, то загружаются строки из английского языкового файла вашего плагина. Разумеется, такой файл для английского языка по умолчанию под именем en_US.php должен находиться в папке Мой_плагин/lang/en_US.php вашего плагина.

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

<input type="submit" name="save" value="<?php i18n("мой_плагин/BTN_SAVEMYSETTINGS"); ?>"/>

Обратите внимание, что функция i18n() выводит результат перевода на экран. Если вам необходимо использовать переведенный текст в PHP-коде, используйте функцию i18n_r(), которая возвращает переведенную строку, например:

$msg = '<div style="display: block;" class="updated">' . i18n_r("мой_плагин/MSG_UPDATED") . '.</div>';
echo $msg;

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

Языковые файлы без кода страны

Если вы в плагине применяете языковые файлы без кода страны, т.е. en.php, de.php, и.т.д., используйте для подгрузки перевода следующий код:

global $LANG;
i18n_merge('мой_плагин', substr($LANG,0,2)) || i18n_merge('мой_плагин','en');

Фронтенд

Если ваш плагин выводит текстовую информацию непосредственно на страницы сайта при типовой установке GetSimple, в случае когда контент сайта и язык административной панели совпадают, работают методы, уже описанные в настоящей секции.

Тем не менее – языковая поддержка должна быть обеспечена. Возможно, для администраторов или пользователей с правами редактора допустимо использование администраторского интерфейса на неродном языке (как правило, на английском). Но отсутствие поддержки плагином других языков во фронтенде недопустимо. Без мультиязычной поддержки вы практически ставите серьезную преграду для распространения вашего плагина среди пользователей, которые не владеют вашим родным языком.

GetSimple 3.0:

Во фронтенде значение переменной $LANG всегда равно en_US (из-за многопользовательского функционала, внедренного в версии 3.0+). Пользователю следует указать на необходимость добавить строку

$LANG = 'de_DE'; или, в нашем случае, $LANG = 'ru_RU';

в файл gsconfig.php.

В качестве альтернативы плагин может предлагать пользователю возможность для смены языка сайта.

Multi-language Front-end

На некоторых интернет-сайтах, созданных с помощью GetSimple, реализована поддержка нескольких языков. Язык сайта определяется на основе предпочтений пользователя (язык операционной системы, язык браузера), посетитель имеет возможность переключаться с одного языка на другой.

Создание и управление многоязычными сайтами не поддерживаются ядром GetSimple. В настоящее время для решения этой задачи существует единственный плагин I18N.

Если ваш плагин должен поддерживать мультиязычные сайты с использованием плагина I18N, тексты из языковых фалов вашего плагина должны загружаются только после инициализации I18N (это происходит в хуке pretemplate), с помощью следующего кода:

global $LANG;
if (function_exists('i18n_load_texts')) {
  i18n_load_texts('мой_плагин');
} else {  
  i18n_merge('мой_плагин', substr($LANG,0,2)) || i18n_merge('мой_плагин', 'en');
}

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

if (basename($_SERVER['PHP_SELF']) != 'index.php') { // back end only - or do you know a better condition?
  i18n_merge('мой_плагин', substr($LANG,0,2)) || i18n_merge('мой_плагин', 'en');
}
add_action('plugins-sidebar', 'createSideMenu', array($thisfile, i18n_r('мой_плагин/CONFIGURE'))); 

Этот код будет работать (с GetSimple 3.0+) вне зависимости от того, установлен ли в системе плагин I18N или нет.

На заметку: функция i18n_load_texts доступна в версиях плагина I18N 1.0+.

На заметку: На текущий момент плагин I18N поддерживает только языковые коды без наименования страны, таким образом, языковым файлам должны присваиваться имена en.php, de.php, и пр., а не en_US.php, и.т.д.

Ссылки

На главную Содержание

Страницы этой секции

Языки

ru/plugins/i18n.txt · Last modified: 2013/10/09 12:23 by Arkady