在MediaWiki中从“后端”进行翻译而不进行扩展的可能方法是什么?

时间:2020-01-01 09:06:21

标签: php html forms translation mediawiki

我有一个MediaWiki 1.33.0网站,只有一个扩展名→ContactPage,通过它我可以有一个简单的联系表。

使用HTMLForms template engine(其中写有default form-template for ContactPage),我扩展了默认形式以包括选择菜单

我的问题

选择列表数组键和此选择菜单的值在LocalSettings.php中用英语编写,但我的网站不是主要使用LTR英文,而是使用RTL希伯来语,我希望它们出现最终用户使用我网站的母语。

我自己的代码模式

wfLoadExtension( 'ContactPage' );
$wgContactConfig['default'] = array(
    'RecipientUser' => 'Admin', // Must be the name of a valid account which also has a verified e-mail-address added to it.
    'SenderName' => 'Contact Form on ' . $wgSitename, // "Contact Form on" needs to be translated
    'SenderEmail' => null, // Defaults to $wgPasswordSender, may be changed as required
    'RequireDetails' => true, // Either "true" or "false" as required
    'IncludeIP' => false, // Either "true" or "false" as required
    'MustBeLoggedIn' => false, // Check if the user is logged in before rendering the form
    'AdditionalFields' => array(
        'omgaselectbox' => [
            'class' => 'HTMLSelectField',
            'label' => 'Select an option',
            'options' => [
                'X' => 'X',
                'Y' => 'Y',
                'Z' => 'Z',
            ],
        ],
    ),
        // Added in MW 1.26
    'DisplayFormat' => 'table',  // See HTMLForm documentation for available values.
    'RLModules' => array(),  // Resource loader modules to add to the form display page.
    'RLStyleModules' => array(),  // Resource loader CSS modules to add to the form display page.
);

可能的解决方案

1):用希伯来语写选择列表数组键和值(由于LTR-RTL冲突,可能有点混乱):

'options' => [
    'ס' => 'ס',
    'ט' => 'ט',
    'ז' => 'ז',
],

2)通过类似的代码翻译客户端JavaScript中的英语选择列表数组键和值:

document.getElementById('select').selectedIndex = 0;
document.getElementById('select').value = 'Default';

我的愿望

我希望有序的后端方法,如果有的话,最好不要扩展

In this discussion是MediaWiki社区的成员,建议使用system message transclution,但对我来说不清楚的章节;我不明白这是什么意思,这对我的情况有什么帮助。

我的问题

在没有扩展名的情况下,从“后端”到MediaWiki的翻译有哪些可能的方法?

1 个答案:

答案 0 :(得分:1)

在MediaWiki的后端(php)和前端(JavaScript)部分中,本地化系统运行正常,→与后端保持最佳关系是因为它最小化。

假设您采用仅后端的方法:

使用预定义的字符串进行翻译

如果所需的翻译已存在于MediaWiki中(例如,在表单的另一页上),则可以“简单地”重新使用该键。因此,假设您当前的其他选择字段定义如下:

'Select' => [
    'type' => 'select',
    'options' => [
        'The english message' => 'value'
    ]
],

然后,您将其更改为以下内容:

'Select' => [
    'type' => 'select',
    'options-messages' => [
        'the-message-key' => 'test'
    ]
],

请考虑将options更改为options-messages键。
另外:将密钥the-message-key更改为要重用的消息密钥。

如果您知道使用消息/字符串的页面,则可以使用GET选项uselang和值qqx打开该页面,以查看消息密钥。示例:如果在登录页面上使用了字符串,只需使用https://example.com/wiki/Special:Userlogin?uselang=qqx打开登录页面即可显示该页面上使用的所有消息键。

但是,这样做时会出现一个警告:通常不建议重用现有的消息键,尤其是在其他页面上使用它们时。在考虑到特定上下文的情况下,将键翻译成数百种语言。这也可能意味着在联系页面上使用字符串/消息时,特定语言的翻译不适合。因此,我建议使用下面的第二个选项。

没有预定义字符串的翻译

通常,这将通过扩展来完成,扩展可以提供一个特定的目录,该目录用于保存带有消息密钥转换的JSON文件。但是,当您“只是”自定义扩展名时,您需要一种方法来输入密钥的翻译。

因此,首先让我们从上方接管更改。将您的选择字段定义更改为:

'Select' => [
    'type' => 'select',
    'options-messages' => [
        'my-fancy-key' => 'test'
    ]
],

现在,有两种方法可以翻译密钥:

在Wiki上

通过将消息保存在Wiki上,只需编辑Wiki中的相应页面即可轻松更改消息。在我们的示例中,让我们将密钥翻译为英语和希伯来语:

英语:编辑Wiki中的页面MediaWiki:My-fancy-key并添加所需的文本。

希伯来语:在Wiki中编辑页面MediaWiki:My-fancy-key/he,然后添加所需的文本。

作为已部署代码的一部分

我们需要使用JSON文件注册目录以翻译这些消息。即使没有创建扩展名,我们也使用与扩展名相同的配置变量$wgMessagesDirs。将以下行添加到您的LocalSettings.php中:

$wgMessagesDirs['ContactPageCustomization'] = __DIR__ . '/customContactPage';

现在,在MediaWiki安装目录的根文件夹中创建一个目录customContactPage,并放入以下文件,其中包含以下内容:

en.json

{
    "my-fancy-key": "Default"
}

如果要翻译成另一种语言,请使用要翻译成的语言代码创建一个新文件。希伯来语应该是他,所以让我们创建一个新的语言文件:

he.json

{
    "my-fancy-key": "ברירת מחדל"
}

如果您随后打开联系页面,则应将消息键my-fancy-key转换为英语Default并使用希伯来语(至少基于Google Translate)。这是添加自定义翻译的一种更稳定的方法,但是,您现在还需要注意将键翻译成自己想要支持的语言。如果没有将密钥翻译成用户选择的语言,则使用默认语言英语。