【问题标题】:What are the possible ways to translate in MediaWiki from "backend", without an extension?在没有扩展的情况下,从“后端”翻译 MediaWiki 的可能方法是什么?
【发布时间】:2020-01-01 09:06:21
【问题描述】:

我有一个 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 中从“后端”进行翻译的可能方式有哪些?

【问题讨论】:

    标签: php html forms translation mediawiki


    【解决方案1】:

    本地化系统在后端 (php) 以及 MediaWiki 的前端 (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 中编辑页面 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,所以让我们创建一个新的语言文件:

    he.json

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

    如果您随后打开联系页面,消息键 my-fancy-key 应该被翻译成英语 Default 和希伯来语相同(至少基于谷歌翻译)。这是一种更稳定的添加自定义翻译的方式,但是,您现在还需要将密钥翻译成您自己想要支持的语言。如果密钥未翻译成用户选择的语言,则使用默认语言英语。

    【讨论】:

    • 或者,您可以使用 wiki 页面 (MediaWiki:<message key>) 来存储翻译。如果翻译由社区维护,则更容易处理。
    • @Tgr 好点,我没想到,真的不知道,为什么。我也会把它放在我的答案中:)
    • 您好@Florian,感谢您的回答。我邀请您阅读我的编辑建议,在该建议中,我试图使答案不那么“沉重”(当然根据我个人的感觉)来阅读。我试图缩短一些措辞并添加一些标记。再次感谢,
    • 如果我误解了到目前为止我读到的地方,我很抱歉(真的只有我在编辑中建议的两章吗?)我必须去睡觉了;我明天应该尽快参加这个会议......
    • 基本上:是的,有两种可能的方式来做你想做的事,我接受了编辑,让它更容易一点,是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2019-02-10
    相关资源
    最近更新 更多