Ответ 1
В Linux/Unix/Mac настройки LC_ALL
и LANG
могут управлять языковым стандартом по умолчанию для программ Java. В Windows локали устанавливаются с панели управления в разделе "Региональные и языковые параметры".
Когда JVM запускается в среде * nix, он будет делать это:
- Сканировать среду
LC_ALL
- Если
LC_ALL
не существует, отсканируйте среду дляLANG
- Если установлен параметр JVM
user.language
, используйте вместо переменных окружения. - Если ничего не установлено, по умолчанию используется
en_US
(я считаю, что это последний случай сбоя)
В вашей среде у вас LC_ALL
установлено значение C
, которое является только языком языка C. Это в основном традиционный откат к дням, когда локали не использовались.
Вы можете изменить LC_ALL
в вашем случае и перезапустить JVM, и вы должны получить новое значение для java.util.Locale.getDefault()
.
Пример:
import java.util.Locale;
public class LocaleTest {
public static void main(String[] args) {
System.out.println(Locale.getDefault());
}
}
Здесь выполняется:
> LC_ALL=en_UK java LocaleTest
en_UK
> LC_ALL=ja_JP java LocaleTest
ja_JP
Также обратите внимание, что если вы используете Java 1.7.0-b147, есть ошибка с тем, что JRE не распознает настройки среды для локали и всегда будет использовать локальную систему.
Отчет об ошибке здесь: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7073906