diff options
Diffstat (limited to 'docs/html/guide/topics/resources/localization.jd')
-rw-r--r-- | docs/html/guide/topics/resources/localization.jd | 972 |
1 files changed, 487 insertions, 485 deletions
diff --git a/docs/html/guide/topics/resources/localization.jd b/docs/html/guide/topics/resources/localization.jd index 3bb9ab5..e86d4c9 100644 --- a/docs/html/guide/topics/resources/localization.jd +++ b/docs/html/guide/topics/resources/localization.jd @@ -1,485 +1,487 @@ -page.title=Localizing with Resources -parent.title=Application Resources -page.tags=localizing,localization,resources,formats,l10n -parent.link=index.html -@jd:body - -<div id="qv-wrapper"> - <div id="qv"> - -<h2>Quickview</h2> - -<ul> - <li>Use resource sets to create a localized app.</li> - <li>Android loads the correct resource set for the user's language and locale.</li> - <li>If localized resources are not available, Android loads your default resources.</li> -</ul> - -<h2>In this document</h2> -<ol> - <li><a href="#resource-switching">Overview: Resource-Switching in Android</a></li> -<li><a href="#using-framework">Using Resources for Localization</a></li> -<li><a href="#strategies">Localization Tips</a></li> -<li><a href="#testing">Testing Localized Applications</a></li> -</ol> - -<h2>See also</h2> - <ol> - <li><a href="{@docRoot}distribute/googleplay/publish/localizing.html">Localization Checklist</a></li> - <li><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></li> - <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a></li> - <li><a href="{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">Activity Lifecycle</a></li> -</ol> -</div> -</div> - -<p>Android will run on many devices in many regions. To reach the most users, -your application should handle text, audio files, numbers, currency, and -graphics in ways appropriate to the locales where your application will be used. -</p> - -<p>This document describes best practices for localizing Android -applications. The principles apply whether you are developing your application -using ADT with Eclipse, Ant-based tools, or any other IDE. </p> - -<p>You should already have a working knowledge of Java and be familiar with -Android resource loading, the declaration of user interface elements in XML, -development considerations such as Activity lifecycle, and general principles of -internationalization and localization. </p> - -<p>It is good practice to use the Android resource framework to separate the -localized aspects of your application as much as possible from the core Java -functionality:</p> - -<ul> - <li>You can put most or all of the <em>contents</em> of your application's -user interface into resource files, as described in this document and in <a -href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a>.</li> - <li>The <em>behavior</em> of the user interface, on the other hand, is driven -by your Java code. - For example, if users input data that needs to be formatted or sorted -differently depending on locale, then you would use Java to handle the data -programmatically. This document does not cover how to localize your Java code. -</li> -</ul> - -<p>For a short guide to localizing strings in your app, see the training lesson, <a -href="{@docRoot}training/basics/supporting-devices/languages.html">Supporting Different Languages</a>. </p> - - -<h2 id="resource-switching">Overview: Resource-Switching in Android</h2> - -<p>Resources are text strings, layouts, sounds, graphics, and any other static -data that your Android application needs. An application can include multiple -sets of resources, each customized for a different device configuration. When a -user runs the application, Android automatically selects and loads the -resources that best match the device.</p> - -<p>(This document focuses on localization and locale. For a complete description -of resource-switching and all the types of configurations that you can -specify — screen orientation, touchscreen type, and so on — see <a -href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing -Alternative Resources</a>.)</p> - -<table border="0" cellspacing="0" cellpadding="0"> - <tr border="0"> - <td width="180" style="border: 0pt none ;"><p class="special-note"> - <strong>When you write your application:</strong> - <br><br> - You create a set of default resources, plus alternatives to be used in - different locales.</p></td> - <td style="border: 0pt none; padding:0"> - <p style="border:0; padding:0"><img src="../../../images/resources/right-arrow.png" alt="right-arrow" - width="51" height="17"></p></td> - <td width="180" style="border: 0pt none ;"><p class="special-note"> - <strong>When a user runs your application:</strong> - <br><br>The Android system selects which resources to load, based on the - device's locale.</p></td> - </tr> -</table> - -<p>When you write your application, you create default and alternative resources -for your application to use. To create resources, you place files within -specially named subdirectories of the project's <code>res/</code> directory. -</p> - - - -<h3 id="defaults-r-important">Why Default Resources Are Important</h3> - -<p>Whenever the application runs in a locale for which you have not provided -locale-specific text, Android will load the default strings from -<code>res/values/strings.xml</code>. If this default file is absent, or if it -is missing a string that your application needs, then your application will not run -and will show an error. -The example below illustrates what can happen when the default text file is incomplete. </p> - -<p><em>Example:</em> -<p>An application's Java code refers to just two strings, <code>text_a</code> and - <code>text_b</code>. This application includes a localized resource file - (<code>res/values-en/strings.xml</code>) that defines <code>text_a</code> and - <code>text_b</code> in English. This application also includes a default - resource file (<code>res/values/strings.xml</code>) that includes a -definition for <code>text_a</code>, but not for <code>text_b</code>: -<ul> - <li>This application might compile without a problem. An IDE such as Eclipse - will not highlight any errors if a resource is missing.</li> - <li>When this application is launched on a device with locale set to English, - the application might run without a problem, because - <code>res/values-en/strings.xml</code> contains both of the needed text - strings.</li> - <li>However, <strong>the user will see an error message and a Force Close - button</strong> when this application is launched on a device set to a - language other than English. The application will not load.</li> -</ul> - - -<p>To prevent this situation, make sure that a <code>res/values/strings.xml</code> - file exists and that it defines every needed string. The situation applies to - all types of resources, not just strings: You - need to create a set of default resource files containing all - the resources that your application calls upon — layouts, drawables, - animations, etc. For information about testing, see <a href="#test-for-default"> - Testing for Default Resources</a>.</p> - -<h2 id="using-framework">Using Resources for Localization</h2> - -<h3 id="creating-defaults">How to Create Default Resources</h3> - -<p>Put the application's default text in -a file with the following location and name:</p> -<p><code> res/values/strings.xml</code> (required directory)</p> - -<p>The text strings in <code>res/values/strings.xml</code> should use the -default language, which is the language that you expect most of your application's users to -speak. </p> - -<p>The default resource set must also include any default drawables and layouts, - and can include other types of resources such as animations. -<br> - <code> res/drawable/</code>(required directory holding at least - one graphic file, for the application's icon on Google Play)<br> - <code> res/layout/</code> (required directory holding an XML - file that defines the default layout)<br> - <code> res/anim/</code> (required if you have any - <code>res/anim-<em><qualifiers></em></code> folders)<br> - <code> res/xml/</code> (required if you have any - <code>res/xml-<em><qualifiers></em></code> folders)<br> - <code> res/raw/</code> (required if you have any - <code>res/raw-<em><qualifiers></em></code> folders) -</p> - -<p class="note"><strong>Tip:</strong> In your code, examine each reference to - an Android resource. Make sure that a default resource is defined for each - one. Also make sure that the default string file is complete: A <em> - localized</em> string file can contain a subset of the strings, but the - <em>default</em> string file must contain them all. -</p> - -<h3 id="creating-alternatives">How to Create Alternative Resources</h3> - -<p>A large part of localizing an application is providing alternative text for -different languages. In some cases you will also provide alternative graphics, -sounds, layouts, and other locale-specific resources. </p> - -<p>An application can specify many <code>res/<em><qualifiers></em>/</code> -directories, each with different qualifiers. To create an alternative resource for -a different locale, you use a qualifier that specifies a language or a -language-region combination. (The name of a resource directory must conform -to the naming scheme described in -<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing -Alternative Resources</a>, -or else it will not compile.)</p> - -<p><em>Example:</em></p> - -<p>Suppose that your application's default language is English. Suppose also -that you want to localize all the text in your application to French, and most -of the text in your application (everything except the application's title) to -Japanese. In this case, you could create three alternative <code>strings.xml</code> -files, each stored in a locale-specific resource directory:</p> - -<ol> - <li><code>res/values/strings.xml</code><br> - Contains English text for all the strings that the application uses, -including text for a string named <code>title</code>.</li> - <li><code>res/values-fr/strings.xml</code><br> - Contain French text for all the strings, including <code>title</code>.</li> - <li><code>res/values-ja/strings.xml</code><br> - Contain Japanese text for all the strings <em>except</em> -<code>title</code>.<br> - <code></code></li> -</ol> - -<p>If your Java code refers to <code>R.string.title</code>, here is what will -happen at runtime:</p> - -<ul> - <li>If the device is set to any language other than French, Android will load -<code>title</code> from the <code>res/values/strings.xml</code> file.</li> - <li>If the device is set to French, Android will load <code>title</code> from -the <code>res/values-fr/strings.xml</code> file.</li> -</ul> - -<p>Notice that if the device is set to Japanese, Android will look for -<code>title</code> in the <code>res/values-ja/strings.xml</code> file. But -because no such string is included in that file, Android will fall back to the -default, and will load <code>title</code> in English from the -<code>res/values/strings.xml</code> file. </p> - -<h3 id="resource-precedence">Which Resources Take Precedence?</h3> - -<p> If multiple resource files match a device's configuration, Android follows a -set of rules in deciding which file to use. Among the qualifiers that can be -specified in a resource directory name, <strong>locale almost always takes -precedence</strong>. </p> -<p><em>Example:</em></p> - -<p>Assume that an application includes a default set of graphics and two other -sets of graphics, each optimized for a different device setup:</p> - -<ul> - <li><code>res/drawable/</code><br> - Contains - default graphics.</li> - <li><code>res/drawable-small-land-stylus/</code><br> - Contains graphics optimized for use with a device that expects input from a - stylus and has a QVGA low-density screen in landscape orientation.</li> - <li><code>res/drawable-ja/</code> <br> - Contains graphics optimized for use with Japanese.</li> -</ul> - -<p>If the application runs on a device that is configured to use Japanese, -Android will load graphics from <code>res/drawable-ja/</code>, even if the -device happens to be one that expects input from a stylus and has a QVGA -low-density screen in landscape orientation.</p> - -<p class="note"><strong>Exception:</strong> The only qualifiers that take -precedence over locale in the selection process are MCC and MNC (mobile country -code and mobile network code). </p> - -<p><em>Example:</em></p> - -<p>Assume that you have the following situation:</p> - -<ul> - <li>The application code calls for <code>R.string.text_a</code></li> - <li>Two relevant resource files are available: - <ul> - <li><code>res/values-mcc404/strings.xml</code>, which includes -<code>text_a</code> in the application's default language, in this case -English.</li> - <li><code>res/values-hi/strings.xml</code>, which includes -<code>text_a</code> in Hindi.</li> - </ul> - </li> - <li>The application is running on a device that has the following -configuration: - <ul> - <li>The SIM card is connected to a mobile network in India (MCC 404).</li> - <li>The language is set to Hindi (<code>hi</code>).</li> - </ul> - </li> -</ul> - -<p>Android will load <code>text_a</code> from -<code>res/values-mcc404/strings.xml</code> (in English), even if the device is -configured for Hindi. That is because in the resource-selection process, Android -will prefer an MCC match over a language match. </p> - -<p>The selection process is not always as straightforward as these examples -suggest. Please read <a -href="{@docRoot}guide/topics/resources/providing-resources.html#BestMatch">How Android Finds -the Best-matching Resource</a> for a more nuanced description of the -process. All the qualifiers are described and listed in order of -precedence in <a -href="{@docRoot}guide/topics/resources/providing-resources.html#table2">Table 2 of Providing -Alternative Resources</a>.</p> - -<h3 id="referring-to-resources">Referring to Resources in Java</h3> - -<p>In your application's Java code, you refer to resources using the syntax -<code>R.<em>resource_type</em>.<em>resource_name</em></code> or -<code>android.R.<em>resource_type</em>.<em>resource_name</em></code><em>.</em> -For more about this, see <a -href="{@docRoot}guide/topics/resources/accessing-resources.html">Accessing Resources</a>.</p> - -<h2 id="checklist">Localization Checklist</h2> - -<p>For a complete overview of the process of localizing and distributing an Android application, -see the <a href="{@docRoot}distribute/googleplay/publish/localizing.html">Localization -Checklist</a> document.</p> - -<h2 id="strategies">Localization Tips</h2> - -<h4 id="failing2">Design your application to work in any locale</h4> - -<p>You cannot assume anything about the device on which a user will -run your application. The device might have hardware that you were not -anticipating, or it might be set to a locale that you did not plan for or that -you cannot test. Design your application so that it will function normally or fail gracefully no -matter what device it runs on.</p> - -<p class="note"><strong>Important:</strong> Make sure that your application -includes a full set of default resources.</p> <p>Make sure to include -<code>res/drawable/</code> and a <code>res/values/</code> folders (without any -additional modifiers in the folder names) that contain all the images and text -that your application will need. </p> - -<p>If an application is missing even one default resource, it will not run on a - device that is set to an unsupported locale. For example, the - <code>res/values/strings.xml</code> default file might lack one string that - the application needs: When the application runs in an unsupported locale and - attempts to load <code>res/values/strings.xml</code>, the user will see an - error message and a Force Close button. An IDE such as Eclipse will not - highlight this kind of error, and you will not see the problem when you - test the application on a device or emulator that is set to a supported locale.</p> - -<p>For more information, see <a href="#test-for-default">Testing for Default Resources</a>.</p> - -<h4>Design a flexible layout</h4> - -<p> If you need to rearrange your layout to fit a certain language (for example -German with its long words), you can create an alternative layout for that -language (for example <code>res/layout-de/main.xml</code>). However, doing this -can make your application harder to maintain. It is better to create a single -layout that is more flexible.</p> - -<p>Another typical situation is a language that requires something different in -its layout. For example, you might have a contact form that should include two -name fields when the application runs in Japanese, but three name fields when -the application runs in some other language. You could handle this in either of -two ways:</p> - -<ul> - <li>Create one layout with a field that you can programmatically enable or -disable, based on the language, or</li> - <li>Have the main layout include another layout that includes the changeable -field. The second layout can have different configurations for different -languages.</li> -</ul> - -<h4>Avoid creating more resource files and text strings than you need</h4> - -<p>You probably do not need to create a locale-specific -alternative for every resource in your application. For example, the layout -defined in the <code>res/layout/main.xml</code> file might work in any locale, -in which case there would be no need to create any alternative layout files. -</p> - -<p>Also, you might not need to create alternative text for every -string. For example, assume the following:</p> - -<ul> - <li>Your application's default language is American -English. Every string that the application uses is defined, using American -English spellings, in <code>res/values/strings.xml</code>. </li> - - <li>For a few important phrases, you want to provide -British English spelling. You want these alternative strings to be used when your -application runs on a device in the United Kingdom. </li> -</ul> - -<p>To do this, you could create a small file called -<code>res/values-en-rGB/strings.xml</code> that includes only the strings that -should be different when the application runs in the U.K. For all the rest of -the strings, the application will fall back to the defaults and use what is -defined in <code>res/values/strings.xml</code>.</p> - -<h4>Use the Android Context object for manual locale lookup</h4> - -<p>You can look up the locale using the {@link android.content.Context} object -that Android makes available:</p> - -<pre>String locale = context.getResources().getConfiguration().locale.getDisplayName();</pre> - -<h2 id="testing">Testing Localized Applications</h2> - -<h3 id="device">Testing on a Device</h3> -<p>Keep in mind that the device you are testing may be significantly different from - the devices available to consumers in other geographies. The locales available - on your device may differ from those available on other devices. Also, the - resolution and density of the device screen may differ, which could affect - the display of strings and drawables in your UI.</p> - -<p>To change the locale on a device, use the Settings application (Home > -Menu > Settings > Locale & text > Select locale). </p> - -<h3 id="emulator">Testing on an Emulator</h3> - -<p>For details about using the emulator, see See <a -href="{@docRoot}tools/help/emulator.html">Android Emulator</a>.</p> -<h4>Creating and using a custom locale</h4> - -<p>A "custom" locale is a language/region combination that the Android -system image does not explicitly support. (For a list of supported locales in -Android platforms see the Version Notes in the <a -href="{@docRoot}sdk/index.html">SDK</a> tab). You can test -how your application will run in a custom locale by creating a custom locale in -the emulator. There are two ways to do this:</p> - -<ul> - <li>Use the Custom Locale application, which is accessible from the -Application tab. (After you create a custom locale, switch to it by -pressing and holding the locale name.)</li> - <li>Change to a custom locale from the adb shell, as described below.</li> -</ul> - -<p>When you set the emulator to a locale that is not available in the Android -system image, the system itself will display in its default language. Your -application, however, should localize properly.</p> - -<h4>Changing the emulator locale from the adb shell</h4> - -<p>To change the locale in the emulator by using the adb shell. </p> - -<ol> - <li>Pick the locale you want to test and determine its language and region codes, for -example <code>fr</code> for French and <code>CA</code> for Canada.<br> - </li> - <li>Launch an emulator.</li> - <li>From a command-line shell on the host computer, run the following -command:<br> - <code>adb shell</code><br> - or if you have a device attached, specify that you want the emulator by adding -the <code>-e</code> option:<br> - <code>adb -e shell</code></li> - <li>At the adb shell prompt (<code>#</code>), run this command: <br> - <code>setprop persist.sys.language [<em>language code</em>];setprop -persist.sys.country [<em>country code</em>];stop;sleep 5;start <br> - </code>Replace bracketed sections with the appropriate codes from Step -1.</li> -</ol> - -<p>For instance, to test in Canadian French:</p> - -<p><code>setprop persist.sys.language fr;setprop persist.sys.country -CA;stop;sleep 5;start </code></p> - -<p>This will cause the emulator to restart. (It will look like a full reboot, -but it is not.) Once the Home screen appears again, re-launch your application (for -example, click the Run icon in Eclipse), and the application will launch with -the new locale. </p> - -<h3 id="test-for-default">Testing for Default Resources</h3> -<p>Here's how to test whether an application includes every string resource that it needs: </p> -<ol><li>Set the emulator or device to a language that your application does not - support. For example, if the application has French strings in - <code>res/values-fr/</code> but does not have any Spanish strings in - <code>res/values-es/</code>, then set the emulator's locale to Spanish. - (You can use the Custom Locale application to set the emulator to an - unsupported locale.)</li> - <li>Run the application.</li> -<li>If the application shows an error message and a Force Close button, it might - be looking for a string that is not available. Make sure that your - <code>res/values/strings.xml</code> file includes a definition for - every string that the application uses.</li> -</ol> -</p> - -<p>If the test is successful, repeat it for other types of - configurations. For example, if the application has a layout file called - <code>res/layout-land/main.xml</code> but does not contain a file called - <code>res/layout-port/main.xml</code>, then set the emulator or device to - portrait orientation and see if the application will run. - +page.title=Localizing with Resources
+parent.title=Application Resources
+page.tags="localizing","localization","resources", "formats", "l10n"
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+ <li>Use resource sets to create a localized app.</li>
+ <li>Android loads the correct resource set for the user's language and locale.</li>
+ <li>If localized resources are not available, Android loads your default resources.</li>
+</ul>
+
+<h2>In this document</h2>
+<ol>
+ <li><a href="#resource-switching">Overview: Resource-Switching in Android</a></li>
+<li><a href="#using-framework">Using Resources for Localization</a></li>
+<li><a href="#strategies">Localization Tips</a></li>
+<li><a href="#testing">Testing Localized Applications</a></li>
+</ol>
+
+<h2>See also</h2>
+ <ol>
+ <li><a href="{@docRoot}distribute/tools/localization-checklist.html">Localization Checklist</a></li>
+ <li><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a></li>
+ <li><a href="{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">Activity Lifecycle</a></li>
+</ol>
+</div>
+</div>
+
+<p>Android will run on many devices in many regions. To reach the most users,
+your application should handle text, audio files, numbers, currency, and
+graphics in ways appropriate to the locales where your application will be used.
+</p>
+
+<p>This document describes best practices for localizing Android
+applications. The principles apply whether you are developing your application
+using ADT with Eclipse, Ant-based tools, or any other IDE. </p>
+
+<p>You should already have a working knowledge of Java and be familiar with
+Android resource loading, the declaration of user interface elements in XML,
+development considerations such as Activity lifecycle, and general principles of
+internationalization and localization. </p>
+
+<p>It is good practice to use the Android resource framework to separate the
+localized aspects of your application as much as possible from the core Java
+functionality:</p>
+
+<ul>
+ <li>You can put most or all of the <em>contents</em> of your application's
+user interface into resource files, as described in this document and in <a
+href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a>.</li>
+ <li>The <em>behavior</em> of the user interface, on the other hand, is driven
+by your Java code.
+ For example, if users input data that needs to be formatted or sorted
+differently depending on locale, then you would use Java to handle the data
+programmatically. This document does not cover how to localize your Java code.
+</li>
+</ul>
+
+<p>For a short guide to localizing strings in your app, see the training lesson, <a
+href="{@docRoot}training/basics/supporting-devices/languages.html">Supporting Different Languages</a>. </p>
+
+
+<h2 id="resource-switching">Overview: Resource-Switching in Android</h2>
+
+<p>Resources are text strings, layouts, sounds, graphics, and any other static
+data that your Android application needs. An application can include multiple
+sets of resources, each customized for a different device configuration. When a
+user runs the application, Android automatically selects and loads the
+resources that best match the device.</p>
+
+<p>(This document focuses on localization and locale. For a complete description
+of resource-switching and all the types of configurations that you can
+specify — screen orientation, touchscreen type, and so on — see <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing
+Alternative Resources</a>.)</p>
+
+<table border="0" cellspacing="0" cellpadding="0">
+ <tr border="0">
+ <td width="180" style="border: 0pt none ;"><p class="special-note">
+ <strong>When you write your application:</strong>
+ <br><br>
+ You create a set of default resources, plus alternatives to be used in
+ different locales.</p></td>
+ <td style="border: 0pt none; padding:0">
+ <p style="border:0; padding:0"><img src="../../../images/resources/right-arrow.png" alt="right-arrow"
+ width="51" height="17"></p></td>
+ <td width="180" style="border: 0pt none ;"><p class="special-note">
+ <strong>When a user runs your application:</strong>
+ <br><br>The Android system selects which resources to load, based on the
+ device's locale.</p></td>
+ </tr>
+</table>
+
+<p>When you write your application, you create default and alternative resources
+for your application to use. To create resources, you place files within
+specially named subdirectories of the project's <code>res/</code> directory.
+</p>
+
+
+
+<h3 id="defaults-r-important">Why Default Resources Are Important</h3>
+
+<p>Whenever the application runs in a locale for which you have not provided
+locale-specific text, Android will load the default strings from
+<code>res/values/strings.xml</code>. If this default file is absent, or if it
+is missing a string that your application needs, then your application will not run
+and will show an error.
+The example below illustrates what can happen when the default text file is incomplete. </p>
+
+<p><em>Example:</em>
+<p>An application's Java code refers to just two strings, <code>text_a</code> and
+ <code>text_b</code>. This application includes a localized resource file
+ (<code>res/values-en/strings.xml</code>) that defines <code>text_a</code> and
+ <code>text_b</code> in English. This application also includes a default
+ resource file (<code>res/values/strings.xml</code>) that includes a
+definition for <code>text_a</code>, but not for <code>text_b</code>:
+<ul>
+ <li>This application might compile without a problem. An IDE such as Eclipse
+ will not highlight any errors if a resource is missing.</li>
+ <li>When this application is launched on a device with locale set to English,
+ the application might run without a problem, because
+ <code>res/values-en/strings.xml</code> contains both of the needed text
+ strings.</li>
+ <li>However, <strong>the user will see an error message and a Force Close
+ button</strong> when this application is launched on a device set to a
+ language other than English. The application will not load.</li>
+</ul>
+
+
+<p>To prevent this situation, make sure that a <code>res/values/strings.xml</code>
+ file exists and that it defines every needed string. The situation applies to
+ all types of resources, not just strings: You
+ need to create a set of default resource files containing all
+ the resources that your application calls upon — layouts, drawables,
+ animations, etc. For information about testing, see <a href="#test-for-default">
+ Testing for Default Resources</a>.</p>
+
+<h2 id="using-framework">Using Resources for Localization</h2>
+
+<h3 id="creating-defaults">How to Create Default Resources</h3>
+
+<p>Put the application's default text in
+a file with the following location and name:</p>
+<p><code> res/values/strings.xml</code> (required directory)</p>
+
+<p>The text strings in <code>res/values/strings.xml</code> should use the
+default language, which is the language that you expect most of your application's users to
+speak. </p>
+
+<p>The default resource set must also include any default drawables and layouts,
+ and can include other types of resources such as animations.
+<br>
+ <code> res/drawable/</code>(required directory holding at least
+ one graphic file, for the application's icon on Google Play)<br>
+ <code> res/layout/</code> (required directory holding an XML
+ file that defines the default layout)<br>
+ <code> res/anim/</code> (required if you have any
+ <code>res/anim-<em><qualifiers></em></code> folders)<br>
+ <code> res/xml/</code> (required if you have any
+ <code>res/xml-<em><qualifiers></em></code> folders)<br>
+ <code> res/raw/</code> (required if you have any
+ <code>res/raw-<em><qualifiers></em></code> folders)
+</p>
+
+<p class="note"><strong>Tip:</strong> In your code, examine each reference to
+ an Android resource. Make sure that a default resource is defined for each
+ one. Also make sure that the default string file is complete: A <em>
+ localized</em> string file can contain a subset of the strings, but the
+ <em>default</em> string file must contain them all.
+</p>
+
+<h3 id="creating-alternatives">How to Create Alternative Resources</h3>
+
+<p>A large part of localizing an application is providing alternative text for
+different languages. In some cases you will also provide alternative graphics,
+sounds, layouts, and other locale-specific resources. </p>
+
+<p>An application can specify many <code>res/<em><qualifiers></em>/</code>
+directories, each with different qualifiers. To create an alternative resource for
+a different locale, you use a qualifier that specifies a language or a
+language-region combination. (The name of a resource directory must conform
+to the naming scheme described in
+<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing
+Alternative Resources</a>,
+or else it will not compile.)</p>
+
+<p><em>Example:</em></p>
+
+<p>Suppose that your application's default language is English. Suppose also
+that you want to localize all the text in your application to French, and most
+of the text in your application (everything except the application's title) to
+Japanese. In this case, you could create three alternative <code>strings.xml</code>
+files, each stored in a locale-specific resource directory:</p>
+
+<ol>
+ <li><code>res/values/strings.xml</code><br>
+ Contains English text for all the strings that the application uses,
+including text for a string named <code>title</code>.</li>
+ <li><code>res/values-fr/strings.xml</code><br>
+ Contain French text for all the strings, including <code>title</code>.</li>
+ <li><code>res/values-ja/strings.xml</code><br>
+ Contain Japanese text for all the strings <em>except</em>
+<code>title</code>.<br>
+ <code></code></li>
+</ol>
+
+<p>If your Java code refers to <code>R.string.title</code>, here is what will
+happen at runtime:</p>
+
+<ul>
+ <li>If the device is set to any language other than French, Android will load
+<code>title</code> from the <code>res/values/strings.xml</code> file.</li>
+ <li>If the device is set to French, Android will load <code>title</code> from
+the <code>res/values-fr/strings.xml</code> file.</li>
+</ul>
+
+<p>Notice that if the device is set to Japanese, Android will look for
+<code>title</code> in the <code>res/values-ja/strings.xml</code> file. But
+because no such string is included in that file, Android will fall back to the
+default, and will load <code>title</code> in English from the
+<code>res/values/strings.xml</code> file. </p>
+
+<h3 id="resource-precedence">Which Resources Take Precedence?</h3>
+
+<p> If multiple resource files match a device's configuration, Android follows a
+set of rules in deciding which file to use. Among the qualifiers that can be
+specified in a resource directory name, <strong>locale almost always takes
+precedence</strong>. </p>
+<p><em>Example:</em></p>
+
+<p>Assume that an application includes a default set of graphics and two other
+sets of graphics, each optimized for a different device setup:</p>
+
+<ul>
+ <li><code>res/drawable/</code><br>
+ Contains
+ default graphics.</li>
+ <li><code>res/drawable-small-land-stylus/</code><br>
+ Contains graphics optimized for use with a device that expects input from a
+ stylus and has a QVGA low-density screen in landscape orientation.</li>
+ <li><code>res/drawable-ja/</code> <br>
+ Contains graphics optimized for use with Japanese.</li>
+</ul>
+
+<p>If the application runs on a device that is configured to use Japanese,
+Android will load graphics from <code>res/drawable-ja/</code>, even if the
+device happens to be one that expects input from a stylus and has a QVGA
+low-density screen in landscape orientation.</p>
+
+<p class="note"><strong>Exception:</strong> The only qualifiers that take
+precedence over locale in the selection process are MCC and MNC (mobile country
+code and mobile network code). </p>
+
+<p><em>Example:</em></p>
+
+<p>Assume that you have the following situation:</p>
+
+<ul>
+ <li>The application code calls for <code>R.string.text_a</code></li>
+ <li>Two relevant resource files are available:
+ <ul>
+ <li><code>res/values-mcc404/strings.xml</code>, which includes
+<code>text_a</code> in the application's default language, in this case
+English.</li>
+ <li><code>res/values-hi/strings.xml</code>, which includes
+<code>text_a</code> in Hindi.</li>
+ </ul>
+ </li>
+ <li>The application is running on a device that has the following
+configuration:
+ <ul>
+ <li>The SIM card is connected to a mobile network in India (MCC 404).</li>
+ <li>The language is set to Hindi (<code>hi</code>).</li>
+ </ul>
+ </li>
+</ul>
+
+<p>Android will load <code>text_a</code> from
+<code>res/values-mcc404/strings.xml</code> (in English), even if the device is
+configured for Hindi. That is because in the resource-selection process, Android
+will prefer an MCC match over a language match. </p>
+
+<p>The selection process is not always as straightforward as these examples
+suggest. Please read <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#BestMatch">How Android Finds
+the Best-matching Resource</a> for a more nuanced description of the
+process. All the qualifiers are described and listed in order of
+precedence in <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#table2">Table 2 of Providing
+Alternative Resources</a>.</p>
+
+<h3 id="referring-to-resources">Referring to Resources in Java</h3>
+
+<p>In your application's Java code, you refer to resources using the syntax
+<code>R.<em>resource_type</em>.<em>resource_name</em></code> or
+<code>android.R.<em>resource_type</em>.<em>resource_name</em></code><em>.</em>
+For more about this, see <a
+href="{@docRoot}guide/topics/resources/accessing-resources.html">Accessing Resources</a>.</p>
+
+<h2 id="checklist">Localization Checklist</h2>
+
+<p>For a complete overview of the process of localizing and distributing an Android application,
+see the <a href="{@docRoot}distribute/tools/localization-checklist.html">Localization
+Checklist</a> document.</p>
+
+<h2 id="strategies">Localization Tips</h2>
+
+<h4 id="failing2">Design your application to work in any locale</h4>
+
+<p>You cannot assume anything about the device on which a user will
+run your application. The device might have hardware that you were not
+anticipating, or it might be set to a locale that you did not plan for or that
+you cannot test. Design your application so that it will function normally or fail gracefully no
+matter what device it runs on.</p>
+
+<p class="note"><strong>Important:</strong> Make sure that your application
+includes a full set of default resources.</p> <p>Make sure to include
+<code>res/drawable/</code> and a <code>res/values/</code> folders (without any
+additional modifiers in the folder names) that contain all the images and text
+that your application will need. </p>
+
+<p>If an application is missing even one default resource, it will not run on a
+ device that is set to an unsupported locale. For example, the
+ <code>res/values/strings.xml</code> default file might lack one string that
+ the application needs: When the application runs in an unsupported locale and
+ attempts to load <code>res/values/strings.xml</code>, the user will see an
+ error message and a Force Close button. An IDE such as Eclipse will not
+ highlight this kind of error, and you will not see the problem when you
+ test the application on a device or emulator that is set to a supported locale.</p>
+
+<p>For more information, see <a href="#test-for-default">Testing for Default Resources</a>.</p>
+
+<h4>Design a flexible layout</h4>
+
+<p> If you need to rearrange your layout to fit a certain language (for example
+German with its long words), you can create an alternative layout for that
+language (for example <code>res/layout-de/main.xml</code>). However, doing this
+can make your application harder to maintain. It is better to create a single
+layout that is more flexible.</p>
+
+<p>Another typical situation is a language that requires something different in
+its layout. For example, you might have a contact form that should include two
+name fields when the application runs in Japanese, but three name fields when
+the application runs in some other language. You could handle this in either of
+two ways:</p>
+
+<ul>
+ <li>Create one layout with a field that you can programmatically enable or
+disable, based on the language, or</li>
+ <li>Have the main layout include another layout that includes the changeable
+field. The second layout can have different configurations for different
+languages.</li>
+</ul>
+
+<h4>Avoid creating more resource files and text strings than you need</h4>
+
+<p>You probably do not need to create a locale-specific
+alternative for every resource in your application. For example, the layout
+defined in the <code>res/layout/main.xml</code> file might work in any locale,
+in which case there would be no need to create any alternative layout files.
+</p>
+
+<p>Also, you might not need to create alternative text for every
+string. For example, assume the following:</p>
+
+<ul>
+ <li>Your application's default language is American
+English. Every string that the application uses is defined, using American
+English spellings, in <code>res/values/strings.xml</code>. </li>
+
+ <li>For a few important phrases, you want to provide
+British English spelling. You want these alternative strings to be used when your
+application runs on a device in the United Kingdom. </li>
+</ul>
+
+<p>To do this, you could create a small file called
+<code>res/values-en-rGB/strings.xml</code> that includes only the strings that
+should be different when the application runs in the U.K. For all the rest of
+the strings, the application will fall back to the defaults and use what is
+defined in <code>res/values/strings.xml</code>.</p>
+
+<h4>Use the Android Context object for manual locale lookup</h4>
+
+<p>You can look up the locale using the {@link android.content.Context} object
+that Android makes available:</p>
+
+<pre>String locale = context.getResources().getConfiguration().locale.getDisplayName();</pre>
+
+<h2 id="testing">Testing Localized Applications</h2>
+
+<h3 id="device">Testing on a Device</h3>
+<p>Keep in mind that the device you are testing may be significantly different from
+ the devices available to consumers in other geographies. The locales available
+ on your device may differ from those available on other devices. Also, the
+ resolution and density of the device screen may differ, which could affect
+ the display of strings and drawables in your UI.</p>
+
+<p>To change the locale on a device, use the Settings application (Home >
+Menu > Settings > Locale & text > Select locale). </p>
+
+<h3 id="emulator">Testing on an Emulator</h3>
+
+<p>For details about using the emulator, see See <a
+href="{@docRoot}tools/help/emulator.html">Android Emulator</a>.</p>
+<h4>Creating and using a custom locale</h4>
+
+<p>A "custom" locale is a language/region combination that the Android
+system image does not explicitly support. (For a list of supported locales in
+Android platforms see the Version Notes in the <a
+href="{@docRoot}sdk/index.html">SDK</a> tab). You can test
+how your application will run in a custom locale by creating a custom locale in
+the emulator. There are two ways to do this:</p>
+
+<ul>
+ <li>Use the Custom Locale application, which is accessible from the
+Application tab. (After you create a custom locale, switch to it by
+pressing and holding the locale name.)</li>
+ <li>Change to a custom locale from the adb shell, as described below.</li>
+</ul>
+
+<p>When you set the emulator to a locale that is not available in the Android
+system image, the system itself will display in its default language. Your
+application, however, should localize properly.</p>
+
+<h4>Changing the emulator locale from the adb shell</h4>
+
+<p>To change the locale in the emulator by using the adb shell. </p>
+
+<ol>
+ <li>Pick the locale you want to test and determine its language and region codes, for
+example <code>fr</code> for French and <code>CA</code> for Canada.<br>
+ </li>
+ <li>Launch an emulator.</li>
+ <li>From a command-line shell on the host computer, run the following
+command:<br>
+ <code>adb shell</code><br>
+ or if you have a device attached, specify that you want the emulator by adding
+the <code>-e</code> option:<br>
+ <code>adb -e shell</code></li>
+ <li>At the adb shell prompt (<code>#</code>), run this command: <br>
+ <code>setprop persist.sys.language [<em>language code</em>];setprop
+persist.sys.country [<em>country code</em>];stop;sleep 5;start <br>
+ </code>Replace bracketed sections with the appropriate codes from Step
+1.</li>
+</ol>
+
+<p>For instance, to test in Canadian French:</p>
+
+<p><code>setprop persist.sys.language fr;setprop persist.sys.country
+CA;stop;sleep 5;start </code></p>
+
+<p>This will cause the emulator to restart. (It will look like a full reboot,
+but it is not.) Once the Home screen appears again, re-launch your application (for
+example, click the Run icon in Eclipse), and the application will launch with
+the new locale. </p>
+
+<h3 id="test-for-default">Testing for Default Resources</h3>
+<p>Here's how to test whether an application includes every string resource that it needs: </p>
+<ol><li>Set the emulator or device to a language that your application does not
+ support. For example, if the application has French strings in
+ <code>res/values-fr/</code> but does not have any Spanish strings in
+ <code>res/values-es/</code>, then set the emulator's locale to Spanish.
+ (You can use the Custom Locale application to set the emulator to an
+ unsupported locale.)</li>
+ <li>Run the application.</li>
+<li>If the application shows an error message and a Force Close button, it might
+ be looking for a string that is not available. Make sure that your
+ <code>res/values/strings.xml</code> file includes a definition for
+ every string that the application uses.</li>
+</ol>
+</p>
+
+<p>If the test is successful, repeat it for other types of
+ configurations. For example, if the application has a layout file called
+ <code>res/layout-land/main.xml</code> but does not contain a file called
+ <code>res/layout-port/main.xml</code>, then set the emulator or device to
+ portrait orientation and see if the application will run.
+
+
+
|