Cotonti / Open Source PHP Content Management FrameworkContent Management Framework

Файлы локализации. Обзор.

Документация / Расширяем Cotonti / Локализация / Файлы локализации. Обзор.

Краткое описание файлов локализации

Cotonti спроектирован так, что позволяет легко локализовать (перевести) сайт (его интерфейс) на нужный язык. В базовый дистрибутив входят 2 набора языковых файлов — для английского и русского языков. Язык сайта, используемый по умолчанию, выбирается при установке.

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

Кроме поставляемых по умолчанию языковых файлов есть возможность скачать и установить файлы для дополнительных языков (см. специальный раздел на нашем сайте и проект локализации на сайте Transifex) .

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

На заметку: если вам требуется не просто локализация интерфейса, а мультиязычный сайт, где пользователь  сможет сам выбирать предпочитаемый язык отображения интерфейса (и, возможно, содержимого), то вам стоит обратить внимание на статью «Делаем сайт мультиязычным».

Теперь поговорим, о том, что из себя представляют файлы локализации. 

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

 

#1. Коды языков

На текущий момент для обозначения языков система использует 2-х буквенные коды соласно ISO стандарту 3166-1. Пример: Английский: en ; Русский: ru ; Немецкий: de и и.д.
Код языка используется в названии любого языкового файла:  `xxxx.en.lang.php`, `xxxx.ru.lang.php`, ...

 

#2. Размещение языковых файлов

Языковые файлы используемые системой, делятся на типы: системные, локализация расширений, локализация тем оформления, и соответственно, размещаются в различных каталогах. Ниже приведена таблица с описанием основных файлов и указанием размещения. Строка lang_code подразумевает описнный выше 2-х буквенный код языка.

/lang    этот каталог содержит основные файлы локализации для ядра системы. Для каждого языка создана отдельныя папка названная соответственно коду языка. Пример: /lang/en/
/lang/lang_code/admin.lang_code.lang.php   локализация административной части системы
/lang/lang_code/countries.lang_code.lang.php   Локализованные названия стран
/lang/lang_code/main.lang_code.lang.php   Основные языковые данные системы
/lang/lang_code/message.lang_code.lang.php   Системные сообщения
/lang/lang_code/translit.lang_code.lang.php   Для языков отличных от английского эти файлы содержит таблицы для транслитерации 
/lang/lang_code/users.lang_code.lang.php   Данные относящиеся к профилю пользователя
/modules/ext_name/lang/ext_name.lang_code.lang.php   локализация модулей расширения
/plugins/plugin_name/lang/plugin_name.lang_code.lang.php   локализация для плагинов
/themes/theme_name/theme_name.lang_code.lang.php   локализация темы оформления
/images/smilies/lang/lang_code.lang.js   локализация набора смайлов

 

#3. Структура файла локализации

Давайте для примера взглянем на основной файл локализации `main.en.lang.php`:

<?php
/**
 * Russian Language File (main.lang.php)
 *
 * @package Cotonti
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

defined('COT_CODE') or die('Wrong URL.');

/**
 * Main strings
 */
$L['Access'] = 'Доступ';
$L['Action'] = 'Действие';
$L['Active'] = 'Активно';
$L['Activity'] = 'Активность';

/**
 * cot_declension data
 */
$Ls['Guests'] = "гость,гостя,гостей";

Как было сказано выше файл локализации это обычный PHP файл содержащий определение массива записей с языковыми данными. Начиная с версии 0.9.13 для опиисания используются только строковые данные. Т.е. не допускается использование вложенных массивов (подробнее о формате и почему это так смотрите здесь).

В начале файла идет служебная информация в виде комментария формата PHPDoc, определяющая принадлежность к тому или иному расширению, копирайты и прочее.
Ниже строки `defined('COT_CODE') or die('Wrong URL.');` мы видим, собственно, определение языковых данных.

Текстовые данные задаются в формате как отдельные элементы плоского массива в виде `ключ => значение`.

Ключ (идентификатор) это строка, которая однозначно идентиицирает данную запись. Этот ключ должен быть уникален и не меняться в языковых файлах различных  языков. Ключ используется для доступа к олкализованной строке из PHP кода или из шаблонов тем оформления (*.tpl), например так:  {PHP.L.Access} (подробнее о шаблонах в использовании данных смотри по ссылке). При таком вызове этот тег будет заменен на соответствующее значение (в нашем примере это строка 'Доступ'). Основные строки содержаться в массиве $L.
Cotonti позволяет задавать строки локализации для множественных форм (числительных) — для этого предусмотрен отдельный массив $Ls. Он используется  функцией `cot_declension()`, применимой как из PHP кода, так и для вызова из шаблона.

 

#4. Переключение языка на сайте

Существует 2 спосоа изменить язык интерфейса сатйа:

  • изменить язык в профиле пользователя. Изменения коснуться только выбранного пользователя;
  • Изменить основной язык в файле настроек datas/config.php:

$cfg['defaultlang'] = 'ru';                      // основной язык cfqnf

Эти изменения конуться всех не зарегистированных пользователей, а также всех новых пользователей.
Если вы хотите запретить пользователям менять язык интерфейса —это можно сделать в панеле управления опцией «Принудительная установка языка по умолчанию для всех пользователей» (Панель администрирования → Конфигурация → Локализация). 

#5. Создание собственной локализации

В двух словах, чтобы создать собственную локализацию надо :

  • создать дополнительные файлы с соответствующим языковым кодом (можно скопировать текущие ищменив код). Какие именно см. выше в таблице «размещение файлов»;
  • перевести языковые строки (весь текст после знака “=”, значения массива). При этом не изменяйте ключи массива иначе строка не будут найдены системой.

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

  • если планируете локализовать или дополнить языковые файлы ядра, то сделать это лучше через проект Cotonti на сайте Transifex (подробнее об этом читайте тут). 
  • если вы собираетесь локализовать какое либо расширение, то уточните доступно ли оно на сайте GitHub (как правло многие авторы размещают свои наработки именно там). В таком случае будет достаточно сделать копию проекта («fork»), сделать перевод и предлоджить правки для внесения в основной репозиторий расширеиния через запрос на добавление (pull request).


Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям