目次
ローカリゼーションテスト:多言語ソフトウェア検証の完全ガイド
重要ポイント
- ローカリゼーションテストは、翻訳が正確かどうかだけでなく、ソフトウェアがすべてのターゲットロケールで正しく動作するかを検証します
- テストカテゴリには、言語的テスト、コスメティック/UIテスト、機能テスト、ロケール固有テスト、アクセシビリティテストが含まれます
- 疑似ローカリゼーション(Pseudo-localization)は、実際の翻訳なしにテキスト拡張、特殊文字、RTLをシミュレートすることでi18nの問題を早期に発見します
- 自動テストはプレースホルダー、文字列の長さ、フォーマットの正確さ、UIレイアウトを検証できますが、言語的な正確さには人によるレビューが必要です
- テストはリリース前の最終フェーズとしてではなく、開発と並行して継続的に実施する必要があります
ローカリゼーションテストとは?
ローカリゼーションテストは、ローカライズされた製品がターゲットオーディエンスに対して正しく機能するかを検証します。翻訳が正確かどうかを確認するだけでなく、UIレイアウト、フォーマット、機能性、文化的適切さなど、ユーザー体験全体が各ロケールで正しいことを確認します。
よくある誤解は、ローカリゼーションテストが単なる翻訳の校正だというものです。実際には、多くのローカリゼーションのバグは技術的なものです。テキストの切り捨て、レイアウトの崩れ、誤った日付フォーマット、機能しないリンク、エンコーディングエラーなど、翻訳の品質とは無関係の問題が多く存在します。
テストカテゴリ
言語的テスト
翻訳がターゲットオーディエンスにとって正確、自然、適切であることを検証します。
確認事項:
- 翻訳の正確さ(正しい意味を伝えているか?)
- 自然さ(翻訳されたテキストではなく、母国語として聞こえるか?)
- 用語の一貫性(「Dashboard」はどこでも同じように翻訳されているか?)
- トーンと丁寧さ(そのマーケットの製品の声に合っているか?)
- 文法とスペル(ロケールに対して正確か — イギリス英語とアメリカ英語、ブラジルポルトガル語とヨーロッパポルトガル語)
担当者: ターゲット言語のネイティブスピーカー、理想的にはドメイン知識を持つ人。
コスメティック / UIテスト
翻訳されたコンテンツがユーザーインターフェースで正しく表示されることを検証します。
確認事項:
| 問題 | 例 |
|---|---|
| テキストの切り捨て | ボタンラベル「Enregistrer les modifications」が「Enregistrer les modi...」に切り捨てられる |
| テキストのオーバーフロー | 長いドイツ語のラベルが他の要素を画面外に押し出す |
| レイアウトの崩れ | RTLテキストが列の位置ズレを引き起こす |
| フォントレンダリング | CJKやデーヴァナーガリー文字のグリフが欠落している |
| 画像の重なり | テキストがハードコードされた画像やアイコンに重なる |
| レスポンシブデザイン | ローカライズされたコンテンツがモバイルレイアウトを崩す |
テスト方法: すべてのターゲット言語でのすべての画面の視覚的な検査。スクリーンショット比較ツール(Percy、Chromatic)でレイアウト変更の検出を自動化できます。
機能テスト
すべてのロケールでアプリケーションが正しく機能することを検証します。
確認事項:
- ロケール切り替えが正しく機能する(言語変更で状態が失われない)
- フォームがロケール固有の入力を受け付ける(発音区別符号付きの名前、異なる形式の住所)
- アクセント文字で検索が機能する(「café」を検索すると「cafe」も見つかる、またその逆も)
- ソートがロケール固有のルールに従う(スウェーデン語のアルファベット順は英語と異なる)
- リンクとナビゲーションがすべての言語バージョンで機能する
- 通貨、日付、数値の入力がロケールに適したフォーマットを受け付ける
ロケール固有テスト
ロケールを認識する機能が各ターゲットロケールで正しく機能することを検証します。
確認事項:
| 機能 | 例 |
|---|---|
| 日付フォーマット | 米国:03/02/2026、ドイツ:02.03.2026、日本:2026/03/02 |
| 数値フォーマット | 米国:1,234.56、ドイツ:1.234,56、フランス:1 234,56 |
| 通貨フォーマット | 米国:$1,234、日本:¥1,234、ドイツ:1.234 € |
| 時刻フォーマット | 米国:3:30 PM、ドイツ:15:30 |
| 住所フォーマット | 米国:City, State ZIP、ドイツ:ZIP City |
| 電話番号フォーマット | 米国:(555) 123-4567、英国:020 1234 5678 |
アクセシビリティテスト
ローカライズされたコンテンツがアクセシブルであり続けることを検証します。
確認事項:
- スクリーンリーダーが翻訳されたコンテンツを正しく読み上げる
lang属性がHTML要素とインラインの言語切り替えに正しく設定されている- RTLコンテンツが
dir="rtl"で正しくマークされている - 翻訳されたテキストでカラーコントラストが維持されている(長さの違いがレイアウトに影響する場合がある)
- すべてのロケールでキーボードナビゲーションが機能する
疑似ローカリゼーション(Pseudo-Localization)
疑似ローカリゼーションは、実際の翻訳が利用可能になる前に国際化のバグを発見するための技術です。ローカリゼーションの課題をシミュレートする方法でソースの文字列を変換します。
疑似ローカリゼーションの種類
アクセント文字: ASCII文字をアクセント付きの等価文字に置き換えます。
- 「Settings」→「Šéttîñgš」
- テスト対象:Unicodeの処理、フォントレンダリング、文字エンコーディング
テキスト拡張: ヨーロッパ言語で一般的な30〜40%の拡張をシミュレートするために文字列をパディングします。
- 「Save」→「[Šåvé xxxxxxxxx]」
- テスト対象:レイアウトの柔軟性、テキストの切り捨て、レスポンシブデザイン
ブラケット/マーカー: 未翻訳またはハードコードされたテキストを識別するために文字列を可視マーカーで囲みます。
- 「Settings」→「[Šéttîñgš]」
- テスト対象:文字列外部化の完全性 — ブラケットのないテキストはハードコードされています
RTLシミュレーション: レイアウトのミラーリングをテストするためにテキスト方向を逆にします。
- テスト対象:UIミラーリング、双方向テキストの処理、CSS logical properties
疑似ローカリゼーションを使用するタイミング
- 開発中: 導入と同時に問題を発見するために開発ビルドで疑似ローカリゼーションを有効にします
- 翻訳前: 実際の翻訳に投資する前に、すべての文字列が外部化されており、UIが拡張を処理できることを確認します
- CI/CD内: ハードコードされた文字列が検出された場合に失敗する疑似ローカリゼーションのビルドステップを追加します
// 例:疑似ローカリゼーションの設定
{
"pseudoLocale": {
"enabled": true,
"strategy": "accented",
"expansion": 1.35,
"brackets": true
}
}
自動テストのアプローチ
プレースホルダーの検証
ソース文字列のすべてのプレースホルダーが翻訳に存在することを確認します:
// テスト:ソースのすべての{プレースホルダー}が翻訳に存在する
function validatePlaceholders(source, translation) {
const sourcePlaceholders = source.match(/\{[^}]+\}/g) || [];
const translationPlaceholders = translation.match(/\{[^}]+\}/g) || [];
for (const placeholder of sourcePlaceholders) {
if (!translationPlaceholders.includes(placeholder)) {
throw new Error(`翻訳にプレースホルダー ${placeholder} がありません`);
}
}
}
ビジュアルリグレッションテスト
PlaywrightやCypressなどのツールを使用して各ロケールでスクリーンショットをキャプチャし、ベースラインと比較します:
// Playwright:各ロケールのスクリーンショットをキャプチャ
for (const locale of ['en', 'de', 'ja', 'ar']) {
await page.goto(`https://app.example.com/${locale}/dashboard`);
await page.screenshot({
path: `screenshots/${locale}-dashboard.png`,
fullPage: true,
});
}
翻訳の完全性チェック
// すべてのソースキーに翻訳があることを確認
function checkCompleteness(sourceKeys, translationKeys, locale) {
const missing = sourceKeys.filter(key => !translationKeys.includes(key));
if (missing.length > 0) {
console.warn(`${locale}: ${missing.length} 件の翻訳が不足しています`);
console.warn('不足しているキー:', missing.slice(0, 10));
}
}
フォーマット検証
翻訳ファイルが有効であることを確認します:
- JSONファイルがエラーなしで解析される
- XLIFFファイルが整形式のXMLである
- POファイルがmsgid/msgstrのペアが一致している
- ファイル内に重複するキーがない
テストワークフローへの統合
開発中
- 開発ビルドで疑似ローカリゼーションが有効化されています
- 開発者は拡張/アクセント付きテキストを見て、レイアウトの問題をすぐに修正します
- 翻訳者や翻訳の準備への依存がありません
CI/CD内
- プレースホルダー検証がすべてのPRで実行されます
- すべてのターゲットロケールの翻訳の完全性がチェックされます
- フォーマット検証により翻訳ファイルが構文的に正確であることが確保されます
- ビジュアルリグレッションテストで主要ロケールのレイアウト問題が検出されます
リリース前
- 新しいまたは変更されたコンテンツについてネイティブスピーカーによる完全な言語レビュー
- ステージング環境でのインコンテキストレビュー
- ロケール固有の機能の機能テスト
- アラビア語/ヘブライ語のRTLレイアウト検証
- すべてのロケールのアクセシビリティ監査
よくある質問
ローカリゼーションテストにどれくらいの時間を確保すべきですか?
人によるレビューの場合、言語ごとに1,000語あたり2〜4時間の言語レビューを計画してください。機能テストとUIテストはアプリケーションの複雑さによります — 完全なパスのためにターゲットロケールあたり1〜2日を見込んでください。自動チェック(プレースホルダー、フォーマット、完全性)はCI/CDの一部として数分で実行されます。
言語的テストを自動化できますか?
部分的に可能です。自動化ツールは文法とスペルのチェック、一貫性のない用語のフラグ立て、一般的なパターン(句読点の欠落、不適切な丁寧さ)の検出ができます。ただし、翻訳の正確さ、自然さ、文化的適切さの検証には人間のネイティブスピーカーが必要です。機械的なチェックを自動化し、細やかなレビューに人間の時間を投資してください。
最も一般的なローカリゼーションのバグは何ですか?
業界での一般的な経験に基づいて:(1) より長い翻訳によるテキストの切り捨て、(2) 外部化中に見逃されたハードコードされた文字列、(3) 誤った日付/数値フォーマット、(4) RTL言語でのレイアウトの崩れ、(5) 翻訳で削除または重複したプレースホルダー、(6) 特殊文字のエンコーディングの問題。