Довідка:Розширення:Переклад/Приклад налаштування групи

This page is a translated version of the page Help:Extension:Translate/Group configuration example and the translation is 67% complete.
Outdated translations are marked like this.

Цей посібник призначений для розробників і досвідчених адміністраторів перекладу. У цьому посібнику пояснюється, як створювати нові файли конфігурації для перекладу повідомлень інтерфейсу програмного забезпечення, включно з практичними аспектами цього. Його треба використовувати разом із посібником з налаштування груп; розробники розширення Переклад радо допоможуть вам з будь-якими питаннями, які у вас виникнуть під час роботи з цим посібником.

Передумови

Цей посібник було створено на основі версії r97948 розширення Переклад (2011-09-23).

У цьому посібнику описано процес вмикання перекладу для деяких частин проєкту MyBB. Ви можете слідувати таким крокам додавання інших проєктів/файлів на переклад. Деякі речі специфічні для translatewiki.net і вам, зрозуміло, треба користуватись тим, що відповідає вашій ситуації, замість того, щоб сліпо слідувати крокам, описаним тут.

Крок 1: Перевірка вихідного коду

Давайте перевіримо вихідний код MyBB використовуючи $wgTranslateGroupRoot як робочу директорію, що у цьому приклад є /home/betawiki/projects/.

cd /home/betawiki/projects svn co http://svn.mybboard.net/mybb/branches/1.6-stable mybb

Залежно від вашої конфігурації, вам може бути треба запустити це під кореневим чи іншим користувачем перед додаванням файлів проєкту чи конфігурації. На translatewiki.net користувач називається «betawiki», тож команда вище виконується як:

sudo -u betawiki svn co http://svn.mybboard.net/mybb/branches/1.6-stable mybb

Тепер треба знайти файли, що містять повідомлення. Вони знаходяться у субдиректорії mybb/inc/languages/ і ви можете знайти вихідні повідомлення англійською мовою у субдиректорії english/.

Тож давайте розпочнемо з mybb/inc/languages/english/index.lang.php, першого файлу локалізації нашого проєкту.

Крок 2: Підтримка формату файлу

У нашій директорії встановлення MediaWiki під FFS.php та Translate/ffs/ [1] ми можемо бачити класи для підтримки формату файлу, які використовуються для планування груп повідомлень у файли локалізації кожного проєкту. Ви маєте трохи покопатися, щоб побачити, власне, який вид форматів підтримується. Тому ми просто вирішили спробувати і використати спершу клас FlatPhpFFS, і побачити, як добре він працює з нашим PHP-файлом.

Тож ми маємо файл для планування і ми вибрали для нього клас FFS. Тепер нам треба прописати конфігурацію групи. Це файл YAML.

На головній ви можете знайти посилання на Конфігурацію груп . Розпочнемо з мінімального файлу, поданого як приклад для секції BASIC.

BASIC:
  id: out-freecol
  label: FreeCol (open source game)
  description: "{{int:bw-desc-freecol}}"
  namespace: NS_FREECOL
  class: FileBasedMessageGroup

Ми можемо іти далі і просто замінити текст прикладу на наші значення.

BASIC:
  id: out-mybb
  label: MyBB
  description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
  namespace: NS_MYBB
  class: FileBasedMessageGroup

Опис сприймає увесь синтаксис вікітексту. Цікава річ, показана в оригінальному прикладі, полягає в тому, що ви можете зробити його перекладабельним, використавши {{int:message-key}}. Але потім вам треба зазначити текст за замовчування на сторінці [[MediaWiki:Message-key]]. Зверніть увагу, що ID простору назв додається постійно, див. як використовувати інші простори назв.

Нам необхідна ще одна річ: секція FILES. Знову починаємо з прикладу, поданого в документації:

FILES:
  class: FlatPhpFFS
  sourcePattern: %GROUPROOT%/inc/languages/messages_%CODE%.properties
  targetPattern: commonist/messages_%CODE%.properties

Гмм, %CODE% — це код мови, як en за замовчуванням. На зараз, ми не хочемо змінювати структуру директорії, яку використовує MyBB. Натомість ми можемо використати функцію, створену з цією метою: план коду, який дозволяє нам спланувати мовні коди кожної мови на ідентифікатори, використовувані нашим проєктом.

Тож у нас виходить таке:

FILES:
  class: FlatPhpFFS
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
  codeMap:
    en: english
    "no": norwegian
Майте на увазі, що навколо коду мови no треба поставити лапки, бо деякі парсери YAML сприймають його як логічний.

По суті, це значить, що для коду en %CODE% угорі буде english, директорія для файлів повідомлень англійською. Ключ targetPattern, зазвичай, те саме, що й sourcePattern, але без префіксу %GROUPROOT%. The key targetPattern is usually the same as sourcePattern, but without the %GROUPROOT% prefix.

Добре. Тепер давайте збережемо кудись цей файл, наприклад, що у ту саму папку, де зберігається LocalSettings.php , з назвою MyBB.yaml. Увесь файл такий:

BASIC:
  id: out-mybb
  label: MyBB
  description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
  namespace: NS_MYBB
  class: FileBasedMessageGroup

FILES:
  class: FlatPhpFFS
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
  codeMap:
    en: english
    "no": norwegian

Далі нам треба вказати нашому розширенню прочитати цей файл. Додайте до LocalSettings.php такий рядок:

$wgTranslateGroupFiles[] = "MyBB.yaml";

Після того, як зробите це, слідуйте інструкціям на сторінці Help:Extension:Translate/Group management , щоб запустити скрипт processMessageChanges.php.

Тож давайте увійдемо в систему, переконаємося, що користувач має правильно налаштоване право «translate-manage», і перейдемо на [[Special:ManageMessageGroups]].

Ви можете бачите таке:

No valid namespace defined, got NS_MYBB.
Backtrace: <...>

У цьому випадку, уважно читавши документацію, ви могли визначити необхідність додання до LocalSettings.php наступного рядка, щоб зареєструвати новий простір назв у MediaWiki:

wfAddNamespace( 1246, 'MyBB' );

У цьому прикладу використано 1246, але ви можете обрати будь-який вільних номер простору назв. Для розширення Translate ми рекомендуємо вам використовувати парні числа у діапазоні 1200-1298.

Якщо ви зараз перезавантажите спеціальну сторінку ManageMessageGroups, то маєте побачити рядок, який каже:

MyBB This message group has not been imported previously.

Натисніть на посилання MyBB. Після цього, ви побачите список повідомлень, які є в тому файлі. Якщо ви задоволені результатом, натисніть «Виконати».

Після того, як ви натиснете «Виконати», файл виконається і ви побачите результат, подібний до цього:

Imported new version of page MyBB:L\x5b'boardstats'\x5d/en.
Imported new version of page MyBB:L\x5b'new posts'\x5d/en.
Imported new version of page MyBB:L\x5b'no new posts'\x5d/en.
...
Cache rebuild.
All done!

Якщо файл дуже великий, вам треба спершу запустити php Translate/scripts/sync-group.php --group=out-mybb --lang=en, оскільки веб-інтерфейс може імпортувати обмежену кількість повідомлень зараз через ліміт PHP-таймаут; якщо ви зіткнулися з цим обмеженням, ми можете натиснути кнопку унизу сторінки для імпорту повідомлень, що залишилися.

Крок 3: Додавання іншого файлу

Тепер давайте додамо другий файл для MyBB на переклад. Є два способи це зробити:

Підхід 1: Додавання нового файлу YAML

Просто додайте новий файл YAML і збережіть його з новою назвою. Потім викличте його зсередини LocalSettings.php і повторіть усі попередні кроки. Файл буде виглядати приблизно так:

BASIC:
  id: out-mybb-showthread
  label: MyBB
  description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
  namespace: NS_MYBB
  class: FileBasedMessageGroup

FILES:
  class: FlatPhpFFS
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/showthread.lang.php
  targetPattern: mybb/inc/languages/%CODE%/showthread.lang.php
  codeMap:
    en: english
    "no": norwegian

З прикладу вище очевидно, що для цієї нової групи треба використати інший ID.

Хоч цей підхід і простий, він не підходить за масштабом для сотень різних одиниць перекладу (напр. файлів, спланованих на їхню групу повідомлень). У повний момент вам треба оновити якесь значення, і робити це для усіх тих файлів зовсім не весело. На щастя, є інший спосіб, показаний нижче.

Підхід 2: Синтаксис TEMPLATE

Ідея полягає у тому, що ми виносимо спільні значення у шаблон. Потім кожна група буде брати потрібні значення із шаблону і не треба буде повторювати їх для кожної групи.

Давайте повернемося до прикладу з MyBB. Скажімо, ви хочете включити у перекладабельні повідомлення index.lang.php, showthread.lang.php і global.lang.php. Файл YAML треба оновити, як тут:

TEMPLATE:
  BASIC:
    description: "[[Translating:MyBB|MyBB]] is a web-based discussion forum software"
    namespace: NS_MYBB
    class: FileBasedMessageGroup

  FILES:
    class: FlatPhpFFS
    codeMap:
      en: english
      "no": norwegian
---
BASIC:
  id: out-mybb-index
  label: MyBB - index page

FILES:
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
---
BASIC:
  id: out-mybb-showthread
  label: MyBB - show thread

FILES:
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/showthread.lang.php
  targetPattern: mybb/inc/languages/%CODE%/showthread.lang.php
---
BASIC:
  id: out-mybb-global
  label: MyBB - global messages

FILES:
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/global.lang.php
  targetPattern: mybb/inc/languages/%CODE%/global.lang.php
Зверніть увагу, що кожна група має бути розділена рядком, що містить три тире --- без початкових і кінцевих пробілів! Інакше файл YAML не буде проаналізовано належним чином.

Як показано у прикладі зверху, codeMap визначено тільки раз; додавання і видалення файлів так само просте, як і додавання чи видалення секції у файлі вгорі.

Якщо ви зараз перейдете до спеціальної сторінки ManageMessageGroups, то побачите три такі пункти:

MyBB global messages: This message group has not been imported previously.
MyBB index page: This message group has not been imported previously.
MyBB show thread: This message group has not been imported previously.

Якщо у ваш проєкт потрібно включити багато файлів, може бути гарною ідеєю написати скрипт, який створив би ваш файл YAML для вас. Приклад можна знайти на сторінці svn:trunk/translatewiki/StatusNet/genStatusNet-plugins.php.

Крок 4: Агрегувана група

Додавання агрегованої групи і визначення файлів повідомлень як її підгрупи має дві вигоди:

  • Менше роботи для перекладачів з вибору різних груп повідомлень, зокрема для роботи з підтримки. Перекладачі можуть просто відкрити агреговану групу і перекладати чи оновлювати щось, що потребує оновлення чи перекладу для всіх груп.
  • Статистику можна збирати на рівні агрегованої групи, напр. всього проєкту.

Для того, щоб визначити агреговану групу, вам треба додати наступну секцію одразу після секції TEMPLATE і перед визначенням індивідуальних підгруп:

---
BASIC:
  id: out-mybb-0-all # The id should sort before all the subgroups it has
  label: MyBB
  meta: yes
  class: AggregateMessageGroup # Not taken from template

GROUPS:
  - out-mybb-* # We could specify them one by one, but wildcard is easier

Зробивши це, ми вже близько до завершення, але є ще один крок. На цьому етапі, якщо ви перейдете до Special:Translate, ви побачите батьківську групу MyBB (і вона насправді працює!), але також підгрупи, які будуть у списку як окремі групи. :(

Ось як це треба виправити. Додайте до вашого LocalSettings.php такий рядок:

$wgTranslateGroupStructure['/^out-mybb/'] = array( 'mybb' );
 
Агрегована група розгорнута (див. яка вона згорнута)

Це збирає усі групи, ідентифікатори яких відповідають певному шаблону, показує першу групу і приховує усе інше під цією першою групою. Грубувато, зате працює. Ця конструкція підтримує тільки два шари, попри те, що агреговані групи можуть бути частинами агрегованих груп.

Якщо ви перейдете зараз на [[Special:Translate]], ви побачите у списку тільки батьківську групу MyBB. Додатково ви побачите посилання «Show 3 subgroups»; клік по ньому покаже вам назви підгруп.

Ознайомтесь із посібником з TAGS та інших секцій, які ми не оглядали у цьому документі.

Крок 5: Очищення

YAML-файли проєктів, підтримувані сайтом translatewiki.net фіксуються у репозиторії translatewiki на Git.

На translatewiki.net, рядки LocalSettings.php знаходяться, власне, у TranslateSettings.php. Sandboxwiki на translatewiki.net не має файлу TranslateSettings.php file, через це ми додали усе в LocalSettings.php. Sandboxwiki at translatewiki.net does not have a TranslateSettings.php file, which is why we added everything in LocalSettings.php.