架空言語とは、アプリを翻訳する際に、UI やレイアウトなど、翻訳関連の問題を引き起こす言語特性をシミュレーションできるように設計された言語です。架空言語は、ローカライズ可能なすべてのメッセージに対してインスタント自動翻訳を行うことで作成され、英語で判読可能な形式になっています。架空言語に変換されていないテキストがあった場合、ソースコード内に翻訳不可能なメッセージが存在していることを示します。
架空言語を利用すると、メッセージをソース リポジトリに commit する前に、UI テキストやそのレイアウトを調整し、後で送信して翻訳できるようになるため、時間とコストが節約されます。翻訳に関する潜在的な問題のリストについては、ローカライズに関する問題を発見するのセクションをご覧ください。
Android 架空言語の名前は標準の言語 / 地域命名規則に従い、その言語 / 地域 ID は BCP 47 準拠のプログラミング言語で解析可能です。この意味で、架空言語は、フランス語、中国語、ロシア語など、他の言語 / 地域と同じように使用できます。
Android プラットフォームでは、LTR(左から右)言語と RTL(右から左)言語を示す下記の 2 つの架空言語が用意されています。
英語(XA): ベースの英語 UI テキストにラテン語のアクセントを追加し、さらに、アクセントなしテキストを追加して元のテキストを拡張し、各メッセージ ユニットを角かっこで囲みます。この拡張テキストから、潜在的な問題が明らかになります。潜在的な問題としては、レイアウトの破損やメッセージ構文形式の異常などがあります。たとえば、1 つの文が複数の部分に分割され、複数の角かっこ付きメッセージとして表示される場合などが該当します。英語(XA)架空言語を図 1 に示します。
AR(XB): 元の LTR(左から右)メッセージのテキスト方向を、RTL(右から左)方向に設定します。これにより、元のメッセージの文字の順序が逆になります。AR(XB)架空言語を図 2 に示します。
架空言語を利用すると、RTL 言語を書いたり話したりすることができなくても、アプリの RTL バージョンを作成できます。
架空言語を有効にする
架空言語は通常、デベロッパー向けのビルドに追加されます。デバイス上で架空言語を選択すると、架空言語をサポートするすべてのアプリに対して、選択した架空言語の特性が適用されます(設定アプリやクイック設定パネルなど、すべてのシステムアプリが含まれます)。
Android 架空言語を使用するには、Android 4.3(API レベル 18)以降を搭載したデバイス上で、開発者向けオプションを有効にする必要があります。
架空言語を有効にする手順は次のとおりです。
Android Studio 内で、
build.gradle
ファイルに以下の構成を追加して、対象アプリの架空言語バージョンを有効にします。Groovy
android { ... buildTypes { debug {
pseudoLocalesEnabled
true } } }Kotlin
android { ... buildTypes.getByName("debug") { isPseudoLocalesEnabled = true } }
アプリをビルドして実行します。
設定アプリを使用して、架空言語を選択します。以下に示すように、Android バージョンによって手順が異なります。
Android 5.0(API レベル 21)以降
- デバイス上で、設定アプリを開き、[言語と入力] > [言語の設定] をタップします。
- [言語の設定] リストで、架空言語のタブをドラッグしてリストの先頭に移動し、アクティブな言語に設定します(図 3 を参照)。
Android 4.4.4(API レベル 19)以下
- デバイス上で、設定アプリを開き、[言語と入力] > [言語の設定] > [言語を追加] をタップします。
- 架空言語をタップして、[言語の設定] リストに追加します。
- [言語の設定] リストで、架空言語のタブをドラッグしてリストの先頭に移動し、アクティブな言語に設定します(図 3 を参照)。
ローカライズに関する問題を発見する
架空言語を使用すると、UI 内に潜在しているローカライズに関する問題を効率的かつ効果的に発見することができます。以下のような領域に関する問題を検出できます。
- ハードコーディングされていて翻訳用に送信できない文字列は、架空言語内ではアクセントなしテキストとして表示されるため、認識できます。
- 架空言語でテキストを拡張したことで UI レイアウトに問題が発生した場合、現実の言語 / 地域でも、テキストの長さが原因で UI が損なわれるおそれがあります。
1 つのメッセージが 2 つ以上の角かっこ付きメッセージに分割されて表示された場合、文字列連結という問題が存在していることがわかります。翻訳者は、各部分が関連していることを知らずに各部分を個別に翻訳することになるため、正しく翻訳されなくなる可能性があります。また、言語によっては、文内の部分の順序が異なる場合や、文構造が完全に異なる場合があるため、文字列連結が存在すると、正しい翻訳が不可能になることがあります。たとえば、日本語や韓国語、タミル語などの言語では、動詞は文末に配置されます。文が連結されていると、翻訳者は必要に応じて単語の順序を変更することができなくなります。
双方向(BIDI)テキストに関する問題を発見できます。たとえば、架空言語に変換後、あるテキスト方向のコンテンツ内に、反対のテキスト方向のインライン フレーズが含まれていて、文字列が読みにくい場合、この問題が存在している可能性があります。
要素が正しく逆順に配置されていないケースなど、RTL(右から左)に関する問題を発見できます。たとえば、架空言語に変換後、UI 要素が RTL 方向になっていない場合や、テキストが反転せず、RTL 方向になっていない場合、句読点が誤って配置されている場合などがあります。「pseudolocales rule!」という文字列であれば、「!elur selacoloduesp」と変換される必要がありますが、「elur selacoloduesp!」と変換された場合は、句読点の配置が間違っています。