Help:扩展:翻译/插入式
可翻译的字符串通常包含标记,在翻译中应按原样保留。 由于特殊字符是共通的,输入这种标记可能会很慢,而且很困难。 可插入的是一块标记,它作为一个按钮或其他界面元素呈现给翻译者。 点击这个按钮,就可以把这段标记插入到当前光标位置的翻译中。
每个信息组可以有一个InsertablesSuggester
。
这个类负责生成一个Insertable
的列表。
每个Insertable
都有三个部分:
- 要向用户显示的内容
- 在翻译中,在光标位置之前插入的内容或替换所选内容的内容。
- 在翻译中光标位置之后插入的内容
翻译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;
}
[...]
}