Translations Editor では、デフォルトの文字列リソースとその翻訳版をすべてまとめて表示して編集できます。
アプリをさまざまな言語に翻訳する方法の概要については、各種の言語および文化をサポートするをご覧ください。
文字列リソース
プロジェクトの文字列リソースは、strings.xml
ファイルに格納されています。プロジェクトには、アプリのデフォルト言語の文字列リソースを格納するデフォルトの strings.xml
ファイルがあります。デフォルト言語とは、そのアプリの大半のユーザーが使用すると考えられる言語です。また、アプリで他の言語に対応する場合、その言語の文字列リソースを格納する翻訳版の strings.xml
ファイルも追加できます。
デフォルトの strings.xml
ファイルの作成が完了したら、自分で、または有料の専門サービスを利用して、翻訳版を追加できます。いずれの場合も、Android Studio の機能を利用して、ローカライズ可能なテキストの管理とテストを行うことをおすすめします。翻訳の専門サービスについては、翻訳サービスの注文をご覧ください。
Translations Editor を開く
Translations Editor は、Android Studio の以下の場所から開くことができます。
Android ビューから開く
- 左側の [Project] > [Android] パネルで、[ModuleName] > [res] > [values] を選択します。
- strings.xml ファイルを右クリックし、[Open Translations Editor] を選択します。
Translations Editor が開き、
strings.xml
ファイルに格納されているキーと値のペアが表示されます。注: 翻訳版の
strings.xml
ファイルがある場合、対応する values フォルダ(フォルダ名には言語を示す接尾辞が付いています)がプロジェクトに複数存在します。たとえば、スペイン語のフォルダは values-es です。デフォルトのstrings.xml
ファイルは、常に values フォルダ(接尾辞なし)にあります。
図 1 の画面では、簡単なアプリ用のデフォルトのアプリテキスト(この場合は英語)が Translations Editor に表示されています。これは、翻訳作業を行う前の状態です。翻訳版の strings.xml
ファイルの内容は、図 2 に示すように、[Untranslatable] 列の右側にある言語ごとの列に表示されます。
strings.xml 編集画面から開く
任意の strings.xml
ファイルの編集画面から、Translations Editor を開くことができます。
- 左側の [Project] > [Android] パネルで、[ModuleName] > [res] > [values] を選択します。
- strings.xml をダブルクリックして編集画面を開きます。
- strings.xml の編集画面で、右上隅の [Open editor] をクリックします。
注: [Hide notification] をクリックすると、[Open editor] が非表示になります。元に戻すには、プロジェクトを閉じて再度開きます。
Design Editor から開く
Layout Editor の Design Editor から Translations Editor を開くと、レイアウトに合わせてデフォルトおよび翻訳版のテキストを編集できます。Design Editor 内での言語の切り替えについては、Design Editor による翻訳版テキストの表示をご覧ください。
- 左側の [Project] > [Android] パネルで、[ModuleName] > [res] > [layout] を選択します。
- content_main.xml をダブルクリックして編集画面を開きます。
- 左下隅の [Design] タブをクリックして、Design Editor を表示します。
- Design Editor で、言語プルダウン リスト をクリックします。
- [Edit Translations] を選択します。
翻訳不可の行を設定する
Translations Editor で [Untranslatable] をオンにすると、その行のテキストが翻訳不可であると示すことができます。たとえば、商品名や商標などの商品固有のテキストや、定訳のない技術用語を翻訳不可にします。
[Untranslatable] をオンにすると、デフォルトの strings.xml
ファイルの該当行に translatable="false" が追加されます。次の例では、最初の行の EasyApp は製品名であるため、翻訳不可に設定されています。
<resources> <string name="app_name" translatable="false">EasyApp</string> <string name="action_settings">Settings</string> <string name="easy_app">I am a Simple App!</string> <string name="next_page">Next Page</string> <string name="second_page_message">I am the Second Page!</string> <string name="title_activity_second">SecondActivity</string> </resources>
言語の追加と削除
Translations Editor は BCP 47 に対応しており、ロケールコードと地域(国)コードの組み合わせで目的のローカライズを特定します。ロケールで定義されるのは言語だけではありません。国によって異なる日時、通貨、小数などの書式も定義されます。
言語を追加する手順は次のとおりです。
- Translations Editor で、地球アイコン をクリックします。
- プルダウン リストから、追加する言語を選択します。
新しい言語が Translations Editor に表示され、
strings.xml
ファイルを格納する values-* フォルダがプロジェクトに追加されます。たとえば、スペイン語のフォルダは values-es です。
言語を削除する手順は次のとおりです。
Translations Editor で言語を削除するには、該当する列のすべての値を削除するか(テキストの編集、追加、削除を参照)、次のようにして、その言語のプロジェクト フォルダを削除します。
- 左側の [Project] > [Android] パネルで、[ModuleName] > [res] を選択します。
- 削除する言語の values-* フォルダを右クリックします。たとえば、ヒンディー語のフォルダは values-hi です。
- プルダウン リストから [Delete] を選択すると、フォルダとその中の strings.xml ファイルが削除されます。
テキストの編集、追加、削除
テキストの設定は、strings.xml
ファイルで直接操作することも、Translations Editor で操作することもできます。このセクションでは、Translations Editor で操作する方法について説明します。Translations Editor では、リストビューか、または Translations Editor の下部にある [Translation] フィールドで、テキストの編集、追加、削除を行えます。
リストビュー
テキストの編集または追加を行うには、次の手順を実行します。
- テキストの編集または追加を行うセルをダブルクリックします。
- キーボードを使ってコピーと貼り付けを行います。発音区別符号がキーボードでサポートされていれば、リストビューに直接入力できます。
- Tab キーを押すか、カーソルをセルの外に移動します。
テキストを削除するには、次の手順を実行します。
- 削除するセルをダブルクリックします。
- リスト表示で、テキストを選択して Delete キーを押します。
- Tab キーを押すか、カーソルをセルの外に移動します。
Translation フィールド
テキストの編集または追加を行うには、次の手順を実行します。
- リストビューで、テキストの編集または追加を行うセルを 1 回クリックします。
- [Translation] フィールドで、キーボードを使ってコピーと貼り付けを行います。発音区別符号がキーボードでサポートされていれば、[Translation] フィールドに直接入力できます。
- Tab キーを押すか、カーソルをセルの外に移動します。
テキストを削除するには、次の手順を実行します。
- 削除するセルを 1 回クリックします。
- [Translation] フィールドで、テキストを選択して Delete キーを押します。
キーの追加と削除
Translations Editor の [Key] 列には、strings.xml
ファイルの各データアイテムの一意の識別子がリストされます。キーの追加と削除は、Translations Editor で行えます。Translations Editor でキーを削除すると、そのキーに対応するすべての翻訳が削除されます。Translations Editor でキーを削除する処理には Safe Delete リファクタリングが使用されるため、キーを削除する前に、そのキーのテキストが他で使用されていないかを確認し、必要に応じて調整する機会が与えられます。Safe Delete リファクタリングにより、キーを削除してもコードをコンパイルできることが保証されます。
キーを追加する手順は次のとおりです。
- Translations Editor で、キー追加ボタン をクリックします。
- 以下のダイアログで、キー名、デフォルト値、デフォルトの strings.xml ファイルの場所を入力します。
キーを削除するには、次の手順を実行します。
- Translations Editor で、削除するキーを選択します。
- キー削除ボタン をクリックします。
[Delete] ダイアログで、Safe Delete を使用するかどうか、コメントと文字列を検索するかどうかを選択し、[OK] をクリックします。
削除しようとしているキーが他で参照(使用)されていない場合、またはすべての参照を安全に無視できる場合、そのキーは削除されます。それ以外の場合は、検出された問題に関する情報を示す [Usages Detected] ダイアログが表示されます。
- [View Usages] を選択して、削除するキーの使用箇所を確認します。[Find Safe Delete Conflicts] ダイアログには、安全に削除できない使用箇所がすべて表示されるので、対応するコードを容易に編集できます。
- 使用箇所を右クリックしてコンテキスト メニューを表示し、[Jump to Source] を選択して、必要な変更を行います。
- [Find Safe Delete Conflicts] パネルで [Rerun Safe Delete] を選択し、注意が必要な使用箇所が残っていないことを確認します。
- 使用箇所の確認が終了したら、[Do Refactor] をクリックしてキーを削除します。
エラーの修正
図 7 の Translations Editor の画面には、英語、フランス語、スペイン語の strings.xml
ファイルの内容が表示されています。赤いテキストは、その行にエラーがあることを示しています。
エラーを修正するには、赤いテキストにカーソルを合わせて、問題の説明とその解決策を表示します。
Translations Editor で変更を行うと、基になる strings.xml
ファイルが変更に応じて更新されます。反対に、strings.xml
ファイルを変更すると、Translations Editor の該当列が変更に応じて更新されます。
Translations Editor での修正例:
- 図 7 の app_name の行では、[Untranslatable] がオンになっているにもかかわらず、スペイン語の翻訳が表示されています。スペイン語の翻訳を削除することで、エラーを修正できます。
- 図 7 の next_page の行には、フランス語の翻訳がありません。キーボードを使用して「Page Suivante」を該当セルにコピーすることで、エラーを修正できます。キーボードでコピーと貼り付け操作を行う方法により、発音区別符号付きのテキストをセルにコピーできます。
Design Editor による翻訳版テキストの表示
翻訳版テキストがアプリのレイアウトでどのように表示されるかを確認するには、次のように、Design Editor でデフォルトのテキストを翻訳版テキストに切り替えます。
- 左側の [Project] > [Android] パネルで、[ModuleName] > [res] > [layout] を選択します。
- content_main.xml をダブルクリックして編集画面を開きます。
- 左下隅の [Design] タブをクリックして、Design Editor を表示します。
- Design Editor で、言語プルダウン リスト をクリックします。
- [Edit Translations] を選択します。
- アプリの表示に使用する言語を選択します。
Design Editor に、選択した言語(この場合はスペイン語)でアプリのレイアウトが表示されます。
Design Editor をデフォルトの言語に戻す
言語をデフォルトに戻すには、[es] > [Language] を選択します。
ローカライズ可能なテキストの管理とテスト
Android プラットフォームと Android Studio には、ローカライズ可能なアプリテキストの管理とテストに役立つ機能がいくつか用意されています。そうした機能の中には、右から左に記述する(RTL)言語(アラビア語やヘブライ語など)に関する問題の解決に役立つオプションがあります。ローカライズ可能なテキストをテストする機能により、メッセージをソース リポジトリにコミットして翻訳に送る前に、UI テキストとそのレイアウトを調整できます。
RTL をサポートするためのプロジェクトのリファクタリング
Android Studio には、TextView
、ConstraintLayout
、および LinearLayout
要素で双方向テキストをサポートするためのリファクタリング コマンドが用意されています。これにより、左から右に記述する(LTR)言語と右から左に記述する(RTL)言語の両方のテキストについて、アプリでの表示とユーザーによる編集が可能になります。このコマンドは、アプリの UI レイアウトとすべてのビュー ウィジェットの自動ミラーリングも行います。テキスト方向の変更とレイアウトのミラーリングを確認するには、Layout Editor でテキスト方向とレイアウト方向のプロパティも設定する必要があります。
RTL をサポートするためにプロジェクトをリファクタリングする手順は次のとおりです
- [Refactor] > [Add RTL support where possible] を選択して、図 11 のダイアログを表示します。
AndroidManifest.xml
ファイルの<application>
要素にandroid:supportsRTL="true"
属性がない場合は、[Update AndroidManifest.xml] チェックボックスをオンにします。- アプリの
targetSdkVersion
が 17 以上の場合は、[Replace Left/Right Properties with Start/End Properties] を選択します。この場合、プロパティ名で「Left」と「Right」の代わりに「Start」と「End」が使用されます。たとえば、android:paddingLeft
はandroid:paddingStart
になります。 - アプリの
targetSdkVersion
が 16 以下の場合は、[Generate -v17 Versions] を選択します。この場合、XML では両方のプロパティ セットが使用されます。たとえば、android:paddingLeft
とandroid:paddingStart
の両方が XML で使用されます。
- [Run] をクリックして、[Find Refactoring Preview] ウィンドウを表示します。
- [Do Refactor] をクリックします。
RTL をサポートするためのプロジェクトのリファクタリングについては、Android 4.2 のネイティブ RTL サポートをご覧ください。
テキスト方向とレイアウト方向のプロパティ
右側の [Properties] ウィンドウには、テキスト コンポーネントとレイアウト コンポーネントの方向を変更するためのプロパティがあります。テキスト ウィジェットには [textDirection] プロパティを使用し、レイアウト ウィジェットには [layoutDirection] プロパティを使用します。方向のプロパティは、右側の [Properties] ウィンドウにリストされ、API レベル 17 以上で機能します。
テキスト方向の変更とレイアウトのミラーリングを確認するには、RTL をサポートするようにプロジェクトをリファクタリングする必要もあります。英語では、テキスト方向を変更しても句読点がテキストの右側から左側に移動するだけです。たとえば、「Hello World!」は「!Hello World」になります。LTR テキストが RTL に切り替わるのを確認するには、アプリで RTL 言語を使用する必要があります。英語を使用している場合に、テスト目的で RTL テキストへの切り替えを確認するには、架空言語を使用します。架空言語は、リファクタリング コマンドと方向プロパティとは無関係です。
方向プロパティにアクセスして使用する手順は次のとおりです。
- Layout Editor で、テキスト ウィジェットを選択します。
- [Properties] ウィンドウを開き、使用する RTL プロパティを検索します。
次のいずれかを選択してプロパティの値を設定します。
- firstStrong: ルートビューのデフォルト。最初に現れた強い方向性を持つ文字により、段落の方向が決定されます。強い方向性を持つ文字がない場合、段落の方向はビューの判定されたレイアウト方向と同じになります。
- anyRtl: 強い RTL 文字が含まれている場合、段落の方向は RTL になります。それ以外の場合は、強い LTR 文字が含まれていれば、LTR になります。どちらも含まれていない場合、段落の方向はビューの判定されたレイアウト方向と同じになります。
- ltr: 段落の方向は LTR になります。
- rtl: 段落の方向は RTL になります。
- locale: 段落の方向はシステム ロケールに基づき決定されます。
- inherit: デフォルト。親に設定された方向が使用されます。
- テキストとレイアウトの反転を確認するには、アプリを実行します。
架空言語
架空言語とは、UI、レイアウト、RTL など、アプリの翻訳で問題となりうる言語特性をシミュレートできるように設計された疑似的なロケールです。架空言語は、すべてのローカライズ可能なメッセージに対して、英語で判読できるインスタント自動翻訳を提供します。これにより、ソースコード内に存在する翻訳不可能なメッセージを発見できます。
架空言語の使用方法については、架空言語を使用してアプリをテストするをご覧ください。