📝

Crowdinの翻訳データ一覧をCSV化するcrowdin2csvのご紹介

2021/02/07に公開

crowdin2csvというgemを作ったので紹介します。

Crowdinとは

ある程度以上の規模の多言語対応アプリケーションを制作する場合、訳文や単語の管理のためにツールを導入することがあります。

Crowdinはそういった翻訳のためのツールで、Webアプリケーションとして提供されています。このアプリケーションに、何かしらの形で翻訳したい単語や文のデータを登録しておいた上で、翻訳者がそれを翻訳していき、これまた何かしらの形でアプリケーションに取り込むようにします。

同じジャンルのツールとしてはTransifexも有名ですね。OSSではWeblateというツールもあるそうです。

Crowdin・Transifex・Weblate(のクラウドhosted版)はOSSだと無料で使える枠があるようなので、大きめのOSSの開発に関わっている場合、これらのサービスを使ったことのある方もいるかもしれません(私はTransfiexとCrowdinで訳語を突っ込んだことがあります)。

XLIFFとは

XLIFFは「XML Localization Interchange File Format」の略だそうで、XML形式で翻訳データを交換するためのファイルフォーマットです。

以前から使われているフォーマットとしてはgettextのPOファイルなどがありますが、そのXML版というところでしょうか。

XLIFFファイルのサンプルは以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
  <file id="2654" original="/develop/decidim-accountability/config/locales/en.yml" source-language="en" target-language="ja" datatype="plaintext" project-id="224606" tool-id="crowdin">
    <header>
      <tool tool-id="crowdin" tool-name="Crowdin" tool-version="1.1"/>
    </header>
    <body>
      <trans-unit id="114846" resname="root.activemodel.attributes.result.decidim_accountability_status_id">
        <source>Status</source>
        <target state="translated">ステータス</target>
        <note from="Crowdin" priority="2">root -&gt; activemodel -&gt; attributes -&gt; result -&gt; decidim_accountability_status_id</note>
      </trans-unit>
      <trans-unit id="114848" resname="root.activemodel.attributes.result.decidim_category_id">
        <source>Category</source>
        <target state="translated">カテゴリ</target>
        <note from="Crowdin" priority="2">root -&gt; activemodel -&gt; attributes -&gt; result -&gt; decidim_category_id</note>
      </trans-unit>

まあなんとなく雰囲気は伝わるかと思います。trans-unitが翻訳の単位、sourceが元の単語・文でtargetが訳語・訳文です。

CrowdinはXLIFFに対応していて、翻訳した単語をXLIFF形式でダウンロードすることができます。アップロードもできるようですが、こちらは使ったことがありません。
TransifexもXLIFFダウンロード機能があるようですが、私が関わっているプロジェクトではこの機能が使えませんでした。設定の問題でしょうか。
Weblateも同等の機能があるそうです。

crowdin2csv

ここまで説明すればだいたい理解されていると思いますが、crowdin2csvはこのCrowdinが吐き出すXLIFF形式のファイルをCSVファイルに変換するものです。そのままですね。

インストールはgemコマンドを使います。

$ gem install crowdin2csv

実行する際は、XLIFFファイルを引数にして実行します。

$ crowdin2csv foo.xliff

こうすると、foo.csvファイルが生成されます。異なるファイル名にしたい場合は-oオプションを使います。

$ crowdin2csv -o bar.csv foo.xliff

こうすると、bar.csvファイルが生成されます。

生成結果のCSVファイルは以下のようになります。

unit_id,file_id,original,source,target,resname,note
114846,2654,/develop/decidim-accountability/config/locales/en.yml,Status,ステータス,root.activemodel.attributes.result.decidim_accountability_status_id,root -> activemodel -> attrib
utes -> result -> decidim_accountability_status_id
114848,2654,/develop/decidim-accountability/config/locales/en.yml,Category,カテゴリ,root.activemodel.attributes.result.decidim_category_id,root -> activemodel -> attributes -> resul
t -> decidim_category_id

翻訳は多くの方に協力・フィードバックしてもらいたいですが、XLIFF形式で読める人はあまり多くなさそうなので、その場合はCSV化してExcelなりGoogle Sheetsなりで共有するといいんではないでしょうか。

crowdin2csvのリポジトリはGitHubにあります。何かあればissueやpull requestをお送りください。

https://github.com/takahashim/crowdin2csv

Discussion