Localization (ローカライゼーション、l10n) — モバイルアプリのコンテンツをターゲット駆の言語、地域、文化的特徴に適応させることです。国際化 (i18n) がコードを翻訳のために準備するのとは対照的に、ローカライゼーションは文字列の翻訳、日付・数値・通貨のフォーマット、画像の選択、ローカルの規範を考慮する実際のプロセスです。iOSでは、翻訳はLocalizable.strings (各言語の .lproj フォルダ) に保存され、Androidでは values-ru、values-de および他のリソースディレクトリに保存されます。詳細はAndroidローカライゼーションガイドをご覧ください。
メインポイント
ローカライゼーション (略称 l10n — “l”と“n”の間に10文字) は、アプリケーションを特定の言語と地域に適応させるプロセスです。i18nがアーキテクチャの基盤であるならば、l10nはコンテンツです。i18nが翻訳を可能にし、l10nがそれを実行します。ローカライゼーションには、インターフェースのすべてのテキストの翻訳、日付と数値のフォーマット適応、文化的に敏感な画像の置き換え、法的テキスト(プライバシーポリシー、EULA)の調整、地域に応じた決済システムの構成、ターゲットデバイスでのテストが含まれます。
ビジネスROI — ローカライゼーションはコンバージョンに直接影響します。CSA Research (2023) によると、76% のユーザーが母国語のアプリで貼い物を好み、40% は外国語では絶対に貼い物をしません。小売アプリの日本語ローカライゼーションにより、コンバージョンが平均150% 増加します (Google, 2022)。ローカライズ済みアプリは、地域ASO(ターゲット言語のキーワード)により、地域のApp StoreやGoogle Playで2〜3倍多いオーガニックインストールを得ています。
i18n vs l10n — 同じプロセスの両側です。i18n: 文字列をリソースに抽出、RTLサポート、数値フォーマット。開発者が一度だけ行います。l10n: 文字列の翻訳、コンテンツの適応、ローカルテスト。翻訳者とQAが各ロケールについて繰り返し行います。IT Sectrでは、新しい言語ごとにスプリント時間の20〜30% をローカライゼーションに割いています — これには翻訳、レビュー、デバイステスト、バグ修正が含まれます。
Localizable.strings — iOSで翻訳を保存するための主要ファイルです。各ロケールには独自の .lproj フォルダがあります: en.lproj/Localizable.strings、ru.lproj/Localizable.strings、de.lproj/Localizable.strings。フォーマット: “キー” = “値”; (セミコロン付き)。AppleはBase Internationalizationを使用します: StoryboardとXIBは一度作成され (Base.lproj)、インターフェースの文字列は各言語のLocalizable.stringsにエクスポートされます。これにより、各ロケールのXIBのコピーを作成する必要がなくなります。
// en.lproj/Localizable.strings
// "settings.title" = "設定";
// "profile.greeting" = "こんにちは、%@!";
// "items.count" = "%d個のアイテム";
// ru.lproj/Localizable.strings
// "settings.title" = "設定";
// "profile.greeting" = "こんにちは、%@!";
// "items.count" = "%d個のアイテム";
// キーによる文字列の読み込み
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "設定画面のタイトル"
)
// パラメータのある文字列
let name = "アンナ"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// XLIFFインポート (Xcode → Editor → Import Localizations)
// 翻訳者の作業後に .lproj ファイルを自動更新
Base Internationalization — Appleのアプローチで、インターフェース (Storyboard, XIB) がBase.lprojで一度作成されます。言語を追加すると、XcodeがBaseからXLIFFファイルに文字列をエクスポートします。翻訳者がXLIFFを翻訳します。インポート後、Xcodeが翻訳済み文字列を含む .lproj を作成します。利点: 各言語のXIBを複製する必要がありません。制限: RTL言語(アラビア語、ヘブライ語)では、ミラーレイアウトの別のXIBが必要になる場合があります。
InfoPlist.strings — アプリ名 (CFBundleDisplayName)、カメラ/マイク使用許可 (NSCameraUsageDescription) および Info.plist の他の値をローカライズするためのファイルです。.lproj 内に作成されます: ru.lproj/InfoPlist.strings。フォーマット: CFBundleDisplayName = “マイアプリ”; NSCameraUsageDescription = “写真を撮るためにカメラアクセスが必要です”;。InfoPlist.stringsのローカライゼーションがないと、システムダイアログは英語になります。
Androidリソース は、ディレクトリ名のクォリファイアによって組織されます。ロシア語の場合— res/values-ru/、ドイツ語— res/values-de/、ブラジルポルトガル語— res/values-pt-rBR/。Androidは160以上のロケールをサポートしています。システムはデバイス言語 (Locale.getDefault()) に基づいて自動的にリソースを選択します。正確なロケールが見つからない場合は、values/ (ベースロケール、通常 en) からリソースが使用されます。
// res/values/strings.xml (ベース — 英語)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (ロシア語)
<string name="settings_title">設定</string>
<string name="greeting">こんにちは、%s!</string>
// res/values-de/strings.xml (ドイツ語)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — すべての言語で共通のコード
textView.text = getString(R.string.settings_title)
// パラメータのある文字列
val greeting = getString(R.string.greeting, userName)
// ローカライズ済み画像
// res/drawable-ru/flag.png — ロシア版の旗
// res/drawable/flag.png — デフォルトの旗
// レイアウトのローカライゼーション (RTL言語用)
// res/layout-ar/activity_main.xml — アラビア語版
文字列以外のローカライゼーション — Androidは画像 (res/drawable-ru/)、色 (res/values-ru/colors.xml)、サイズ (res/values-ru/dimens.xml)、アニメーション、メニュー、さらにはレイアウト全体をローカライズできます。単語の長さが異なる言語 (ドイツ語は英語より30〜40% 長い) では、ボタン幅を広げたローカライズ済みのdimens.xmlを使用します。色のシンボリズムが異なる地域 (中国で白色は収祭) では、ローカライズ済みのcolors.xmlを使用します。
テスト — 設定 → システム → 言語からデバイス言語をターゲット言語に切り替えます。確認: すべての文字列が翻訳されていること、日付が正しくフォーマットされていること、数値が適切な区切り文字で表示されていること、画像が地域に一致していること、長い文字列でレイアウトが崩れないこと。自動化には、LocaleTestRule (Android Testing Library) を使用したEspressoを使用します — これにより、手動で言語を切り替えることなく、複数のロケールでテストを実行できます。
文化的特徴 — ローカライゼーションは文字列の翻訳だけではありません。色のシンボリズムは異なります: 赤は中国では幸運、米国では危険、南アフリカでは収祭。白はヨーロッパでは純浄、中国では収祭。ジェスチャーアイコン: 米国ではサムズアップがポジティブ、中東では軾りです。人物画像: アラブ诸国ではビキニの女性画像は不可可です。宗教的シンボル: クロス、三つ月、ダビデの星は適切な文脈でのみ使用すべきです。
法的要件 — 各国にはデジタル製品に関する独自の法律があります。GDPR (欧州連合) — Cookieとデータ処理に対する強制な同意。CCPA (カリフォルニア) — データ削除権。個人データ法 (ロシア、152-FZ) — ロシアのサーバーへのデータ保管。LGPD (ブラジル) — GDPRに相当。決済: 中国ではAlipay/WeChat Pay、インドではUPI、ブラジルではBoletoとPIXが必要です。ローカライゼーションを開始する前に、地域に応じた決済ゲートウェイを構成してください。
| 項目 | 米国 | 中国 | UAE | ドイツ |
|---|---|---|---|---|
| 決済システム | Apple Pay、カード | Alipay、WeChat Pay | カード、Apple Pay | PayPal、Giropay |
| ブランド色 | 何でも | 赤 — 幸運 | 緑 — イスラム | 黒/黄 |
| ソーシャルネットワーク | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| 日付 | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| データ法 | CCPA | PIPL | PDPL | GDPR |
例とコンテンツ — 例を地域に合わせてください。ドイツ語ローカライゼーションではメトル法 (kg、km) を使用し、米国系ではインペリアル法 (lb、mi) を使用します。電話番号、郵便番号、住所 — すべて異なる形式です。通貨の例: 日本では¥1000、米国では$9.99、ロシアでは999₽。食べ物、衣類、インテリアの画像は地域の標準に合わせる必要があります。IT Sectrでは、文化的適応を検証するためにローカルコンサルタントを雇用することをおすすめしています。
ローカライゼーションツール — プロフェッショナルなプラットフォームがプロセスを自動化します: Lokalise、Crowdin、POEditor、Smartling、Phrase。これらはリポジトリと統合し、新しい文字列を自動インポートし、変更をトラックし (デルタ更新 — 変更のあった文字列だけが翻訳される)、翻訳メモリ (TM — 過去に翻訳されたフレーズの保存)とグロッサリを提供します。プロの翻訳価格の平均: 0.08〜0.15ドル/単語 (言語による)。
プロセス — (1) 開発者がコードにi18nキーを追加し、リポジトリにプッシュします。(2) CI/CD (GitHub Actions / GitLab CI) が新しいキーを自動的にローカライゼーションプラットフォームに送信します。(3) 翻訳者が通知を受け取り、翻訳して保存します。(4) 翻訳済みファイルが自動的にリポジトリにPRを作成します。(5) QAがデバイス上でローカライゼーションを検証します。(6) リリース。1ロケールのサイクル: 2〜5営業日 (ボリュームによる)。10ロケールの場合: 翻訳者の並列作業で5〜15日。
機械翻訳 + 人間レビュー — 現代の標準です。ニューラルネットワーク翻訳 (DeepL、Google Translate、GPT-4) は人気の言語組で80〜90% の品質を提供します。人間翻訳者が確認するもの: 用語、文脈 (単語はスクリーンによって異なる意味をもつことがある)、文化的適応。IT Sectrでは、ハイブリッドアプローチを使用しています: ML翻訳 + 母国語話者によるレビュー。クリティカルな文字列 (法務、決済) については — プロの翻訳だけ。節約: 品質を維持しながらコストを60% 削減。
よくある質問
国際化 — 翻訳のためにコードを準備すること (文字列の抽出、RTL、フォーマット)。ローカライゼーション — 実際の翻訳と文化的適応。i18nは開発者が一度行い、l10nは翻訳者が各言語について行います。i18nなしのl10n — アプリは翻訳準備ができているが翻訳されていません。l10nなしのi18n — 各言語についてコードを書き直す必要があります。
.lproj フォルダ内の Localizable.strings ファイルに保存されます。各言語: en.lproj (英語)、ru.lproj (ロシア語)、de.lproj (ドイツ語)。フォーマット: “キー” = “値”;。複数形については Localizable.stringsdict。アプリ設定 (CFBundleDisplayName) は InfoPlist.strings。XcodeはBase Internationalizationを通じて .lproj を管理します。
values-ru — ロシア語用の Android リソースディレクトリです。翻訳を含む strings.xml を含みます。他の言語も同様です: values-de (ドイツ語)、values-fr (フランス語)。Androidはシステム言語に基づいてリソースを選択します。values-ruが見つからない場合は、values/ (ベース言語、通常英語) を使用します。
常にLocale APIを使用してください。iOS: DateFormatter.locale = Locale(identifier: locale)。Android: DateFormat.getDateInstance(DateFormat.SHORT, locale)。ロシア: 31.12.2024。米国: 12/31/2024。日本: 2024/12/31。固定のフォーマットを指定しないでください — 各国には独自の標準があります。日付入力にはUIDatePicker / DatePickerを使用してください。
グローバルなカバレッジには、10〜15言語で十分です: 英語、スペイン語、フランス語、ドイツ語、日本語、中国語、韓国語、ポルトガル語、ロシア語、イタリア語、アラビア語。地域を対象とする場合は1〜2言語。追加のロケールごとに、対応地域のオーガニックインストールが5〜15% 増加します。App Storeは少なくとも英語ローカライゼーションを必須としています。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。