Вопрос по linux, java, unix – Locale.getDefault () всегда возвращает en

11

Servers на Unix-машине всегда использует en в качестве локали по умолчанию. Ниже приведен вывод локали

 LANG=en_US
 LC_CTYPE="C"
 LC_NUMERIC="C"
 LC_TIME="C"
 LC_COLLATE="C"
 LC_MONETARY="C"
 LC_MESSAGES="C"
 LC_ALL=C

Я просто не понимаю, правильно ли настроен LANG, почему серверы запускаются с локали.

ты перезапустил jvm? Alex Stybaev

Ваш Ответ

1   ответ
23

LC_ALL а такжеLANG может управлять языком по умолчанию для программ Java. В Windows локали устанавливаются из панели управления в разделе «Язык и региональные стандарты».

Когда JVM запускается в среде * nix, она сделает это:

Сканирование среды дляLC_ALLЕслиLC_ALL не существует, просканируйте окружение на наличиеLANG Если настройка JVMuser.language установлен, используйте его вместо переменных окружения. Если ничего не установлено, по умолчаниюen_US (Я считаю, что это последний случай отказа)

В твоей среде у тебя естьLC_ALL установлен в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

Спасибо Birryree. Но метод getDefault возвращает Locale на основе свойств user.language. Если эти свойства не передаются явно во время работы таких серверов, как -Duser.language = en_GB, как эти значения устанавливаются? Эти свойства получают наборы, когда пользователь входит в систему, или jvm устанавливает эти свойства в зависимости от среды. Delta
@ Delta - как я уже говорил, он будет смотреть на вашу локальную среду и использоватьLC_ALL илиLANG переменные для локали при запуске JVM. Если ничего не установлено, по умолчанию будет использоваться жестко закодированное значение en_US). wkl
Спасибо Birreyree. Я собираюсь внести это изменение и посмотреть, будет ли оно работать правильно. Я буду держать вас в курсе. Благодарност Delta
Благодарность. При установке LC_ALL проблема исправлена. Delta

Похожие вопросы