Создание компонента для Joomla

Часть 6 - языковые файлы

Joomla

Часть 6 - языковые файлы

В Joomla! 2.5 языковые файлы используются в четырех различных ситуациях:

  • отображение компонента в публичной части сайта
  • управление компонентом в интерфейсе администратора
  • управление пунктами меню в интерфейсе администратора
  • установка компонента

Joomla! 2.5 использует два разных пути размещения языковых файлов:

  • один в administrator/language или language
  • второй в папке расширения. Если это компонент, то путь будет таким: administrator/components/*component*/language или components/*component*/language

Все зависит от того, как устанавливается расширение.

Добавляем перевод для публичной части сайта

Создайте файл site/language/en-GB/en-GB.com_helloworld.ini:

COM_HELLOWORLD_DEFAULT_PAGE_TITLE="Hello World! component"
COM_HELLOWORLD_ERROR_OCCURRED="An error has occurred"

и файл site/language/ru-RU/ru-RU.com_helloworld.ini:

COM_HELLOWORLD_DEFAULT_PAGE_TITLE="Компонент Hello World!"
COM_HELLOWORLD_ERROR_OCCURRED="Произошла ошибка"

Добавляем перевод для интерфейса администратора

Создайте файл admin/language/en-GB/en-GB.com_helloworld.ini:

COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="This message will be displayed"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="Message"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="Greeting"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="Id"

и файл admin/language/ru-RU/ru-RU.com_helloworld.ini:

COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="Сообщение для отображения"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="Сообщение"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="Приветствие"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="Id"

Добавляем перевод для управления пунктами меню в интерфейсе администратора

Создайте файл admin/language/en-GB/en-GB.com_helloworld.sys.ini:

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="This is the Hello World! description"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Message"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="This view displays a selected message"
COM_HELLOWORLD_MENU="Hello World!"

и файл admin/language/ru-RU/ru-RU.com_helloworld.sys.ini:

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="Это описание нашего компонента Hello World!"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Сообщение"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="Это представление отобразит выбранное сообщение"
COM_HELLOWORLD_MENU="Hello World!"

Варианты размещения языковых файлов

Начиная с версии 1.6, существует два варианта установки языковых файлов для расширения. Вы можете использовать их в различной комбинации. В версии 1.5 файлы устанавливались в основную папку языков (ROOT/administrator/language/ и ROOT/language/). Новый вариант включает файлы в папку "language", которая расположена в корне расширения. Таким образом, расширение может включать в себя папку языков с файлом .sys.ini, который отличается от того, который установлен в основную папку языков Joomla.

sys.ini также используется для перевода имени расширения в некоторых местах админки и для перевода меню компонента.

Таким образом xml-файл может включать:

<files>
     <[...]
     <folder>language</folder>  // ДОЛЖНО включать правильные подпапки, например language/en-GB/ ... language/ru-RU/
     <filename>whatever</filename>
     [...]
 </files>

и/или вариант версии 1.5:

<languages folder="joomlacorelanguagefolders"> // если используется другая папка для файлов
     <language tag="en-GB">en-GB/en-GB.whatever.ini</language> // или
     <language tag="en-GB">en-GB.whatever.ini</language> если не определена подпапка
     <language tag="en-GB">en-GB/en-GB.whatever.sys.ini</language> // или
     <language tag="en-GB">en-GB.whatever.sys.ini</language> если не определена подпапка
 </languages>

или просто в корень

<languages>
     <language tag="en-GB">en-GB.whatever.ini</language>
     <language tag="en-GB">en-GB.whatever.sys.ini</language>
 </languages>

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

Одним из преимуществ установки файлов в папку language, которая расположена в корне расширения, является то, что эти файлы не затрагиваются при обновлении языковых пакетов. Другим преимуществом можно считать то, что эта папка может включать в себя несколько языков (всегда en-GB, ru-RU, fr-FR и т.д.) и при этом пользователь не обязан устанавливать соответствующий языковой пакет.

Добавляем перевод для процесса установки компонента

Создайте файл language/en-GB/en-GB.com_helloworld.sys.ini:

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="This is the Hello World description"

и файл language/ru-RU/ru-RU.com_helloworld.sys.ini

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="Это описание компонета Hello World!"

Собираем пакет установки компонента

Не забудьте поменять номер версии в файле helloworld.xml:

<version>0.0.6</version>

Также мы можем использовать для перевода название компонента, описание компонента и пункт меню:

<name>COM_HELLOWORLD</name>
<description>COM_HELLOWORLD_DESCRIPTION</description>
<menu>COM_HELLOWORLD_MENU</menu>

В раздел <files folder="site"> добавьте:

<folder>language</folder> 

А в раздел <administration> добавьте:

<languages folder="admin">
     <language tag="en-GB">language/en-GB/en-GB.com_helloworld.ini</language>
     <language tag="en-GB">language/en-GB/en-GB.com_helloworld.sys.ini</language>
     <language tag="ru-RU">language/ru-RU/ru-RU.com_helloworld.ini</language>
     <language tag="ru-RU">language/ru-RU/ru-RU.com_helloworld.sys.ini</language>
 </languages>

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>
 <extension type="component" version="2.5.0" method="upgrade">
 
    <name>COM_HELLOWORLD</name>
     <!-- Следующие элементы необязательны -->
     <creationDate>Июль 2012</creationDate>
     <author>Вася Пупкин</author>
     <authorEmail>Ваш e-mail</authorEmail>
     <authorUrl>Ваш сайт</authorUrl>
     <copyright>Информация о копирайте</copyright>
     <license>Информация о лицензии</license>
     <!--  Версия записывается в таблицу компонентов -->
     <version>0.0.6</version>
     <!-- Описание необязательно -->
     <description>COM_HELLOWORLD_DESCRIPTION</description>
 
    <!-- Запускается при установке -->
     <install>
         <sql>
             <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
         </sql>
     </install>
     <!-- Запускается при удалении -->
     <uninstall>
         <sql>
             <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
         </sql>
     </uninstall>
     <!-- Запускается при обновлении -->
     <update>
         <schemas>
             <schemapath type="mysql">sql/updates/mysql</schemapath>
         </schemas>
     </update>
 
    <!-- Раздел основных файлов сайта -->
     <!-- Обратите внимание на значение аттрибута folder: Этот аттрибут описывает папку нашего пакета-установщика из которой должны копироваться файлы.
     Поэтому указанные в этом разделе файлы будут скопированы из папки /site/ нашего пакета-установщика в соответствующую папку установки. -->
     <files folder="site">
         <filename>index.html</filename>
         <filename>controller.php</filename>
         <filename>helloworld.php</filename>
         <folder>language</folder>
         <folder>models</folder>
         <folder>views</folder>
     </files>
 
    <!-- Администрирование -->
     <administration>
         <!-- Раздел Меню -->
         <menu>COM_HELLOWORLD_MENU</menu>
         <!-- Раздел основных файлов администрирования  -->
         <!-- Обратите внимание на значение аттрибута folder: Этот аттрибут описывает папку нашего пакета-установщика из которой должны копироваться файлы.
         Поэтому указанные в этом разделе файлы будут скопированы из папки /admin/ нашего пакета-установщика в соответствующую папку установки. -->
         <files folder="admin">
             <filename>index.html</filename>
             <filename>controller.php</filename>
             <filename>helloworld.php</filename>
             <folder>models</folder>
             <folder>sql</folder>
             <folder>tables</folder>
             <folder>views</folder>
         </files>
         <languages folder="admin">
             <language tag="en-GB">language/en-GB/en-GB.com_helloworld.ini</language>
             <language tag="en-GB">language/en-GB/en-GB.com_helloworld.sys.ini</language>
             <language tag="ru-RU">language/ru-RU/ru-RU.com_helloworld.ini</language>
             <language tag="ru-RU">language/ru-RU/ru-RU.com_helloworld.sys.ini</language>
         </languages>
     </administration>
 
</extension>

В этом helloworld.xml файле языки устанавливаются в:

  • administrator/language для админки (посмотрите на xml тег languages)
  • components/com_helloworld/language для сайта (xml тега languages в разделе сайта нет, но включается папка language)

Содержимое директории с кодом:

helloworld.xml
site/index.html
site/helloworld.php
site/controller.php
site/language/index.html
site/language/en-GB/index.html
site/language/en-GB/en-GB.com_helloworld.ini
site/language/ru-RU/index.html
site/language/ru-RU/ru-RU.com_helloworld.ini
site/models/index.html
site/models/helloworld.php
site/views/index.html
site/views/helloworld/index.html
site/views/helloworld/view.html.php
site/views/helloworld/tmpl/index.html
site/views/helloworld/tmpl/default.xml
site/views/helloworld/tmpl/default.php
admin/index.html
admin/controller.php
admin/helloworld.php
admin/language/index.html
admin/language/en-GB/index.html
admin/language/en-GB/en-GB.com_helloworld.ini
admin/language/en-GB/en-GB.com_helloworld.sys.ini
admin/language/ru-RU/index.html
admin/language/ru-RU/ru-RU.com_helloworld.ini
admin/language/ru-RU/ru-RU.com_helloworld.sys.ini
admin/models/index.html
admin/models/helloworlds.php
admin/models/fields/index.html
admin/models/fields/helloworld.php
admin/sql/index.html
admin/sql/install.mysql.utf8.sql
admin/sql/uninstall.mysql.utf8.sql
admin/sql/updates/index.html
admin/sql/updates/mysql/index.html
admin/sql/updates/mysql/0.0.1.sql
admin/sql/updates/mysql/0.0.4.sql
admin/tables/index.html
admin/tables/helloworld.php
admin/views/index.html
admin/views/helloworlds/index.html
admin/views/helloworlds/view.html.php
admin/views/helloworlds/tmpl/index.html
admin/views/helloworlds/tmpl/default.php
admin/views/helloworlds/tmpl/default_body.php
admin/views/helloworlds/tmpl/default_foot.php
admin/views/helloworlds/tmpl/default_head.php
language/index.html
language/en-GB/index.html
language/en-GB/en-GB.com_helloworld.sys.ini
language/ru-RU/index.html
language/ru-RU/ru-RU.com_helloworld.sys.ini

Запакуйте директорию в архивный файл (zip, tar, tar.gz, bz2) или скачайте его напрямую c GitHub. Далее установите его, используя менеджер расширений Joomla. Теперь можете убедиться в том, что перевод работает:

Языковые файлы - выбор пункта меню

Языковые файлы - обязательные параметры

Языковые файлы - список сообщений

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

Код для этой части

Скачать com_helloworld часть 6

Актуальный код части 6 на GitHub

Dmitry Rekun
Работаю в банковской сфере, а с веб-разработкой (непосредственно с Joomla) столкнулся в 2007 году. Теперь это моё хобби и время от времени вторая работа. Какое-то время вёл свой блог, но решил попробовать работать в команде. И вот c 2012 года я здесь :)