Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lokalise を使った Bill One の多言語化フローのチューニング / Tuning...

Sansan
November 05, 2021

Lokalise を使った Bill One の多言語化フローのチューニング / Tuning Bill One's multi-lingualization flow using Lokalise

■イベント

Sansan Builders Stage 2021

https://jp.corp-sansan.com/engineering/buildersstage2021/

■登壇概要

タイトル:Lokalise を使った Bill One の多言語化フローのチューニング

登壇者:技術本部 Bill One Engineeringグループ エンジニア 辰濱 健一

▼Sansan Engineering
https://jp.corp-sansan.com/engineering/

Sansan

November 05, 2021
Tweet

More Decks by Sansan

Other Decks in Technology

Transcript

  1. グローバルなソフトウェア ソフトウェアのグローバル対応 L10N:Localization • 特定の⾔語、地域、⽂化に合うよう製品を 特殊化すること。 • 主な作業者:翻訳者 I18N:Internationalization •

    特定の⾔語、地域、⽂化に依存しない形に 製品を汎⽤化すること • 主な作業者:プログラマ 多⾔語対応の⼟台 ⽇本語 英語 (US) … I18N L10N G11N ソフトウェアのグローバル対応(G11N:Globalization)のためには、 側で⼤きく分けて2つの対応がある。
  2. ⽂⾔の英語表記 ⽇付表記 外貨対応 • ⽇本語 UI のみ(⼀部機能を除く) • 円のみ Bill

    One のグローバル対応 • 英語 UI を追加 ← ここの話をします • 主要な外貨にも対応 • タイムゾーン対応 など Bill One を海外でも売れるようにする
  3. • TypeScript, React を使⽤ • LinguiJS を多⾔語対応のライブラリとして採⽤ • ⼀部機能を英語化する際に、Bill One

    のアーキテクトがライブラリを選定 • 選定理由 • JSX の書き味を悪くしたくない • レンダリング時のパフォーマンスの良さ • https://lingui.js.org/ Bill One のグローバル対応 フロントエンドの実装について
  4. • https://lingui.js.org/ > 🌍📖 A readable, automated, and optimized (5

    kb) internationalization for JavaScript • とあるように、多⾔語対応してもコードの可読性が⾼い。 Bill One のグローバル対応 LinguiJS について <Trans> で文言をくくるだけ Bill One では翻訳⽂⾔のキーは ⽇本語⽂⾔を使っています。 (ソースの可読性を優先)
  5. ソースコード中の <Trans>…</Trans> などの翻訳対象を抽出して、ファイルに抽出できる Bill One のグローバル対応 LinguiJS について (extract) Bill

    One では翻訳⽂⾔のキーは ⽇本語⽂⾔を使っています。 (ソースの可読性を優先) msgid “請求書登録” msgstr “請求書登録” … msgid “請求書登録” msgstr “” … ja/messages.po en/messages.po lingui extract ここに翻訳された英訳を あてていく (後述)
  6. po ファイルを コンパイルしてフロントエンドで扱えるファイルを⽣成する Bill One のグローバル対応 LinguiJS について (compile) msgid

    “請求書登録” msgstr “請求書登録” … msgid “請求書登録” msgstr “Upload” … ja/messages.po en/messages.po Export messages={ “請求書登録”:” 請求書登録”, … } ja/messages.ts Export messages={ “請求書登録”:” Upload”, … } en/messages.ts lingui compile
  7. ⽣成した ts ファイルを使って、⾔語による⽂⾔の出し分けを⾏う Bill One のグローバル対応 LinguiJS について (表⽰) Export

    messages={ “請求書登録”:” 請求書登録”, … } ja/messages.ts Export messages={ “請求書登録”:” Upload”, … } en/messages.ts
  8. • ソースコード中の翻訳対象を po ファイルなどに抽出することができるが、 翻訳作業は守備範囲外 • <Trans> タグだけでなく、複数形に対応した <Plural> 要素がある

    • po ファイルだけでなく、json ファイルなどにも出⼒できる • https://lingui.js.org/ Bill One のグローバル対応 LinguiJS について (補⾜)
  9. • 実装者が関係者(開発、CS、デザイナ…)に機能デモを⾏って、UI や⽂⾔を fix させる • 実装者が「翻訳依頼 Spread Sheet」に⽇本語⽂⾔とスクリーンショットを掲載 •

    実装者が Slack にて翻訳を依頼 • 納品には1週間ぐらいかかる(社内の翻訳担当者が翻訳を⾏う) • 納品されたら翻訳担当者から Slack でメンションされる • 実装者が「翻訳依頼 Spread Sheet」から po ファイルに転記して、プロダクトに反映する • (プレースホールダーの扱いなど、ミスをしがち) 従来の英訳フロー 従来の英訳フロー
  10. • 英訳依頼における開発者の⼿間が多い • Spread Sheet 上のセルやコメントでやりとりがあると追うのが⼤変 • 翻訳チームも複数⼈にて、レビューなどのワークフローがあるともっと⼤変… • 翻訳が完了してからも開発者の⼿作業が発⽣する

    • 取り急ぎ機械翻訳でよくても、翻訳をあてたり、結果を反映するのが⼤変 • 英語を必要とするユーザはまだ多くないので、機械翻訳品質で機能を早く出して、 後追いで英語の品質を上げたい 従来の英訳フロー 従来の英訳フローの課題点 これらの課題感の解決のために、社内で翻訳作業省エネ化プロジェクトが発足しました。
  11. • レンダリング時の体験 • ⼀瞬⽇本語が表⽰されてから英語になったりしない • エンジニアコストの削減量と翻訳品質のバランス 翻訳作業省エネ化プロジェクト Lokalise の採択理由 ※

    プロダクト、フェーズ、多⾔語化の優先度、 社内リソース、 などによってマッチするサービスは 異なります。 ※ サービスの優劣を述べる意図はありません
  12. Lokalise について 開発者の作業を減らす https://lokalise.com/ • ローカリゼーションの 煩わしさを解消 • API や

    CLI, GitHub 連携など もある • 開発者がメインタスクに 戻れるようにする
  13. • フロントエンドのコードから、 po ファイルを⽣成 (⽇本語⽂⾔のみが記載されている) • po ファイルを lokalise の

    CLI 経由でアップロードするだけ • この時点で機械翻訳があたる 今の英訳フロー 翻訳依頼⽅法 GitHub DeepL lokalise
  14. • CLI でアップロード直後から、 機械翻訳があたった⽂⾔は CLI で取得できる • CLI から po

    ファイルが取得 できるので、そのままコミット すれば OK • Spread Sheet からの煩わしい コピペも不要 • プレースホールダーも正しく 扱ってくれる 今の英訳フロー 翻訳⽂⾔の適⽤ GitHub DeepL lokalise
  15. • デザイナーが翻訳依頼を⾏える • 開発者の⼿間が減る • 開発と並⾏して英訳が進めら れ、市場投⼊速度が上がる • Figma などのツール上で

    翻訳 結果を確認できる 今後の英訳フロー デザイナーもデザインツールから翻訳依頼を⾏える lokalise DeepL
  16. • ESLint fixer (Lint エラーにならないようにコードを⾃動修正する)を 実装できるので、⾃動で <Trans> で囲えるようにする • Bill

    One フロントエンドのリポジトリに実装されているが、 社外を含めた他プロダクトでも使いやすいように、オープンソース化&パッケー ジ公開を進める 抽出忘れの対応 今後の対応
  17. • 前提となる Bill One のフロントエンドの実装や使⽤しているライブラリについて • TypeScript, React, LinguiJS •

    翻訳フローを lokalise というサービスを使って楽にした話 • Spread Sheet からの解放 • 開発者の⼿間が⼤幅に削減された(依頼&翻訳結果取得) • デザイナがデザインツールから翻訳依頼を出すことも簡単 • 翻訳抽出漏れをなくすための仕組みについて • ESLint のカスタムプラグインを作って適⽤ まとめ Bill One での多⾔語化フローの改善について