◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/アプリ開発
◇ アプリ開発/2026-06-25上級

言語を増やすたびに未翻訳が本番へ漏れる — Rork(Expo) アプリの文言カタログ運用と抜け検出の設計

Rork で生成した Expo アプリを多言語化したあと、言語を足すたびに未翻訳が本番へ漏れる問題を仕組みで止めるための設計を共有します。文言カタログの一元化、CI でのキー抜け・余り検出、フォールバック連鎖、複数形、擬似ロケールでのレイアウト検証まで実装込みで解説します。

Rork585Expo219i18n多言語対応3翻訳運用CI7フォールバックローカライズ7

✦ プレミアム記事

言語を増やすたびに未翻訳が本番へ漏れる

個人開発で運用しているアプリのひとつに、ある週末に2言語を足したことがあります。翻訳ファイルを2つ追加し、画面をひととおり眺め、問題なさそうに見えたのでリリースしました。数日後、ある画面の見出しだけが英語のまま表示されているという報告が届きました。原因は単純で、その言語ファイルを書いた時点には存在しなかったキーを、別の機能追加であとから足していたのです。新しいキーは既定言語にしか入っておらず、追加した2言語には反映されていませんでした。

このとき気づいたのは、未翻訳が漏れるのは「言語を足したとき」ではなく「キーを足したとき」だということです。多言語アプリの破綻は、たいてい翻訳作業そのものではなく、キーの増減と翻訳の充足が静かにズレていく運用のほうから来ます。そのズレを目視ではなく仕組みで止めるための設計を、実装込みで共有します。

なぜ未翻訳は「あとから」漏れるのか

翻訳ファイルを最初に用意したときは、全言語が同じキー集合を持っています。ところがアプリは育ちます。機能を足せば文言が増え、その文言は普通、自分が書ける言語(多くは日本語か英語)にしか入りません。残りの言語へ反映するのは別の工程で、ここに時間差が生まれます。

問題は、多くの i18n ライブラリが「キーが無い」ときに沈黙することです。キーを引けなければキー名そのものを表示したり、既定言語にこっそり落としたりします。クラッシュしないのは利点ですが、未翻訳がエラーにならないため、本番に出るまで誰も気づきません。目視レビューは画面数と言語数の掛け算で破綻します。3言語で20画面なら60通り、ここに動的な状態が乗るので、人間が全部見るのは現実的ではありません。

ですから設計の出発点はひとつです。翻訳の充足は人間の注意力ではなく、機械的な差分検出で担保する。 以下、その土台から順に組み立てます。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦新しい言語を追加するたびに未翻訳が本番へ漏れる根本原因を「キーの増減」と「翻訳の充足」のズレとして整理し、止め方を設計から示します
✦全ロケールのキー差分を CI で機械検出して未翻訳を本番前に止めるスクリプトと、フォールバック連鎖・複数形・擬似ロケール検証の実装を、私が個人開発の多言語アプリで回している形のまま共有します
✦翻訳の充足率を計測してダッシュボードに出す方法と、言語追加を安全な定型作業に落とすチェックリストまで1本にまとめました
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◇ アプリ開発2026-09-18
prebuild が requires the standard Expo SDK 57 Swift AppDelegate で止まったとき、まず確かめる3行
iOS 27 のために ios.enableSceneSupport を有効にすると prebuild が止まることがあります。原因は SDK の版ではなく AppDelegate.swift の形でした。確かめる3行と、手で書くときに SDK 58 の手順を真似てはいけない理由をまとめます。
◇ アプリ開発2026-09-16
消したはずのトークンが再起動で戻る — SecureStore の削除失敗を検知する設計
サインアウト直後に getItemAsync が null を返しても、Android のディスクには値が残っていることがあります。削除の成否を読み出しで確かめていた実装を、戻り値で判断する形へ書き直した記録です。
◇ アプリ開発2026-09-10
Rork のリポジトリに置く最初の EAS Workflow と、失敗した回にだけ届かない通知
Rork から書き出したリポジトリに .eas/workflows を二本置くまでの手順と、needs でつないだ通知が失敗した回にだけ届かなくなる理由を、手元で走る検査スクリプトの実行結果つきで書き残します。