SDB:Transifex client usage
目录
客户端下载
在 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。