Из документации:
ISO 639 не является стабильным стандартом;некоторые коды языков, которые он определяет * (в частности, «iw», «ji» и «in»), изменились.Этот конструктор принимает как * старые коды ("iw", "ji" и "in"), так и новые коды ("he", "yi" и "id"), но все остальные * API в Locale будут возвращатьтолько СТАРЫЕ коды.
Так что id
является новым, однако в документации конкретно сказано, что для этого случая будет возвращено in
.Это почему?Я полагаю, возможно, не стоит ломать старые приложения, используя in
как ожидаемый результат, другими словами, для поддержки обратной совместимости.
Если вам нужно проверить, является ли locale
, который вы используете, индонезийским, то рекомендуетсявероятно, было бы создать некоторую статическую константную переменную с указанным языковым стандартом и проверить равенство с ней.
Так что в некотором классе Util (в Kotlin вы можете использовать вместо него объект-компаньон):
public static final Locale INDONESIAN_LOCALE = new Locale("id");
и когда вам нужно проверить:
if (INDONESIAN_LOCALE.equals(receivedLocale)) {
...they are the same...
}