Ответ 1
Вы можете явно использовать локаль по умолчанию:
return getString(R.string.usertab1).toUpperCase(Locale.getDefault());
В принципе, вы не хотите, чтобы явным образом позволял устройству использовать значение по умолчанию, потому что это может означать, что вы просто игнорируете тот факт, что это может быть проблемой. Для машиночитаемого контента вы можете указать конкретную локаль (например, Locale.ENGLISH
), чтобы вы всегда получали возможность повторного использования из данных. Чтобы показать пользователя, явно указать локаль по умолчанию, должно быть хорошо.
Для более полного чтения:
Общей ошибкой является неявное использование стандартного языка при выпуске, предназначенном для машинного чтения. Это, как правило, работает на тестовых устройствах разработчиков (особенно потому, что многие разработчики используют en_US), но не работает при запуске на устройстве, пользователь которого находится в более сложной локали.
Например, если вы форматируете целые числа, некоторые локали будут использовать десятичные числа без ASCII. В качестве другого примера, если вы форматируете числа с плавающей запятой, некоторые локали будут использовать
','
в качестве десятичной точки и'.'
для группировки цифр. Это правильно для чтения человеком, но может вызвать проблемы, если они представлены на другом компьютере (parseDouble(String)
не может разобрать такой номер, например). Вы также должны опасаться перегрузокtoLowerCase()
иtoUpperCase()
, которые не принимают локаль: в Турции, например, символы'i'
и'i'
не будут преобразованы в'i'
и'i'
. Это правильное поведение для турецкого текста (например, ввод пользователя), но неприемлемо для, скажем, HTTP-заголовков.