This page is a translated version of the page Help:Extension:Translate/Insertables and the translation is 90% complete.
Outdated translations are marked like this.

可翻译的字符串通常包含标记,在翻译中应按原样保留。 由于特殊字符是共通的,输入这种标记可能会很慢,而且很困难。 可插入的是一块标记,它作为一个按钮或其他界面元素呈现给翻译者。 点击这个按钮,就可以把这段标记插入到当前光标位置的翻译中。

每个信息组可以有一个InsertablesSuggester这个类负责生成一个Insertable的列表。 每个Insertable都有三个部分:

  1. 要向用户显示的内容
  2. 在翻译中,在光标位置之前插入的内容或替换所选内容的内容。
  3. 在翻译中光标位置之后插入的内容

翻译Extension内置了MediaWikiInsertablesSuggester其他类型内容的Suggesters可以在translatewiki.net git资源库中找到。

用户界面

 
可插入物显示在翻译文本区的底部。 它们为插入不因语言而异的标记片段提供了快速通道。

配置

下面是YAML文件中的一个设置变更的样本。

INSERTABLES:
  # 预先捆绑的可插入式
  - class: RegexInsertablesSuggester
    params: "/\$[a-zA-Z0-9]+/"
  # 自定义可插入
  - class: FreeColInsertablesSuggester

AUTOLOAD:
  FreeColInsertablesSuggester: Suggester.php

预先提供的/捆绑的可插入物

以下是捆绑的可插入物清单。

HtmlTagInsertablesSuggester

这个可插入项将显示在源字符串中发现的任何HTML标签的建议。

例如:

  • 信息: This <a href="abc">link</a>link takes you to the home page.
  • 建议者显示: <a href="abc"></a>

MediaWikiInsertablesSuggester

这个插件将显示与MediaWiki有关的wikitext信息的各种建议。 其中包括对以下方面的建议:

  • $1user这样的参数存在于API帮助信息中。
  • PLURALS, GENDER, GRAMMAR
  • 对HTML标签的建议。

NumericalParameterInsertablesSuggester

这种可插入的方式将显示数字参数的建议,如 $1, $2, $33$2、或$33

RegexInsertablesSuggester

这个可插入文件是一个通用的可插入文件,可以用来显示基于自定义正则表达式的建议。

例如:

  # 简单的例子
  # 匹配和建议: $abc
  - class: RegexInsertablesSuggester
    params: "/\$[a-zA-Z0-9]+/"
  # 使用命名捕获的复杂例子。
  # 匹配: [abc](ac) 
  # 建议者显示: [](ac)
  - class: RegexInsertablesSuggester
    params:
      regex: /(?<pre>\[)[^]]+(?<post>\]\([^)]+\))/
      display: $pre $post
      pre: $pre
      post: $post

参数描述,

  • regex – 用来识别可插入物的重组词。 是强制性的。
  • display – 向用户展示的內容。 非强制性的,默认为匹配的值。
  • pre – 在选择之前插入的內容,或在post仍为空时替换选择。 非强制性的,默认为匹配的值。
  • post – 在选择之後插入的內容。 非强制性的,默认为匹配的值。

TranslatablePageInsertablesSuggester

主要用于可翻译的页面,为$abc等变量提供提示器。

UrlInsertablesSuggester

This insertable finds URLs (that are normally unchanged in translations) and suggests them for insertion.

添加一个自定义的可插入式

如果现有的可插入物不足以满足你的要求,可以添加自定义可插入物。

下面是一个关于为现有的基于文件的信息组添加可插入信息支持的例子:FreeCol。 该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

INSERTABLES:
  - class: FreeColInsertablesSuggester

AUTOLOAD:
  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;
	}
}

給可插入式的参数是:

class Insertable {
        /**
         * @param string $display 向用户展示的内容
         * @param string $pre 在选择之前插入的內容,或在$post仍为空时替换选择。
         * @param string $post 在选择之後插入的內容
         */
        public function __construct( $display, $pre = '', $post = '' ) {
                $this->display = $display;
                $this->pre = $pre;
                $this->post = $post;
        }
[...]
}