Ответ 1
Если это просто для тестирования, вы можете программно изменить языковой стандарт без каких-либо проблем. Это изменит конфигурацию вашего приложения, и вы сможете протестировать свой код с новым языковым стандартом. Он имеет такой же эффект, как если бы пользователь изменил его. Если вы хотите автоматизировать свои тесты, вы можете написать script, который изменяет локаль с помощью 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:
Обновление Android O.
При использовании в методе Android O Locale.setDefault(Category.DISPLAY, locale)
следует использовать (подробнее см. изменения поведения).