🌐

アプリ内文言&翻訳管理サービス Lokalise の紹介 #TimeTreeアドカレ

2023/12/03に公開

これは株式会社TimeTree Advent Calendar 2023の3日目の記事です。

https://qiita.com/advent-calendar/2023/timetree

TimeTreeのフロントエンドエンジニアの @fujikky です。

多言語アプリケーションを開発している開発者の皆さまは、アプリ内の文言を管理する際にどのような方法を取っていますか?TimeTreeではアプリは13言語、Webは5言語に対応しており、社内のネイティブスピーカーや翻訳クラウドサービスを使って文言の翻訳作業を行っています。 今回は、TimeTreeで使っている翻訳管理サービス Lokalise の紹介と、利用開始に至った経緯を紹介します。

Lokaliseとは

https://lokalise.com/

Lokalise(ローカライズ)は、アプリやウェブの翻訳管理のサポートをする SaaS です。競合サービスとしては、LocalazyTransifexなどでしょうか。Lokalise は日本での採用事例はあまりないようで、日本語での紹介記事も少なめだったので今回の記事を執筆しました。

Lokaliseの選択理由

以前は、文言や翻訳データの管理はGoogleスプレッドシートに入れており、内製のスクリプトを活用してアプリ用の言語ファイルに変換していました。しかし次第に以下のような課題に直面し、へのなんらかの翻訳管理プラットフォームへの移行を決断しました。

  • アプリケーションの成長に伴い、管理する文言の数が急増し、数千行を超える規模になりました。スプレッドシートのUIが非常に重くなってしまったり、翻訳・未翻訳のステータスも分かりにくく効率が悪くなってしまいました。
  • 内製のスクリプトのメンテナンスコスト スプレッドシートから言語ファイルに変換するRubyスクリプトは、私がメンテナンスしていましたが、iOS/Android/Webで使っているRubyのバージョンにそれぞれ追従させたり、依存ライブラリを更新するなどのメンテ作業が必要になっていました。


スプレッドシートでの文言管理。最終的には3700行以上になった

まずはトライアルとして社内の小規模なプロジェクトにまず導入を目指し、2019年頃に各社のサービスを比較しました。比較した結果、機能やコストのバランスがちょうどよく、低予算からスタートできたのが Lokalise だったのでした。


翻訳システム比較資料

Lokalise 主な機能

Lokaliseには、スプレッドシートでは満たせなかった魅力的な機能があります。

  • CLIツールが用意されており、オプションを渡すことで柔軟に翻訳ファイルを生成できるようになっています。
  • iOS, Android, Web などのプラットフォームごとに翻訳キーを分けられるので、それぞれの命名規則に合わせることができます。
  • 未翻訳のキーワードをまとめ、翻訳タスクを作成できます。タスクはメンバーをアサインしたり、ステータスの管理機能があります。
  • Lokaliseから直接クラウド翻訳サービスに依頼できます。弊社では Gengo を使って低価格ながらプロの翻訳者による翻訳を採用しています。
  • 翻訳キーにタグを付与し、特定の文言を効果的に絞り込むことができます。タグだけでなく未翻訳のもの、未校正のものなど様々な条件でフィルタリングができます。
  • 翻訳キーにスクリーンショットを添付することができます。翻訳者にコンテキストを理解してもらうには画像が一番効率的です。
  • よく使われる単語のリスト(Glossary)を使うことで、翻訳者による文言の揺れを是正することができます。


Lokaliseのプロジェクト画面

スプレッドシートは無料で使えましたが、開発規模がある程度大きくなった現在は、コストを払う価値があると判断し、Lokaliseに移行しました。

移行作業

移行にあたっては、GoogleスプレッドシートのデータをLokaliseにインポートする必要がありました。幸いデータ構造はほぼ同じ概念だったのと、Lokalise側のインポートにもAPIが用意されていたので、移行用のスクリプトを作成して移行作業を行いました。移行用スクリプトは自分の得意なTypeScriptで書きました。Node用のSDKも用意されているので比較的スムーズに実装できました。

https://github.com/lokalise/node-lokalise-api

スクリプトは、移行後と移行前で各プラットフォームの翻訳ファイルの出力に差異が出ていないことや、スクリプトを何回実行しても同じ翻訳キーは上書きされないような実装をしました。GitHub Actionsで定期的にスクリプトを走らせておき、スプレッドシートに入れたものが数時間以内には Lokalise に反映される体制を組むことで、移行期間で各プロジェクトのメンバーの負担を減らす努力をしました。

また、Lokaliseのマニュアルも社内文書として作成し、エンジニアやPdM、翻訳担当のネイティブメンバーにへの説明会を開催しました。説明会後は「開発時に文言データを追加する際はスプレッドシートではなくLokalise側に追加するように」というアナウンスを出しました。続いてiOS, Android, Web 用に、それぞれ翻訳ファイルの変換スクリプトをスプレッドシートではなくLokaliseを使うように変えたPull Requestを出し、それぞれプラットフォームの担当者にコードレビューしてもらいました。


翻訳マニュアルのドキュメント。説明会の動画を貼り付けておくと参加できなかった人も見返せる

翻訳作業のワークフロー

Lokalise移行後に、社内の翻訳作業のワークフローが整備されました。

  1. 開発担当者がLokaliseに翻訳キーとデフォルト文言(日本語)を追加する
  2. PdMやQA担当などが日本語を校正する
  3. 翻訳に必要なキーがある程度揃ったらLokalise側で「タスク」を作る
  4. Slackのワークフロー機能を使い、英語・ドイツ語・韓国語などを社内ネイティブのメンバーに翻訳を依頼する
  5. 社内の翻訳が完了したら、英語をベースにしてLokalise上からクラウド翻訳サービスに依頼する(フランス語、スペイン語など)

また実際に起きた問題としては、社内の各言語のネイティブメンバーはデザイナーやエンジニアで、翻訳を専門とする人ではないので、翻訳作業が業務の負担になることがありました。そこで、一部の言語はクラウド翻訳サービスに依頼した上で、クオリティチェックだけを社内ネイティブメンバーにお願いするという方法も取っています。


Slackのワークフロー機能を使って翻訳依頼を投げる

AI Translation で進化するワークフロー

実はまだワークフローとして整備できていないのですが、翻訳フローが今後大きく改善されそうなので紹介します。 2023年9月にLokalise側のアップデートがあり、Lokalise AI 機能が追加されました。

https://lokalise.com/ai

上記のワークフローの 3 でタスクを作る際に Automatic translation (Lokalise AI) を選択すると、指定したキーをAIが翻訳して埋めてくれるようになります。なんと追加費用も掛かりません(単語数の上限はあり)。最後に、AIによる翻訳結果をネイティブメンバーにレビューしてもらうことで、翻訳作業のかなり効率的に行うことができるようになりそうです。ネイティブのメンバー曰く、機械翻訳とは思えないクオリティだそうで、最初は社内の誰か人間が翻訳したと思ったそうです。ただしAIには社内のコンテキストが足りないので、用字用語を揃えたりする作業は引き続き必要とのことでした。これもLokaliseの単語リスト(Grossary)機能を使うことで改善できそうです。


タスクを作成するときにLokalise AIを選択すると自動で翻訳結果を埋めてくれる

まとめ

多言語を扱うアプリケーションの規模が大きくなってくると Lokalise などの SaaS を導入するのは十分コストに見合った価値があると思います。また、AI Translation 機能の登場により、翻訳作業の効率化がさらに進むことが期待されます。今後も積極的に活用していきたいです。

TimeTreeの採用情報

TimeTreeのミッションに向かって一緒に挑戦してくれる仲間を探しています。TimeTreeで働くことに興味がある方はぜひ、Company Deck(会社紹介資料)や採用ページをご覧ください!

TimeTree Tech Blog

Discussion