SDB:Transifex client usage

跳转至: 导航, 搜索
transifex 是一个社会化翻译网站。我们用来翻译 openSUSE 文档和 openSUSE 软件包的 Summary/Description。这里介绍了如何使用它的命令行客户端大批量上传多个 POT 文件以建立项目,以及后续的管理,更新等。主要供文档小组的成员学习使用。

客户端下载

在 M17N 源的 transifex-client 软件包。

初始化一个项目

网页

由于 transifex 暂不支持在本地创建新项目,所以要去网页端,创建一个新项目。项目的名称就是 project_slug。(他们起的名字很怪)

本地

先进入到一个项目的带有 POT 和 PO 目录的文件夹(这个可以自己调整)

初始化

输入 tx init 以初始化。

9:36:50 marguerite at ~/Public/opensuse-manuals/zh_CN/transifex-opensuse-manuals master⚡ say:
卐 tx init
Creating .tx folder...
Transifex instance <wiki>[https://www.transifex.com]</nowiki>: 回车
Creating skeleton...
Creating config file...
No entry found for host https://www.transifex.com. Creating...
Please enter your transifex username: doublechou
Password: 
Updating /home/marguerite/.transifexrc file...
Done.

需要注意的是,[https://www.transifex.com] 那里一定要直接按回车,因为 Transifex instance 指的不是你的项目 URL,而是 transifex 这套服务器软件架设在哪儿。比如 build.opensuse.org 就是一个 OBS instance,而 pmbs.links2linux.org 是另一个 OBS instance。

添加翻译模板和翻译文件

tx set --auto-local -r opensuse-manuals.$RESOURCE "<lang>/$RESOURCE.xml.<lang>.po" --source-language=en --source-file "POT/$RESOURCE.xml.pot" -t PO --execute
  • -r 添加资源

$RESOURCE 是你给你的翻译资源起的名字,一般来说,一个 POT 就是一个资源,资源名也就是 POT 的名字。 opensuse-manuals.$RESOURCE 会在您的项目中建立这样的 URL:

https://transifex.com/projects/p/opensuse-manuals/resource/$RESOURCE
  • -t PO 翻译模板文件的格式。具体列表和名称可从 http://help.transifex.com/features/formats.html 获得。
  • --execute 表示真正执行操作。不加则是测试命令管用不管用。
  • "<lang>/$RRESOURCE.xml.<lang>.po" 是你的 PO 文件的类似正则表达式的东西,<lang>就代表 zh_CN。

添加多个模板和文件

它的客户端没有批量添加工具,因此需要手写脚本来添加。这是我的几个脚本所示例:

  • resource_names

生成方法是到 POT 文件夹里运行:

ls > ../resource_names.new

这将列出该文件夹下所有的 POT 并将列表写入与 POT 目录平级的一个 resource_names.new 文件。打开该文件,找到通用字符,比如这里是 ".xml.pot"。下面我们用 sed 把它消除掉:

sed -i "s/.xml.pot//" resource_names.new

sed 的语法简单说,-i 表示写入原文件,"s/要替换的/替换成的/" 是替换语法,这里我们将 .xml.pot 替换为空。

  • special_char

transifex 的客户端不支持文件名中有 "." 这个特殊字符,比如 MAIN.opensuse 它是会报错的。所以需要一个 special_char 文件列示出所有带特殊字符的文件。

你要把带这样字符的 POT 和 PO 用 "_" 来替换。之后上传或做 xml/html/pdf 时别忘了将它们重命名回来。

  • init

这是真正其作用的脚本而不是数据。内容如下:

for RESOURCE in `cat resource_names`; do
  tx set --auto-local -r opensuse-manuals.$RESOURCE "<lang>/$RESOURCE.xml.<lang>.po" --source-language=en --source-file "POT/$RESOURCE.xml.pot" -t PO --execute
done

命令已经解释过了。cat resource_names 就是列出所有预处理好的资源名; for 循环就是对每个资源名运行命令。

查看

tx status

你可以看到一共添加了多少个资源,如果和你的 POT 数目不一致的话,那就是你的 special_char 不全。

上传

tx push -s

另外如果你 tx help push 的话,会发现参数还有一个 -t,但是不要用。因为你的 zh_CN 这样的翻译文件如果是空空的话,服务器无法解析出任何可供翻译的字符串,会报错:

Exception: Remote server replied: Could not import file: We're not able to extract any string from the file uploaded for language Chinese (China) (zh_CN) in resource opensuse-manuals: adm_support.

下面就是等了。

然后使用:

tx push -t --skip

来上传本地已经翻译好的翻译。一定要有 --skip。不然就会出现上面的错误并终止。

获取一个项目(针对愿意在本地翻译的翻译者和维护者)

先建立一个空目录,进去,运行

tx init

要求见上面。然后是设置远程服务器地址:

tx set --auto-remote https://transifex.com/projects/p/$project_slug

我们的 $project_slug 是 opensuse-manuals

于是远程服务器就配置好。下面是从服务器往下拉翻译:

tx pull -l zh_CN
  • 你也可以使用 -r $resource_slug 来拉取单个资源文件,$resource_slug 就是上面定义的 $resource,在 resoure_name 中有全部。
  • -l 表示语言。

好了,到这里,相信你已经入门了,其他的使用 tx help delete 这样的命令来查看就可以了。

管理

删除:

tx delete -r $resource_slug //删除模板文件
tx delete -l zh_CN //删除语言

配合,tx delet -r $resource_slug -l zh_CN 那就是删 po 文件了。

添加新文件:见上讲 set 的部分。

常见错误

401: Unauthorized

你的密码不对,去 /home/marguerite/.transifexrc 里改。

404: Not Found

你的 Transifex instance 错了,无需输入直接按 enter。删除 .tx 重新 tx init。