Облом. Я надеялся, что это было единственное место, где что-то происходило в них. Мне придется подумать дальше.

я есть приложение для 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 () дает другие результаты.

Практически невозможно использовать этот обходной путь в каждом месте моего приложения, где может использоваться ресурс, но, надеюсь, это дает подсказку о том, что происходит не так.

Ответы на вопрос(2)

Ваш ответ на вопрос