Help:Extension:Translate/Zástupné elementy

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Help:Extension:Translate/Insertables and the translation is 93% complete.
Other languages:
Deutsch • ‎English • ‎français • ‎čeština • ‎русский • ‎中文 • ‎日本語

Překládané řetězce často obsahují značky, které chceme u překladu zachovat tak jak jsou. Zápis takových značek do překladu může být pro překladatele problematický, obzvláště, pokud se při něm pracuje se speciálními znaky, co nejsou moc běžné, a to pak pochopitelně práci překladatele zpomaluje. A zástupné elementy, to usnadňují, protože se překladateli zobrazují u překládané zprávy jako tlačítka, která do překládané zprávy vloží kód, který pak na stránce nahrazuje kódem, který zastupují. Do překladu je lze buď rovnou napsat, nebo na příslušné místo kde se zrovna nalézá kurzor, vložit kliknutím na zobrazené tlačítko.

Pro každou skupinu zpráv existuje instance třídy InsertablesSuggester. Tato třída obsahuje seznam zástupných elementů (třídy Insertable). A každá třída Insertable má tři části:

  1. To co ze zobrazí uživateli
  2. To co se vloží do překladu na pozici kurzoru
  3. A to co se vloží do překladu za pozici kurzoru

Rozšíření Translate má integrovanou třídu MediaWikiInsertablesSuggester. Další "našeptávací" třídy (suggesters) můžete najít v git repozitáři translatewiki.net.

Uživatelské rozhraní

Zástupné elementy jsou zobrazeny na dolním okraji formulářového pole s překladem. Kromě toho, že nabízí možnost rychlého vložení, zároveň upozorňují na to, že jsou v překladu vyznačené kusy kódu, které se budou zobrazovat stejně bez ohledu na zvolený jazyk.

Nastavení

Toto je jednoduchý příklad nastavení našeptávací třídy v YAML syntaxi.

INSERTABLES:
  # pre-bundled insertable
  - class: RegexInsertablesSuggester
    params: "/\$[a-zA-Z0-9]+/"
  # custom insertable
  - class: FreeColInsertablesSuggester

AUTOLOAD:
  FreeColInsertablesSuggester: Suggester.php

Přednastavené / Předpřipravené zástupné elementy

Toto je přehled předpřipravených zástupných elementů.

HtmlTagInsertablesSuggester

Tento zástupný element zobrazí příslušná tlačítka místo HTML tagů, nalezených v překládaném řetězci.

Konkrétně:

  • U překládané zprávy: This <a href="abc">link</a>link takes you to the home page.
  • Našeptávač zobrazí: <a href="abc"></a>

MediaWikiInsertablesSuggester

V tomto případě se zobrazí zástupný element v případě, že kód ve wikitextu MediaWiki odpovídá následujícím zprávám. Zahrnuje našeptávání pro

  • Parametr jako např. $1user volá přes API stránku nápovědy ke zprávě.
  • PLURALS, GENDER, GRAMMAR
  • Našeptávání u HTML značek.

NumericalParameterInsertablesSuggester

Tento zástupný element bude zobrazovat našeptávače pro numerické parametry, jako např. $1, $2, nebo $33

RegexInsertablesSuggester

V tomto případě se zástupné elementy generují na základě řetězců vyhovujících regulárním výrazům.

Konkrétní příklad použití:

  # simple example
  # matches and suggests: $abc
  - class: RegexInsertablesSuggester
    params: "/\$[a-zA-Z0-9]+/"
  # complex example using named captures.
  # matches: [abc](ac) 
  # suggester displayed: [](ac)
  - class: RegexInsertablesSuggester
    params:
      regex: /(?<pre>\[)[^]]+(?<post>\]\([^)]+\))/
      display: $pre $post
      pre: $pre
      post: $post

Parameter description,

  • regex - The regex to use for identifying insertables. Mandatory.
  • display - What to show to the user. Not mandatory, defaults to matched value.
  • pre - What to insert before selection. Not mandatory, defaults to matched value.
  • post - What to insert after selection. Not mandatory, defaults to matched value.

TranslatablePageInsertablesSuggester

Used primarily on translatable pages to provide suggester for variables like $abc.

Jak přidat vlastní zástupné elementy

V případě, že žádný ze zástupných elementů které jsou k dispozici nevyhovuje vašim potřebám, si můžete vytvořit svůj vlastní zástupný element.

Toto je příklad, jak přidat zástupný element, pro zprávy, které jsou ve skupině: FreeCol. Příslušný soubor v YAML syntaxi vypadá následovně pro zjednodušení je zde uvedena pouze část, která se týká příkladu. The newly added lines are highlighted.

FreeCol.yaml:

---
BASIC:
  id: out-freecol
  label: FreeCol
  description: "A strategy game"
  namespace: NS_FREECOL
  class: FileBasedMessageGroup
 
FILES:
  class: JavaFFS
  sourcePattern: %GROUPROOT%/freecol/data/strings/FreeColMessages_%CODE%.properties
  definitionFile: %GROUPROOT%/freecol/data/strings/FreeColMessages.properties
  targetPattern: freecol/data/strings/FreeColMessages_%CODE%.properties

INSERTABLES:
  - class: FreeColInsertablesSuggester

AUTOLOAD:
  FreeColInsertablesSuggester: Suggester.php

Suggester.php:

class FreecolInsertablesSuggester {
	public function getInsertables( $text ) {
		$insertables = array();

		$matches = array();
		// Vyhledej proměnnou ve formátu %name%
		// Jde o stejný regulární výraz, s jakým pracuje Checker.php
		preg_match_all( '/%[a-zA-Z_]+%/', $text, $matches, PREG_SET_ORDER );
		$new = array_map( function( $match ) {
			// $match[0] musí odpovídat uvedenému regulárnímu výrazu a víc nás nezajímá
			// Pokud chceme aby kurzor zůstal až za vloženým kódem, musíme to celé uzavřít do pole "pre".
			return new Insertable( $match[0], $match[0] );
		}, $matches );

		return $insertables;
	}
}

Parametry zástupného elementu jsou pak tyto:

class Insertable {
        /**
         * @param string $display Co se má zobrazit uživateli
         * @param string $pre Co se má vložit před vybraný řetězec
         * @param string $post Co se má vložit za vybraný řetězec
         */
        public function __construct( $display, $pre = '', $post = '' ) {
                $this->display = $display;
                $this->pre = $pre;
                $this->post = $post;
        }
[...]
}