如果你想知道,请阅读这篇指南
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中翻译文本,请使用Piwik:翻译()函数。只需传递任何现有的翻译键,您就会得到当前用户语言的翻译文本。如果当前语言不存在,则返回英文翻译。例如:
$translatedText = Piwik::translate('MyPlugin_BlogPost');
或
$translatedText = Piwik::translate(' myplugin_my段落withalink ', ['', '']);// "我的段落有一个%1$slink%2$s."
要翻译Twig模板中的文本,请使用翻译
过滤器。例如,
{{'MyPlugin_BlogPost'|translate}}
或
{{“MyPlugin_MyParagraphWithALink”|翻译(“< a href = " //www.hju8.com " > ', ' < / > ')}}
在浏览器中翻译文本比在服务器上翻译文本稍微复杂一些。浏览器无法访问翻译,我们也不希望仅仅为了翻译几行文本就把每个翻译文件都发送给每个用户。
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 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请求,每次翻译更新提交,你可以直接合并到你的源代码,例如在发布之前。
在创建自己的翻译键时,请遵循以下原则:
lcfirst
而且ucfirst
因为它不会在所有语言中工作,而是创建一个新的翻译键。< br >、<我>,< >
)可以在翻译键中。其他带有这些属性元素的HTML不应该出现在翻译中。使用占位符,比如% 1 $ s
而是在翻译时将HTML作为参数传递。使用有编号的占位符,例如% 1 $ s
,% 2 $ s
,等等,而不是% s
使翻译人员可以切换顺序。这对于正确地将其翻译成某些语言可能是必要的。
这条准则对于Matomo Core的贡献比对新插件更重要。