2012-05-22 49 views
11

Máy chủ trên máy unix luôn sử dụng vi làm ngôn ngữ mặc định. Sau đây là đầu ra miền địa phươngLocale.getDefault() trả về vi luôn

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

Tôi chỉ không hiểu nếu LANG được đặt chính xác thì tại sao máy chủ bắt đầu bằng ngôn ngữ địa phương.

+0

bạn đã khởi động lại jvm chưa? –

Trả lời

22

Trong Linux/Unix/Mac, cài đặt LC_ALLLANG có thể kiểm soát ngôn ngữ mặc định cho các chương trình Java. Trong Windows, các ngôn ngữ được đặt từ Bảng điều khiển, trong Tùy chọn ngôn ngữ và khu vực.

Khi JVM khởi động trong một môi trường * nix, nó sẽ làm điều này:

  • Quét môi trường cho LC_ALL
  • Nếu LC_ALL không tồn tại, quét môi trường cho LANG
  • Nếu Cài đặt JVM user.language được đặt, sử dụng thay cho các biến môi trường.
  • Nếu không có gì được thiết lập, mặc định để en_US (Tôi tin rằng đây là trường hợp thất bại cuối cùng)

Trong môi trường của bạn, bạn có LC_ALL thiết lập để C, mà chỉ là C locale. Về cơ bản nó là một dự phòng truyền thống cho đến những ngày mà ngôn ngữ không được sử dụng.

Bạn có thể thay đổi LC_ALL trong trường hợp của mình và khởi động lại JVM và bạn sẽ nhận được một giá trị mới cho java.util.Locale.getDefault().

Ví dụ:

import java.util.Locale; 

public class LocaleTest { 
    public static void main(String[] args) { 
     System.out.println(Locale.getDefault()); 
    } 
} 

đây đang chạy:

> LC_ALL=en_UK java LocaleTest 
en_UK 

> LC_ALL=ja_JP java LocaleTest 
ja_JP 

Cũng lưu ý rằng nếu bạn đang chạy Java 1.7.0-b147, có một lỗi với JRE không nhận ra các thiết lập môi trường cho miền địa phương và sẽ luôn sử dụng ngôn ngữ hệ thống mặc định.

Báo cáo lỗi tại đây: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7073906

+0

Cảm ơn birryree. Nhưng phương thức getDefault trả về Locale dựa trên các thuộc tính user.language. Nếu các thuộc tính này không được thông qua một cách rõ ràng trong khi chạy các máy chủ như thế này -Duser.language = en_GB thì làm thế nào các giá trị này được thiết lập? Các thuộc tính này có được đặt khi người dùng đăng nhập vào hệ thống hoặc jvm đặt các thuộc tính này dựa trên môi trường hay không. – Delta

+0

@Delta - như tôi đã đề cập, nó sẽ xem xét môi trường cục bộ của bạn và sử dụng các biến 'LC_ALL' hoặc' LANG' cho miền địa phương khi JVM khởi động. Nếu không có gì được thiết lập, nó sẽ mặc định một số giá trị mã hóa cứng ('en_US'). – birryree

+0

Cảm ơn birreyree. Tôi sẽ thực hiện thay đổi này và xem nó có hoạt động chính xác hay không. Tôi sẽ giữ cho bạn được đăng. Cảm ơn – Delta

Các vấn đề liên quan