Help:Extension:Translate/挿入要素

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 100% complete.
Other languages:
Deutsch • ‎English • ‎français • ‎čeština • ‎русский • ‎中文 • ‎日本語

翻訳対象の文字列は、翻訳結果でもそのまま保持されるべきマークアップを含むことがよくあります。 マークアップは特殊な文字を多く含むため、タイプするのが低速・困難になる場合があります。 Insertable (インサータブル、挿入要素) は、マークアップの断片であり、翻訳者にはボタンやその他のインターフェイス要素として表示されます。 ボタンをクリックすることで、翻訳内の現在のカーソルの位置に、マークアップの断片が挿入されます。

各メッセージ群は1つの InsertablesSuggester を保持できます。 このクラスは Insertable の一覧の生成を担当します。 各 Insertable は以下の3つの部分で構成されます:

  1. 利用者に表示するもの
  2. 翻訳内のカーソルの位置の前に何を挿入するか
  3. 翻訳内のカーソルの位置の後ろに何を挿入するか

Translate 拡張機能には組み込みの $MediaWikiInsertableSuggester が同梱されています。 他の種類のコンテンツの Suggester は translatewiki.net の git リポジトリにあります。

ユーザーインターフェイス

Insertable は翻訳のテキストエリアの下部に表示されます。 これにより、どの言語でも不変のマークアップの断片を容易に挿入できるようになります。

コードの例

既存のファイル ベースのメッセージ群である「FreeCol」に Insertable 対応を追加する例を示します。 YAML ファイルは簡潔にするため一部省略されています。 新たに追加された行が強調されています。

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

CHECKER:
  class: FreeColMessageChecker
  checks:
    - FreeColEscapesCheck
    - FreeColVariablesCheck

INSERTABLES:
  class: FreeColInsertablesSuggester

AUTOLOAD:
  FreeColMessageChecker: Checker.php
  FreeColInsertablesSuggester: Suggester.php

Suggester.php:

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

		$matches = array();
		// %name% の形式の変数を見つける。
		// これは Checker.php での正規表現と同一。
		preg_match_all( '/%[a-zA-Z_]+%/', $text, $matches, PREG_SET_ORDER );
		$new = array_map( function( $match ) {
			// $match[0] は完全一致であり、部分一致は一切使用しない。
			// 挿入した位置の末尾にカーソルを設定したいため、"pre" フィールドに文字列全体を設定する。
			return new Insertable( $match[0], $match[0] );
		}, $matches );

		return $insertables;
	}
}

Insertable のパラメーターは以下の通りです:

class Insertable {
        /**
         * @param string $display 利用者に表示するもの
         * @param string $pre 選択の前に挿入するもの
         * @param string $post 選択の後ろに挿入するもの
         */
        public function __construct( $display, $pre = '', $post = '' ) {
                $this->display = $display;
                $this->pre = $pre;
                $this->post = $post;
        }
[...]
}