У меня есть приложение для Android с английскими строками в values / strings.xml.Для каждой строки в этом файле у меня есть запись в values-ja / strings.xml с японским переводом этой строки.Если я установлю эмулятор, Nexus One или Nexus S на японский, пользовательский интерфейс будет отображать текст на японском языке.Большую часть времени.
Иногда некоторая часть пользовательского интерфейса отображается на английском языке, хотя текущим языковым стандартом является ja-JP.Например, я написал этот тестовый код в методе onCreate () одного из моих действий:
Log.e(TAG, "Default locale = '" + Locale.getDefault().toString() + "'");
Log.e(TAG, "My string = '" + getResources().getString(R.string.my_string) + "'");
Иногда я вижу в LogCat:
Default locale is 'ja_JP'
My string is '日本'
В других случаях я увижу:
Default locale is 'ja_JP'
My string is 'English'
Иногда эта проблема решается поворотом телефона.Иногда это решается путем выхода и перезапуска приложения.Иногда только часть одного экрана на английском языке.Иногда эта проблема возникает со строками, которые извлекаются из ресурсов через код, а иногда это происходит со строками, на которые ссылается только макет.Нигде в моем приложении я не вызываю Locale.setDefault (), так что это не вызывает проблему.
ОБНОВЛЕНИЕ
Я нашел способ исправить проблему дляконкретная деятельность.В этом действии onCreate ():
Log.e(TAG, "getString: '" + getString(R.string.my_string) + "'");
Log.e(TAG, "getResources().getConfiguration(): '" +
getResources().getConfiguration().toString() + "'");
Log.e(TAG, "getResources().getDisplayMetrics(): '" +
getResources().getDisplayMetrics().toString() + "'");
Log.e(TAG, "Setting configuration to getConfiguration()");
getResources().updateConfiguration(getResources().getConfiguration(),
getResources().getDisplayMetrics());
Log.e(TAG, "getString: '" + getString(R.string.my_string) + "'");
Log.e(TAG, "getResources().getConfiguration(): '" +
getResources().getConfiguration().toString() + "'");
Log.e(TAG, "getResources().getDisplayMetrics(): '" +
getResources().getDisplayMetrics().toString() + "'");
Это приводит к следующему в LogCat:
getString: 'English'
getResources().getConfiguration(): '{ scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=8}'
getResources().getDisplayMetrics(): 'DisplayMetrics{density=1.5, width=480, height=800, scaledDensity=1.5, xdpi=254.0, ydpi=254.0}'
Setting configuration to getConfiguration()
getString: '日本'
getResources().getConfiguration(): '{ scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=3/1 orien=1 layout=34 uiMode=17 seq=8}'
getResources().getDisplayMetrics(): 'DisplayMetrics{density=1.5, width=480, height=800, scaledDensity=1.5, xdpi=254.0, ydpi=254.0}'
Как видно из журнала, ничего в текущей конфигурации не меняется, кроме getString() дает разные результаты.
Нецелесообразно использовать этот обходной путь в каждом месте моего приложения, где может использоваться ресурс, но, надеюсь, это дает подсказку о том, что идет не так.