From Fedora Project Wiki
m (Update translations)
mNo edit summary
Line 120: Line 120:
[[File:Editor.png|800px]]
[[File:Editor.png|800px]]


1. 搜索
1. Search(搜索 )


直接在搜索框中输入相关名称或选择筛选来进行搜索。 例如,如果你只想显示自己修改的字符串,请选择“last-modified-by”并输入你的用户名。
直接在搜索框中输入相关名称或选择筛选来进行搜索。 例如,如果你只想显示自己修改的字符串,请选择“last-modified-by”并输入你的用户名。
Line 126: Line 126:
[[File:filter terms.png|600px]]
[[File:filter terms.png|600px]]


2. 文字简介
2. String details(文字简介)


允许你查看特定源文本的详细信息,包括注释。
允许你查看特定源文本的详细信息,包括注释。


3. 筛选
3. Filtering(筛选)


字符串可以按状态筛选:Incomplete, Complete and Invalid(未完成,完成和无效)(包含警告或错误)。
字符串可以按状态筛选:Incomplete, Complete and Invalid(未完成,完成和无效)(包含警告或错误)。
例如,要显示所有未翻译(空),模糊(草稿)和拒绝的字符串,请选中“Incomplete(未完成)”框。
例如,要显示所有未翻译(未完成),草稿和无效的字符,请选中“Incomplete(未完成)”框。
仅显示特定类型的未完成符串,请选中相应的框,例如 Fuzzy(模糊)。
仅显示特定类型的未完成符串,请选中相应的框,例如 Fuzzy(草稿)。


[[File:Incomplete2.png|600px]]
[[File:Incomplete2.png|600px]]




4. 从源语言复制消息
4. Copy message from source language(从源语言复制消息)


当源文本包含标签,数字或产品名称时应与需要翻译的语言保持一致,此功能非常有用。
当源文本包含标签,数字或产品名称时应与需要翻译的语言保持一致,此功能非常有用。


5. 个人资料图标
5. Profile icon(个人资料图标)


单击此图标可注销或访问仪表盘。
单击此图标可注销或访问仪表盘。
Line 149: Line 149:
仪表盘的底部显示你的活动状态,即你最后翻译的文件的时间和位置。
仪表盘的底部显示你的活动状态,即你最后翻译的文件的时间和位置。


6. 文档列表
6. Document list(文档列表)


单击返回此项目的文档列表
单击返回此项目的文档列表


7. 编辑器
7. Editor(编辑器)


This button allows you to revert to the editor from any other page you are in, e.g. from the Project-wide Search & Replace page.
This button allows you to revert to the editor from any other page you are in, e.g. from the Project-wide Search & Replace page.


8. Project-wide Search & Replace
8. Project-wide Search & Replace(整个项目的搜索与替换)


Use this option to search and replace specific terms or phrases throughout the whole file.
使用此选项可搜索并替换整个文件中的具体词或短句。
To do so:
操作如下:
Enter a term in the search box, set the search filter “search target”, and check the “Case sensitive” case if applicable.
在搜索框中输入一个词,设置搜索筛选“search target(搜索目标)”,并检查“Case sensitive(区分大小写)”的情况(如果适用)。
In the second text box, enter the term you would like to use instead. Then either check “Select all” or select the string(s) you would like to apply this change to and click “Replace” to apply your changes.
在第二个文本框中,输入你要使用的词语。 然后选中“Select all(全选)”或选择要应用此更改的文字,然后单击“Replace(替换)”更改。


9. Available Keyboard Shortcuts
9. Available Keyboard Shortcuts(键盘快捷键)


From the text editor page, click this button to view a list of all the shortcuts available.
在文本编辑器页面中,单击此按钮可查看所有可用快捷键的列表。


10. Notification
10. Notification(通知)


Click on this button to view the latest notifications, including the date, row number, id number of each modified string.
单击此按钮可查看最新通知,包括每个已修改文字的日期,行号,ID号。


11. Chat room
11. Chat room(群聊)


Use this function to interact with other translators
使用此功能可与其他翻译人员进行交流


12. Options
12. Options(设置)


This function allows you to modify a few options in order to customize your translating experience.
此功能允许你修改自定义修改默认选项。
For example, check the “Enter key saves immediately” box to use the Enter key to save strings.
例如,选中“Enter key saves immediately(立即输入密钥保存)”框以使用Enter键保存字符串。


[[File:Options.png|300px]]
[[File:Options.png|300px]]




13. Validation options
13. Validation options(验证设置)


This page allows you to select different validation options:
此页面允许你选择不同的验证设置:


- HTML/XML tags: check that html/xml tags are consistence between the source and target text.
- HTML/XML tags:html/xml标签是检查源文本和目标文本之间是否一致。


- Java variables: check that java style ({x}) variables are consistent.
- Java variables:检查 java style ({x}) 变量是否一致.


- Leading/trailing newline (\n): check for consistent leading and trailing newline (\n).
- Leading/trailing newline (\n)(行首、行尾的换行符): 检查行首和行尾随换行符是否一致 (\n).


- Positional printf (XSI extension): check that positional printf style (%n$x) variables are consistent.
- Positional printf (XSI extension): 检查位于printf style (%n$x) 变量是否一致.


- Printf variables: check that printf style (%x) variables are consistent.
- Tab characters (\t)(制表符):检查源文件与目标是否具有相同数量的制表符。


- Tab characters (\t): check whether source and target have the same number of tabs.
- XML entity reference: 检查整个XML的标记是否完整。


- XML entity reference: check that XML entity are complete.
14. Save as translated(保存为已翻译)


保存可以通过单击此图标,或者单击旁边的文字,在或者按Ctrl + Enter或仅按Enter键(如果在编辑器选项中选中“Enter key saves immediately(立即保存输入键)”)来完成保存(参见10.)。


14. Save as translated
15. Save as fuzzy(保存为草稿)


Saving can either be done by clicking on this icon, clicking inside another string or by pressing Ctrl + Enter or the Enter key only (if the box “Enter key saves immediately” is checked in the Editor options (see 10.))
你可以使用此按钮将当前文字保存为草稿,并设置它需要进一步的工作。


15. Save as fuzzy
16. Cancel(取消)


You can use this button to set the current string as draft and indicate it needs further work.
如果要取消更改,请使用此按钮。


16. Cancel
17. History(历史记录)


Use this button if you wish to cancel your changes.
此按钮将跳转到翻译历史页面,你可以:


17. History
- 发表评论


This button takes you to a Translation History page allowing you to:
- 查看此特定文字的翻译历史记录,包括修改日期和用户名
 
- leave a comment
 
- view the history of the translation for this specific string, including modification dates and user names
 
- compare different versions (simply click on “Compare” for the two strings you wish to compare and click on the “Compare vers. X and X” tab to view the comparison.


- 比较不同的版本,只需点击“Compare(比较)”,查看你要比较的两个字符,然后单击“Compare vers. X and X”选项查看比较。


[[File:Translation history.png|600px]]
[[File:Translation history.png|600px]]


[[File:Translation history 2.png|600px]]
[[File:Translation history 2.png|600px]]


[[File:Translation history 3.png|600px]]
[[File:Translation history 3.png|600px]]


18. Translation memory(翻译历史库)


18. Translation memory
Translation Memory(TM)是一种搜索与当前所选源字符串相等(100%)或类似(<100%)的翻译的工具。
 
The Translation Memory (TM) is a tool that searches for translations that are equal (100%) or similar (<100%) to the currently selected source string.
Matches can be copied to the translation text box and used as-is or modified before saving. To copy TM matches to the selected text box, click the “Copy” button, or use Ctrl+Alt+1 to Ctrl+Alt+4 keyboard shortcuts to copy the first to fourth match in the list.
Matches can be copied to the translation text box and used as-is or modified before saving. To copy TM matches to the selected text box, click the “Copy” button, or use Ctrl+Alt+1 to Ctrl+Alt+4 keyboard shortcuts to copy the first to fourth match in the list.
You can also search the TM for other phrases by entering them in the TM text box and clicking “Search”.
你还可以通过在TM文本框中输入并单击“Search”来搜索TM以查找其它短句。


19. Glossary
19. Glossary(词汇表)


If a glossary has been uploaded for your language, each word in the currently selected row will be searched for a glossary entry.
If a glossary has been uploaded for your language, each word in the currently selected row will be searched for a glossary entry.

Revision as of 10:04, 28 February 2019

Fedora 本地化工作指南(新的)

愿景

这个页面,描述了如何加入L10N本地化团队。作为一个新的翻译者,应该如何在Zanta上翻译。

如何成为一个Fedora翻译者

L10n项目显然不仅仅是为了翻译。不过,翻译却不妨成为一个不错的门槛来迈入本地化团队,下面是使您成为翻译者的一些基本步骤:

  1. 创建一个FAS账户
  2. 加入邮件列表
  3. 介绍你自己(您可以在您加入的邮件列表中做这个,并且创建Wiki中的User页面)
  4. 使用您的FAS账户登录Zanta
  5. 寻找适合于您的语言团队并加入

你的自我介绍很重要。 它有机会提高你的操作权限。 你可能还想创建一个Bugzilla帐户来处理用户反映的错误。

创建一个FAS账户

  1. 打开 https://admin.fedoraproject.org/accounts 并点击“New Account(新建账号)”链接。
  2. 填写所有项,然后单击“Sign up(注册)”。 密码将通过电子邮件发送给你,你可以稍后更改密码。
  3. 现在再次访问 https://admin.fedoraproject.org/accounts 并用你的密码登录。
  4. 帐户系统会提醒你CLA未完成。

签署CLA

要开始翻译前,你必须完成贡献者许可协议或CLA。

  1. 访问 https://admin.fedoraproject.org/accounts 并用你在上一过程中获得的用户名和密码登录你的帐户。
  2. 在欢迎页面中,单击完成CLA或转到https://admin.fedoraproject.org/accounts/user/edit。
  3. 如果你尚未提供电话号码和地址的信息,将出现编辑帐户(user_name)页面,你需要填写每一项。否则将显示"Fedora Contributor License Agreement"页面。仔细阅读协议,如果你愿意,请点击我同意。
  4. 现在点击“保存”! 在页面底部保存你的信息。
  5. 出现用户视图页面,CLA项:显示为“CLA 已验证”。
注意
除管理员组外,其他人无法访问电话号码和地址信息。 请参阅 https://fedoraproject.org/wiki/Legal:PrivacyPolicy 上的Fedora隐私政策。 其他任何成员都可以通过访问用户的视图页面显示其他信息。
有关FAS的更多信息
有关Fedora帐户系统的更多详细信息,请参阅 https://fedoraproject.org/wiki/Account_System

加入邮件列表

L10n 邮件列表

注意
在此邮件列表中使用英语
  1. 访问trans邮件列表订阅页面并订阅它。
  2. 在管理员批准之前,你将无法向列表发送邮件。 你将收到一封确认电子邮件,其中包含确认订阅的链接。 单击链接以确认。

你的team(团队)邮件列表

注意
在这个邮件列表中使用你的母语更好
  1. 访问 https://fedoraproject.org/wiki/L10N/Teams 并找到你的语言团队。
  2. 订阅你的语言的邮件列表
邮件列表指南
在发送消息到邮件列表之前,建议你阅读此指南

介绍你自己

  1. https://fedoraproject.org/wiki/User:Username 创建个人页面(可选).
  2. 对你订阅的邮件列表进行简短的自我介绍。 如果你不知道要介绍什么,这里有一个模板:https://fedoraproject.org/wiki/L10N_Self_introduction。

以上两个步骤对于Fedora贡献者相互了解和联系非常有用。 第二步还可以帮助你的语言管理员(协调员)认识你并批准你作为团队的翻译。

使用您的FAS账户登录Zanta

  • 打开https://fedora.zanata.org/,然后单击页面右上角的蓝色“Log In(登录)”按钮。

  • 然后它将跳转到FedOAuth页面,你可以使用你在上一节中注册的FAS帐户和密码登录。

  • 然后,你将被重定向到认证页面,单击“Approve(批准)”。

  • “new user(新用户)”页面会打开。

你应输入你的全名,用户名(FAS用户名)和你的电子邮件地址。 注意:请使用你的真实电子邮件地址,但不要使用你的Fedora项目别名(username@fedoraproject.org)。 完成后,单击“Save(保存)”按钮。 激活邮件将立即发送到你的邮件地址。 请在收件箱中找到邮件,然后打开邮件中显示的激活链接。 然后使用你的FAS用户名和密码登录。 下次登录时,你无需再次执行此步骤。 它只对新用户登录时是必要的。

寻找适合于你的语言团队并加入

  • 访问https://fedora.zanata.org并点击顶部的语言,然后你将看到所有可用的语言(已过期需要登陆后才可查看)。

  • 找到你要翻译的语言,然后单击语言编号。
  • 单击页面左侧的蓝色按钮申请加入团队。

  • 你可以选择你想要的角色,然后单击“Send Message(发送消息)”。 附加消息是可选的。 例子中,我使用南非荷兰语作为下面的截图。

  • 团队管理员(协调员)将收到有关你请求的电子邮件通知。 只要他/她批准你的请求,你将成为团队成员。 但是,管理员(协调员)可能不会批准你的每个角色请求。 换句话说,如果你要求成为翻译,审稿人和协调员,他/她可能只会批准你担任翻译角色。

Translating

使用Zanata在线翻译

寻找你的项目


在Zanata上有三种查找翻译文件的方法:

方法一 : 项目搜索

如果你知道翻译项目的标题,可以通过项目搜索框查找它

然后选择合适的项目来查看可用的翻译版本。

方法二 : 项目主页

单击位于页面顶部的“Projects(项目)”链接,访问“Projects(项目)”页面上的所有项目。 通过单击列表字段名中的箭头,可以按名称,创建日期或当前活动状态对项目表进行排序。

单击项目名称以查看可用于翻译的版本。

方法三 : 用户仪表盘(控制台)

你也可以从用户仪表盘(控制台)访问你的翻译项目。

“Activity(活动)”部分列出了你的所有最新翻译。 如果要查找最近翻译的项目,请通过该列表信息查找项目的名称。 你可以通过单击列表信息中的相关链接文字来访问,文档信息,版本信息或整个项目。

开始翻译


找到并选择项目后,将打开以下编辑器:

1. Search(搜索 )

直接在搜索框中输入相关名称或选择筛选来进行搜索。 例如,如果你只想显示自己修改的字符串,请选择“last-modified-by”并输入你的用户名。

2. String details(文字简介)

允许你查看特定源文本的详细信息,包括注释。

3. Filtering(筛选)

字符串可以按状态筛选:Incomplete, Complete and Invalid(未完成,完成和无效)(包含警告或错误)。 例如,要显示所有未翻译(未完成),草稿和无效的字符,请选中“Incomplete(未完成)”框。 仅显示特定类型的未完成符串,请选中相应的框,例如 Fuzzy(草稿)。


4. Copy message from source language(从源语言复制消息)

当源文本包含标签,数字或产品名称时应与需要翻译的语言保持一致,此功能非常有用。

5. Profile icon(个人资料图标)

单击此图标可注销或访问仪表盘。 仪表盘的右上角显示当前日/周/月翻译的单词/消息/文档的数量。 仪表盘的底部显示你的活动状态,即你最后翻译的文件的时间和位置。

6. Document list(文档列表)

单击返回此项目的文档列表

7. Editor(编辑器)

This button allows you to revert to the editor from any other page you are in, e.g. from the Project-wide Search & Replace page.

8. Project-wide Search & Replace(整个项目的搜索与替换)

使用此选项可搜索并替换整个文件中的具体词或短句。 操作如下: 在搜索框中输入一个词,设置搜索筛选“search target(搜索目标)”,并检查“Case sensitive(区分大小写)”的情况(如果适用)。 在第二个文本框中,输入你要使用的词语。 然后选中“Select all(全选)”或选择要应用此更改的文字,然后单击“Replace(替换)”更改。

9. Available Keyboard Shortcuts(键盘快捷键)

在文本编辑器页面中,单击此按钮可查看所有可用快捷键的列表。

10. Notification(通知)

单击此按钮可查看最新通知,包括每个已修改文字的日期,行号,ID号。

11. Chat room(群聊)

使用此功能可与其他翻译人员进行交流

12. Options(设置)

此功能允许你修改自定义修改默认选项。 例如,选中“Enter key saves immediately(立即输入密钥保存)”框以使用Enter键保存字符串。


13. Validation options(验证设置)

此页面允许你选择不同的验证设置:

- HTML/XML tags:html/xml标签是检查源文本和目标文本之间是否一致。

- Java variables:检查 java style ({x}) 变量是否一致.

- Leading/trailing newline (\n)(行首、行尾的换行符): 检查行首和行尾随换行符是否一致 (\n).

- Positional printf (XSI extension): 检查位于printf style (%n$x) 变量是否一致.

- Tab characters (\t)(制表符):检查源文件与目标是否具有相同数量的制表符。

- XML entity reference: 检查整个XML的标记是否完整。

14. Save as translated(保存为已翻译)

保存可以通过单击此图标,或者单击旁边的文字,在或者按Ctrl + Enter或仅按Enter键(如果在编辑器选项中选中“Enter key saves immediately(立即保存输入键)”)来完成保存(参见10.)。

15. Save as fuzzy(保存为草稿)

你可以使用此按钮将当前文字保存为草稿,并设置它需要进一步的工作。

16. Cancel(取消)

如果要取消更改,请使用此按钮。

17. History(历史记录)

此按钮将跳转到翻译历史页面,你可以:

- 发表评论

- 查看此特定文字的翻译历史记录,包括修改日期和用户名

- 比较不同的版本,只需点击“Compare(比较)”,查看你要比较的两个字符,然后单击“Compare vers. X and X”选项查看比较。

18. Translation memory(翻译历史库)

Translation Memory(TM)是一种搜索与当前所选源字符串相等(100%)或类似(<100%)的翻译的工具。 Matches can be copied to the translation text box and used as-is or modified before saving. To copy TM matches to the selected text box, click the “Copy” button, or use Ctrl+Alt+1 to Ctrl+Alt+4 keyboard shortcuts to copy the first to fourth match in the list. 你还可以通过在TM文本框中输入并单击“Search”来搜索TM以查找其它短句。

19. Glossary(词汇表)

If a glossary has been uploaded for your language, each word in the currently selected row will be searched for a glossary entry.

Translating offline

There are two methods that allow you to translate offline:


Method 1: Zanata-cli


1. Installing zanata-cli

Go to http://zanata.org/help/

Under “Cli” - Select “Installing the client ”

You can install the client in two ways:


  • install using DNF for Fedora 22 and later versions or with YUM if you are using older release by running the following command:
sudo dnf install zanata-client
sudo yum install zanata-client
  • or install with Ivy:

Click on the “Zanata Ivy Client on github” link

Run the appropriate command depending on the system you use (Fedora, RHEL or other systems)

Once Ivy installed, click the zanata-cli file.

Copy and paste the content of the executable file into your text editor and save as “zanata-cli”.


2. Configuring the client


Configuring the client requires two actions:


2.1 Configuring the user:


Start by creating or opening zanata.ini in ~/.config/ with your preferred text editor.

Two steps:


2.1.1. Creation of an API key


From your Zanata account, go to your dashboard and click “Settings”.



Then select Client



If you do not have one, generate an API key.

2.1.2. Copy the contents of the text-box labeled “Configuration [zanata.ini]” into your previously created zanata.ini file and save the file.


2.2 Configuring the project:

To add project-version configuration to your project directory, navigate to your translation project in Zanata, for example:

Fedora Installation Guide - f20 - select your locale - on the upper right corner, click the arrow and select “Download config file”



Save the zanata.xml file in your preferred location.


3. Downloading the files to your machine

Before running the following command in your command-line, make sure you are in the directory containing the zanata.xml file.

Run:

zanata-cli pull -s src -t trans -l <language code> --pull-type both

The source and translated files will be created into src (source) and trans (translated) files in your directory.

You can now open your files with your preferred translation editor and translate your project.


4. Uploading the files to Zanata

To push the translated files back to Zanata, run the following command:

zanata-cli push -s src -t trans -l <language code> --push-type trans

Your translation has now been pushed back to Zanata and the TM has been updated with your changes.


Method 2: Through the User Interface

Login to https://translate.zanata.org/

Search for your project, for example the Fedora Installation Guide.

Select your language

To download the entire project, click on the arrow located in the top right corner of the page (next to "sort") and click "Download All (zip)".



To download one file only, click on the arrow located on the left of the filename, and select "Download Translated [.po]."

Save the file to your preferred location.

Translate the file.

Once finished, upload the file(s) back to Zanata, selecting “Upload translation”.

Note: Although it is possible to download a whole project, the upload is only possible file by file, by clicking the arrow located on the left of the filename, and selecting “Upload translation”.

Proofreading

It is very difficult for translators to find a typo or minor mistake within numbers of translated strings. So proofreading is very important. General speaking, proofreading only refers to the translated strings. However PO file plays a big role through L10n and i18n workflows. So translators should keep the PO file validate during translation process, so other translators and maintainers can use them without any problem.

PO File Validation

Online translation editor provided by Zanata has a validation feature to check each string. If you prefer translating online, this feature will help you much. The Validation options locates at the right side of the online editor. It provides several validation options for checking.

In this example, ending tag

</command>

is written as

</comd>

, the editor raises warnings, suggests that there exists unexpected tag. When you find warnings like this during online translation, you'd better double check your translation.

If you prefer translating offline, you should always check your file's validity before you submit. The basic command to do this is:

msgfmt -cvo /dev/null po_file_to_check.po

Make sure that there is no error message.

Translation Proofreading

Validation tool is only useful to check the validities of tags, variables or something that is related to coding language. You can't expect it to check your real translated strings.

For example, I mistakenly translated English word "He" to Chinese "它"(The right one is "他"), the validation tool will not warning you that there exists mistake. It's your goal and responsibility to make the translation without mistake.

Read the strings you have translated is a good habit for proofreading.

Testing

In fact, the directory

/usr/share/locale/your_LOCALE/LC_MESSAGES/

is the home of most of the localised files of system components and softwares.

So generally, if you want to the test translation of a software or a system component, the simplest way is:

  • Backup the original file first,
    sudo cp /usr/share/locale/your_LOCALE/LC_MESSAGES/example.mo /usr/share/locale/your_LOCALE/LC_MESSAGES/example.mo.old
  • Put the new mo file into the directory,
    sudo msgfmt -o new_example.po /usr/share/locale/your_LOCALE/LC_MESSAGES/new_example.mo
  • Run that software/component/command.

(A demo is going to be made in future. An old demo is available here: https://www.youtube.com/watch?v=Hi-7QZrUR3k)

Sections below introduce two more advanced methods for testing.

Using permalinks

One of the benefits of using the Zanata's translation platform, it's the ability to pull a translation from a permalink and then you can install it on your system by using few commands. To obtain a permalink:

  • go to translation project
  • select the version, if there is more than one
  • select the language
  • click the Documents(YOUR_LOCALE) link in navigation bar
  • copy the permalink (.po) in actions column

Once you have the permalink, you can test the translation on your system by running the following command:

Note
We use 'ca' as locale, and anaconda as the component for test in this example.
su -c 'mv /usr/share/locale/ca/LC_MESSAGES/anaconda.mo /user/share/locale/ca/LC_MESSAGES/anaconda.mo.old; \
msgfmt <(curl -s https://fedora.zanata.org/rest/file/translation/anaconda/f23-branch/ca/po?docId=po%2Fanaconda &> /dev/stdout)\
 -o /usr/share/locale/ca/LC_MESSAGES/anaconda.mo'

Build a rpm with permalinks and fedpkg

Sometimes, it is not so easy to simple msgfmt the po file and we should build a rpm including the translations to test. There is an example below:

su -c ‘dnf install -y fedpkg fedora-packager rpmdevtools’
fedpkg clone -a -B sssd
cd sssd/f23
su -c 'dnf builddep -y sssd.spec'
fedpkg prep
export version=1.13.0
cp -rp sssd-$version sssd-${version}p
curl -s https://fedora.zanata.org/rest/file/translation/sssd/master/ca/po?docId=po%2Fsssd > sssd-${version}p/po/ca.po
curl -s https://fedora.zanata.org/rest/file/translation/sssd/master/ca/po?docId=src%2Fman%2Fpo%2Fsssd-docs > sssd-${version}p/src/man/po/ca.po
diff -urN sssd-$version sssd-${version}p > my.patch

Edit sssd.spec file for including the patch (1st. Patch999: my.patch at the top; 2nd. %patch999 -p1 in the %prep section, just after %setup -q. The last step -2nd- it's not required if there is a for p in %patches ; do):

...
### Patches ###
Patch9999: my.patch
...

...
%prep
...
%setup -q
%patch9999 -p1
...

Build & install the patched rpm:

fedpkg local
su -c 'dnf install --nogpgcheck */*.rpm'

Credits

The following people contributed to this guide:

However some of the contents in this guide are referenced from the Fedora Localization Guide for Transifex platform indirectly or directly, so the writers should be thanked here too.