Jump to content

Nápověda: Rozšíření:Translate/Příklad konfigurace skupiny

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

Tento návod je určen vývojářům a pokročilým administrátorům překladů. Rozebírá se zde, jak vytvořit nový konfigurační soubor pro překladatelské rozhraní a všechny podrobnosti a praktické aspekty s tím spojené. Má být používán společně s eskupinovou konfigurační referenční příručkou a vývojáři rozšíření Translate vám rádi pomohou s jakýmikoli otázkami, které budete mít po prostudování tohoto návodu.

Předpoklady

Tento návod byl vytvořen na základě revize Translate r97948 (23. 9. 2011).

Tento návod popisuje proces povolení překladu pro některé části projektu MyBB. Podobným postupem můžete přidávat další projekty/soubory k překladu. Některé věci jsou pro translatewiki.net specifické a měli byste přirozeně použít to, co je ve vašem případě relevantní, namísto slepého následování kroků tohoto návodu.

Krok 1: Podívejte se na zdrojový kód

Pojďme se podívat na zdrojový kód MyBB s použitím $wgTranslateGroupRoot jako pracovního adresáře, což je v tomto příkladu /home/betawiki/projects/.

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

V závislosti na vaší konfiguraci budete možná muset, před přidáním souborů projektu nebo konfiguračních souborů, toto spustit jako root nebo jiný uživatel. Na translatewiki.net je uživatelem "betawiki", takže výše uvedený příkaz je ve skutečnosti proveden jako:

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

Nyní musíme najít soubory obsahující zprávy. Jsou v podadresáři mybb/inc/languages/ a zdrojové zprávy v angličtině najdete v podadresáři english/.

Začněme tedy mybb/inc/languages/english/index.lang.php, prvním lokalizačním souborem našeho projektu.

Krok 2: Podpora formátu souboru

V našem instalačním adresáři MediaWiki pod $2 a $2 src/FileFormatSupport/FileFormatFactory.php můžeme vidět třídy pro podporu formátů souborů, které se používají k mapování skupin zpráv na lokalizační soubory každého projektu. Abyste skutečně viděli, jaké formáty jsou podporovány, musíte se v tom trochu pohrabat. Takže jsme se prostě rozhodli nejprve zkusit použít třídu FlatPhpFFS a uvidíme, jak dobře funguje s naším souborem PHP.

Máme tedy soubor k mapování a zvolili jsme pro něj třídu FFS. Nyní musíme napsat konfiguraci skupiny. To je soubor YAML.

V indexu můžete najít odkaz na konfiguraci skupiny . Začněme s minimálním souborem uvedeným jako příklad pro sekci BASIC.

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

Můžeme pokračovat a jednoduše nahradit ukázkový text našimi vlastními hodnotami.

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

Popis přijímá veškerou syntaxi wikitextu. Jeden pěkný trik ukázaný v původním příkladu je ten, že jej můžete přeložit pomocí {{int:message-key}}. Pak ale musíte definovat výchozí text na stránce [[MediaWiki:Message-key]]. Všimněte si, že ID jmenného prostoru se přidává prostřednictvím jeho konstanty, viz jak používat vlastní jmenné prostory.

Potřebujeme ještě jednu věc: Sekci FILES. Opět vycházíme z příkladu uvedeného v dokumentaci:

FILES:
  format: FlatPhp
  sourcePattern: %GROUPROOT%/inc/languages/messages_%CODE%.properties
  targetPattern: commonist/messages_%CODE%.properties

Hmm, %CODE% je kód jazyka, jako en ve výchozím nastavení. Prozatím nechceme měnit adresářovou strukturu používanou MyBB. Místo toho můžeme použít funkci určenou pro tento účel: Mapu kódu, která nám umožňuje mapovat kódy jazyků každého jazyka na identifikátory používané naším projektem.

Takže končíme takto:

FILES:
  format: FlatPhp
  sourcePattern: %GROUPROOT%/mybb/inc/languages/%CODE%/index.lang.php
  targetPattern: mybb/inc/languages/%CODE%/index.lang.php
  codeMap:
    en: english
    "no": norwegian
Pozor, budete potřebovat uvozovky kolem kódu jazyka no, protože některé analyzátory YAML jej interpretují jako booleovský.

V podstatě to říká, že pro kód en bude %CODE% výše english, což je adresář pro soubory zpráv v angličtině. Klíč targetPattern je obvykle stejný jako sourcePattern, ale bez předpony %GROUPROOT%.

Dobře. Nyní uložme tento soubor někam, například do stejné složky, kde je uložen LocalSettings.php , s názvem MyBB.yaml. Celý soubor je:

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

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

Potom musíme říci naší příponě, aby si tento soubor přečetla. Přidejte následující řádek do LocalSettings.php:

$wgTranslateGroupFiles[] = "MyBB.yaml";

Poté spusťte skript processMessageChanges.php podle pokynů na Nápověda:Rozšíření:Translate/Vedení skupiny .

Pojďme se tedy přihlásit. Ujistěte se, že uživatel má správně nakonfigurováno právo "překládat-spravovat" a přejděte na [[Special:ManageMessageGroups]].

Můžete vidět toto:

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

V tomto případě byste při pozorném čtení dokumentace mohli zjistit, že je potřeba, aby se nový jmenný prostor registroval na MediaWiki, přidat následující řádek do LocalSettings.php:

wfAddNamespace( 1246, 'MyBB' );

V tomto příkladu je použito 1246, ale můžete si vybrat libovolné volné číslo jmenného prostoru, které potřebujete. Pro rozšíření Translate vám doporučujeme používat sudá čísla jmenného prostoru 1200-1298.

Pokud nyní znovu načtete speciální stránku ManageMessageGroups, měli byste vidět řádek, který říká:

MyBB This message group has not been imported previously.

Klikněte na odkaz MyBB. Poté uvidíte seznam zpráv, které jsou v tomto souboru. Pokud jste s výsledky spokojeni, klikněte na "Provést" (execute).

Po kliknutí na "Provést" se soubor zpracuje a zobrazí se výstup podobný tomuto:

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!

Pokud je soubor velmi velký, musíte nejprve spustit php Translate/scripts/sync-group.php --group=out-mybb --lang=en, protože webové rozhraní může importovat pouze omezený počet zpráv najednou kvůli časovému limitu PHP. Pokud narazíte na tento limit, můžete kliknout na tlačítko v dolní části stránky a importovat zbývající zprávy.

Krok 3: Přidání dalšího souboru

Nyní přidáme druhý soubor pro MyBB pro překlad. To lze provést dvěma způsoby:

Přístup 1: Přidání nového souboru YAML

Jednoduše přidejte nový soubor YAML a uložte jej pod novým názvem. Poté jej zavolejte zevnitř LocalSettings.php a postupujte podle všech výše uvedených kroků. Soubor bude vypadat nějak takto:

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

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

Jak je zřejmé z výše uvedeného příkladu, musíte pro tuto novou skupinu použít jiné ID.

I když je tento přístup snadný, nečlení se na stovky různých překladových jednotek (tj. souborů mapovaných do jejich skupiny zpráv). V určitém okamžiku potřebujete aktualizovat nějakou hodnotu a dělat to pro všechny ty soubory není žádná legrace. Naštěstí existuje jiný způsob, který je uveden níže.

Přístup 2: Syntaxe TEMPLATE

Myšlenka je taková, že do šablony vtáhneme společné hodnoty. Poté každá skupina převezme chybějící hodnoty ze šablony a není třeba je opakovat pro každou skupinu.

Vraťme se k příkladu MyBB. Řekněme, že chcete do přeložitelných zpráv zahrnout index.lang.php, showthread.lang.php, global.lang.php. Soubor YAML je třeba aktualizovat takto:

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

  FILES:
    format: FlatPhp
    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
Všimněte si, že každá skupina musí být oddělena řádkem obsahujícím tři pomlčky --- bez počátečních a koncových mezer! Jinak nebude soubor YAML správně analyzován.

Jak je zřejmé z výše uvedeného příkladu, codeMap je definován pouze jednou. Přidávání a odebírání souborů je stejně snadné jako přidání nebo odebrání části ve výše uvedeném souboru.

Pokud nyní přejdete na speciální stránku ManageMessageGroups, uvidíte tři položky, jako jsou tyto:

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.

Pokud je do vašeho projektu zahrnuto mnoho souborů, může být dobré napsat skript, který vám váš soubor YAML vygeneruje. Příklad najdete na svn:trunk/translatewiki/StatusNet/genStatusNet-plugins.php.

Krok 4: Zdrojová skupina

Přidání zdrojové skupiny a definování souborů zpráv jako jejích podskupin má dvě výhody:

  • Méně práce pro překladatele při výběru různých skupin zpráv, zejména při údržbě. Překladatelé mohou jednoduše otevřít agregovanou skupinu a přeložit nebo aktualizovat vše, co potřebuje aktualizaci nebo překlad pro všechny skupiny.
  • Statistiky lze vykazovat na agregované úrovni skupiny, tzn. celý projekt.

Abyste mohli definovat agregovanou skupinu, musíte přidat následující sekci hned za sekci TEMPLATE a před definici jednotlivých podskupin:

---
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

Tím se dostáváme docela blízko, ale stále chybí jeden krok. V tomto okamžiku, pokud přejdete na Special:Translate, uvidíte nadřazenou skupinu MyBB (a ta ve skutečnosti funguje!), ale také podskupiny uvedené jako samostatné skupiny. :(

Je způsob, jak to opravit. Přidejte následující řádek do LocalSettings.php:

$wgTranslateGroupStructure['/^out-mybb/'] = array( 'mybb' );
Rozbalená agregovaná skupina (viz collapsed)

Tím vezme všechny skupiny, jejichž ID odpovídá danému vzoru, zobrazí první skupinu a skryje vše ostatní pod touto první skupinou. Trochu ošklivé, ale funguje to. Tato konstrukce podporuje pouze dvě vrstvy, i když skupiny agregátů mohou být součástí jiných skupin agregátů.

Pokud nyní přejdete na [[Special:Translate]], uvidíte v seznamu pouze nadřazenou skupinu MyBB. Navíc uvidíte odkaz "Zobrazit 3 podskupiny". Kliknutím na něj zobrazíte názvy podskupin.

Podívejte se na příručku pro TAGS a další sekce, kterými jsme v tomto dokumentu neprošli.

Krok 5: Čištění

Soubory YAML projektů podporovaných translatewiki.net jsou uloženy v repozitáři translatewiki na Git .

V translatewiki.net jsou řádky LocalSettings.php ve skutečnosti v TranslateSettings.php. Sandboxwiki na translatewiki.net nemá soubor TranslateSettings.php, proto jsme vše přidali do LocalSettings.php.