中文翻译平台改用 crowdin 的提议

发现了一款翻译平台 crowdin,相比于原有的平台有以下有点:

  1. 更少的 Markdown 解析错误;
  2. 在线编辑器是可视化的,不会被误翻译;
  3. 与 github 集成,可自动更新源文档并同步翻译结果;
  4. 可同时翻译多个分支(即多个版本),并将翻译结果同时在多个分支上应用。

官网地址:https://crowdin.com/

可以试验一下,你需要JuliaZH repo的权限么? 如果需要,麻烦 @Roger 给加一下。

crowdin一票
我司国际化业务都是走crowdin的

我目前开了一个测试用的项目,大概已经摸清楚了合适的配置,大家可以上去测试一下。如果确定要迁移,所需准备工作主要有:

  1. 取得开源许可;
  2. 迁移已有翻译,这需要手工完成,工作量较大;
  3. 迁移术语表,这可以批量导入。

迁移后工作步骤如下(没有次序):

  1. 更新源文档;
  2. 翻译源文档;
    1. 翻译基线版本的文档;
    2. 翻译新版本中的新字符串;
    3. 翻译术语表;
  3. 审阅翻译;
  4. 更新翻译;

若使用 crowdin 提供的 github 集成服务,源文档和翻译后文档需在同一个存储库中,crowdin 会自动将更新后的翻译推送之指定分支。如果选择 JuliaZH.jl 为源文档的库,则需要在其中提供源文档,并可能需要手动更新它。

基线版本由我们自己确定,crowdin 会选择所有分支中最老的(不知道可不可以手动指定)。第 2.2 步中需翻译的词汇量远少于第 2.1 步的,但有一点需要特别注意:翻译被隐藏的词条只针对于当前版本,只应为了准确性才翻译它。在下文中将说明如何判断词条是否为被隐藏的词条。

TODO:关于翻译者和审阅者如何使用 crowdin 的介绍。

说一说这个怎么做吧,有没有什么要注意的地方?
或者说我就把现在的翻译都搬过去就行了?

最近时间比较零碎,想做点不费脑子的东西。

把现有翻译搬过去就行了,Markdown 标签要改一下,如果我们要从 1.0 版本开始翻译,那么是把 transifex 上的现有翻译移到 crowdin 中 1.0 对应的分支,并且要注意两版本间的不同,从 1.1 版本开始就不需要注意这一点。

发现一个小问题,<tag> 这种东西在 crowdin 中估计是有特殊含义。
导致文档显示不正确。

https://crowdin.com/translate/JuliaZH/1432/en-zhcn


另外 XPath 是 codepre/code 的文本看能不能自动填充。

这里确实是有问题的,它好像被认为是某种 xml 标签了,翻译后的文件下载后是这样的(只截取相关部分):

和 `perl` 和 `ruby` 程序类似,还有很多种运行 Julia 代码的方式,运行代码时也有很多选项:

    julia [switches] -- [programfile] [args...]将 

<dir>
  将 
  
  <dir>
    设置为主项目/环境。 默认的 @. 选项将搜索父目录,直至找到 Project.toml 或 JuliaProject.toml 文件。</td> </tr> 
    
    <tr>
      <td align="left">
        <code>-J</code>, <code>--sysimage &lt;file&gt;</code>
      </td>
      
      <td align="left">
        用指定的镜像文件(system image file)启动
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-H</code>, <code>--home &lt;dir&gt;</code>
      </td>
      
      <td align="left">
        设置 <code>julia</code> 可执行文件的路径
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--startup-file={yes\|no}</code>
      </td>
      
      <td align="left">
        是否载入 <code>~/.julia/config/startup.jl</code>
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--handle-signals={yes\|no}</code>
      </td>
      
      <td align="left">
        开启或关闭 Julia 默认的 signal handlers
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--sysimage-native-code={yes\|no}</code>
      </td>
      
      <td align="left">
        在可能的情况下,使用系统镜像里的原生代码
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--compiled-modules={yes\|no}</code>
      </td>
      
      <td align="left">
        开启或关闭 module 的增量预编译功能
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-e</code>, <code>--eval &lt;expr&gt;</code>
      </td>
      
      <td align="left">
        执行 <code>&lt;expr&gt;</code>
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-E</code>, <code>--print &lt;expr&gt;</code>
      </td>
      
      <td align="left">
        执行 <code>&lt;expr&gt;</code> 并显示结果
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-L</code>, <code>--load &lt;file&gt;</code>
      </td>
      
      <td align="left">
        立即在所有进程中载入 <code>&lt;file&gt;</code>
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-p</code>, <code>--procs {N\|auto}</code>
      </td>
      
      <td align="left">
        这里的整数 N 表示启动 N 个额外的工作进程;<code>auto</code> 表示启动与 CPU 线程数目(logical cores)一样多的进程
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--machine-file &lt;file&gt;</code>
      </td>
      
      <td align="left">
        在 <code>&lt;file&gt;</code> 中列出的主机上运行进程
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-i</code>
      </td>
      
      <td align="left">
        交互式模式;REPL 运行且 <code>isinteractive()</code> 为 true
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-q</code>, <code>--quiet</code>
      </td>
      
      <td align="left">
        安静的启动;REPL 启动时无横幅,不显示警告
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--banner={yes\|no\|auto}</code>
      </td>
      
      <td align="left">
        开启或关闭 REPL 横幅
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--color={yes\|no\|auto}</code>
      </td>
      
      <td align="left">
        开启或关闭文字颜色
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--history-file={yes\|no}</code>
      </td>
      
      <td align="left">
        载入或导出历史记录
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--depwarn={yes\|no\|error}</code>
      </td>
      
      <td align="left">
        开启或关闭语法弃用警告,<code>error</code> 表示将弃用警告转换为错误
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--warn-overwrite={yes\|no}</code>
      </td>
      
      <td align="left">
        开启或关闭“method overwrite”警告
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-C</code>, <code>--cpu-target &lt;target&gt;</code>
      </td>
      
      <td align="left">
        设置 <code>&lt;target&gt;</code> 来限制使用 CPU 的某些特性;设置为 <code>help</code> 可以查看可用的选项
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-O</code>, <code>--optimize={0,1,2,3}</code>
      </td>
      
      <td align="left">
        设置编译器优化级别(若未配置此选项,则默认等级为2;若配置了此选项却没指定具体级别,则默认级别为3)。
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>-g</code>, <code>-g &lt;level&gt;</code>
      </td>
      
      <td align="left">
        设置编译器优化级别(若未配置此选项,则默认等级为2;若配置了此选项却没指定具体级别,则默认级别为3)。
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--inline={yes\|no}</code>
      </td>
      
      <td align="left">
        控制是否允许函数内联,此选项会覆盖源文件中的 <code>@inline</code> 声明
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--check-bounds={yes\|no}</code>
      </td>
      
      <td align="left">
        设置边界检查状态:始终检查或永不检查。永不检查时会忽略源文件中的相应声明
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--math-mode={ieee,fast}</code>
      </td>
      
      <td align="left">
        开启或关闭非安全的浮点数代数计算优化,此选项会覆盖源文件中的 @fastmath 声明
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--code-coverage={none\|user\|all}</code>
      </td>
      
      <td align="left">
        对源文件中每行代码执行的次数计数
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--code-coverage</code>
      </td>
      
      <td align="left">
        等价于 <code>--code-coverage=user</code>
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--track-allocation={none\|user\|all}</code>
      </td>
      
      <td align="left">
        对源文件中每行代码的内存分配计数,单位 byte
      </td>
    </tr>
    
    <tr>
      <td align="left">
        <code>--track-allocation</code>
      </td>
      
      <td align="left">
        等价于 <code>--track-allocation=user</code>
      </td>
    </tr></tbody> </table> 

问了一下,给我的方法是在 <tag> 两边加上反引号,只要在源文档里加上就行了,可以先在 Julia 官方源里提个相关的 PR。