Довідка:Розширення:Переклад/Приклад налаштування групи
Перекладачам (головна довідкова сторінка )
- Як перекладати
- Кращий досвід
- Статистика та звіти
- Забезпечення якості
- Стан груп повідомлень
- Офлайн переклад
- Глосарій
Адміністраторам перекладу
- Як підготувати сторінку до перекладу
- Адміністрування перекладу сторінок
- Переклад неструктурованих елементів
- Керування групами
- Переміщення сторінки, що перекладається
- Import translations via CSV
- Working with message bundles
Сисадміни та розробники
Цей посібник призначений для розробників і досвідчених адміністраторів перекладу. У цьому посібнику пояснюється, як створювати нові файли конфігурації для перекладу повідомлень інтерфейсу програмного забезпечення, включно з практичними аспектами цього. Його треба використовувати разом із посібником з налаштування груп; розробники розширення Переклад радо допоможуть вам з будь-якими питаннями, які у вас виникнуть під час роботи з цим посібником.
Передумови
- Встановити Mediawiki
- встановити розширення Translate і
- налаштувати його.
Цей посібник було створено на основі версії 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
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
.