翻译

如果你想知道,请阅读这篇指南

  • 如何让你的插件在其他语言中可用
  • 如何将您对Matomo Core的贡献转化为其他语言

最基本的

Matomo有50多种语言版本,并有许多翻译版本。核心本身为“访客”和“帮助”等词提供了一些基本的翻译。它们存储在目录中/朗.此外,每个插件都可以为该插件中使用的词汇提供自己的翻译。它们位于/ plugins / * / lang.在这些目录中,您将为每种语言找到一个JSON文件。每个语言文件依次由属于一个组的令牌组成。每一种语言都有一个主文件/朗目录可以由Matomo用户选择。

{"MyPlugin": {"BlogPost": "Blog post", "MyToken": "My translation", "InteractionRate": "InteractionRate", " my段落withalink ": "此翻译文本%1$s使用%2$s参数。"}}

组通常表示插件的名称,在本例中为“MyPlugin”。在这个组中,所有的标记都列在左边,相关的翻译列在右边。

翻译后的文本条目允许包含sprintf参数,例如:"翻译后的文本使用了%s参数"翻译后的文本%1$s使用%2$s参数。.每个翻译函数将接受传递给的额外参数sprintf用文字。

构建翻译密钥

稍后你会看到,要真正翻译一个单词或句子,你需要知道相应的翻译键。这个键是通过组合一个组和一个用下划线分隔的标记来构建的。例如,您可以使用密钥MyPlugin_BlogPost获取“博客文章”的翻译。定义一个新键就像在“MyPlugin”组中添加一个新条目一样简单。

提供默认翻译

为了用翻译后的文本替换键,Matomo将在JSON文件中查找当前语言。如果找不到条目,Matomo将默认使用英语翻译。因此,您应该始终为文件中的所有键提供默认的英文翻译en.json(即编写MyPlugin / lang / /插件/ en.json).

重用翻译

如前所述,Matomo有很多译本。您可以并且应该重用它们,但是您应该知道将来可能会删除或重命名翻译键。也有可能是在最近的版本中添加了一个翻译键,因此在旧版本的Matomo中不可用。我们目前没有宣布任何这样的变化。尽管如此,99%的翻译键不会改变,因此重用现有的翻译通常是个好主意。特别是当你或你的公司无法提供这些服务的时候。要查找任何现有的翻译键,请转到设置=>翻译搜索在你的Matomo安装。选项时,才会出现菜单项发展模式启用。

不要试图减少翻译键的数量

有时你会重复翻译选择网站而且选择用户您可能更倾向于使用翻译键%年代为进行翻译,然后传递不同的词为替换者喜欢翻译('选择%s', '站点')而且翻译('选择%s', '用户').我们建议不要这样做,因为这可能会导致翻译不好的文本。例如,在其他语言中可能有许多不同的词(如der而且达斯在德国)。使用大写和小写也可能因语言而异。因此,我们建议不要尝试使用占位符来减少翻译键的数量,而是为每个句子使用一个翻译键。

PHP翻译

要在PHP中翻译文本,请使用Piwik:翻译()函数。只需传递任何现有的翻译键,您就会得到当前用户语言的翻译文本。如果当前语言不存在,则返回英文翻译。例如:

$translatedText = Piwik::translate('MyPlugin_BlogPost');

$translatedText = Piwik::translate(' myplugin_my段落withalink ', ['', '']);// "我的段落有一个%1$slink%2$s."

在Twig模板中的翻译

要翻译Twig模板中的文本,请使用翻译过滤器。例如,

{{'MyPlugin_BlogPost'|translate}}

{{“MyPlugin_MyParagraphWithALink”|翻译(“< a href = " //www.hju8.com " > ', ' < / > ')}}

JavaScript翻译

在浏览器中翻译文本比在服务器上翻译文本稍微复杂一些。浏览器无法访问翻译,我们也不希望仅仅为了翻译几行文本就把每个翻译文件都发送给每个用户。

Matomo通过允许插件定义哪些翻译键应该在浏览器中可用来解决这个问题。然后,它只能将当前语言的翻译发送到浏览器。

要使翻译键在客户端可用,请使用Translate.getClientSideTranslationKeys事件(阅读更多有关事件):

//在MyPlugin.php的公共函数registerEvents(){返回数组('翻译。getClientSideTranslationKeys' => 'getClientSideTranslationKeys');}公共函数getClientSideTranslationKeys(&$translationKeys) {$translationKeys[] = 'MyPlugin_BlogPost';}

要在JavaScript中使用这些翻译,请使用global_pk_translate ()JavaScript函数:

var translatedText = _pk_translate("MyPlugin_BlogPost");

为Matomo贡献翻译

你知道你可以有所贡献吗翻译Matomo吗?如果你想改进现有的翻译,翻译一个缺失的翻译或添加一种新的语言,请访问Matomo webate项目.如果你只是想提出一个快速的改变建议(例如,修复一个你在使用Matomo时注意到的拼写错误),你不需要一个帐户。

获取插件的翻译

只要你在开发一个开源插件托管在GitHub上,您可以与我们联系([translations@www.hju8.com](mailto:translations@www.hju8.com?subject=让我的Matomo插件翻译成其他语言)),以便让Matomo翻译社区翻译您的插件。

在翻译平台中导入插件的字符串

在进行插件的初始设置时,我们将导入您的英语翻译文件(en.json)在你的Github插件库。要将英文字符串的任何更改通知Weblate,需要设置一个webhook使用https://hosted.weblate.org/hooks/github/作为Payload URL,其余设置保持默认值。

如何获取您的插件翻译到您的存储库

只要我们设置好你的插件我们在webate上的Matomo项目,你可以收到一个pull请求,每次翻译更新提交,你可以直接合并到你的源代码,例如在发布之前。

新翻译键的最佳实践

在创建自己的翻译键时,请遵循以下原则:

  1. 重用!如果一个核心插件包含一个你可以使用的翻译,那就使用它。如果有一个你想使用的翻译,但因为它在错误的情况下而不能使用,不要使用像这样的函数lcfirst而且ucfirst因为它不会在所有语言中工作,而是创建一个新的翻译键。
  2. 使用有编号的占位符如果你的文章中需要不止一个。
  3. 简单的HTML (< br >、<我>,< >)可以在翻译键中。其他带有这些属性元素的HTML不应该出现在翻译中。使用占位符,比如% 1 $ s而是在翻译时将HTML作为参数传递。
  4. 考虑添加一个新的翻译字符串,而不是修改现有的翻译字符串。如果更改现有的英文翻译字符串,请记住,通过webate更新其他语言需要一段时间。这意味着英文字符串的现有翻译将保留,直到它们从webate中更新和合并。如果您正在添加或删除占位符,这也会导致问题,因为翻译可能会有错误的占位符数量。

使用有编号的占位符,例如% 1 $ s% 2 $ s,等等,而不是% s使翻译人员可以切换顺序。这对于正确地将其翻译成某些语言可能是必要的。

这条准则对于Matomo Core的贡献比对新插件更重要。

Baidu