Help:Extension:Translate/Приклад налаштування групи

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Help:Extension:Translate/Group configuration example and the translation is 88% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎Kiswahili • ‎Nederlands • ‎Zazaki • ‎dansk • ‎español • ‎français • ‎italiano • ‎lietuvių • ‎polski • ‎português • ‎português do Brasil • ‎svenska • ‎čeština • ‎русский • ‎українська • ‎العربية • ‎سنڌي • ‎বাংলা • ‎தமிழ் • ‎中文 • ‎日本語

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

Передумови

Цей посібник було створено на основі версії r97948 розширення Translate (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%.

Добре. Тепер давайте збережемо кудись цей файл, наприклад, що у ту саму папку, де зберігається 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";

Після того, як зробите це, слідуйте інструкціям на сторінці Управління групами, щоб запустити скрипт 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.

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

Підхід 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
Notice that each group must be separated with a line containing three dashes --- without initial and trailing spaces! Otherwise the YAML file will not be parsed correctly.

Як показано у прикладі зверху, 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.

If there are a lot of files to be included in your project, it may be a good idea to write a script that generated your YAML file for you. An example can be found in svn:trunk/translatewiki/StatusNet/genStatusNet-plugins.php.

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

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

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

Для того, щоб визначити агреговану групу, вам треба додати наступну секцію одразу після секції 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.