テストのみの場合は、問題なくプログラムでロケールを変更できます。アプリの構成が変更され、新しいロケールでコードをテストできるようになります。ユーザーが変更した場合と同じ効果があります。テストを自動化したい場合は、ここで説明されadb shell
ているようにロケールを変更するスクリプトを作成し、後でテストを開始できます。
英語、ドイツ語、スペイン語のロケールで「キャンセル」という単語の翻訳をテストする例を次に示します。
public class ResourcesTestCase extends AndroidTestCase {
private void setLocale(String language, String country) {
Locale locale = new Locale(language, country);
// here we update locale for date formatters
Locale.setDefault(locale);
// here we update locale for app resources
Resources res = getContext().getResources();
Configuration config = res.getConfiguration();
config.locale = locale;
res.updateConfiguration(config, res.getDisplayMetrics());
}
public void testEnglishLocale() {
setLocale("en", "EN");
String cancelString = getContext().getString(R.string.cancel);
assertEquals("Cancel", cancelString);
}
public void testGermanLocale() {
setLocale("de", "DE");
String cancelString = getContext().getString(R.string.cancel);
assertEquals("Abbrechen", cancelString);
}
public void testSpanishLocale() {
setLocale("es", "ES");
String cancelString = getContext().getString(R.string.cancel);
assertEquals("Cancelar", cancelString);
}
}
Eclipse での実行結果は次のとおりです。
アンドロイド O アップデート.
Android O メソッドで実行する場合Locale.setDefault(Category.DISPLAY, locale)
は、使用する必要があります (詳細については、動作の変更を参照してください)。