I 로컬국제화
RB = ResourceBundle.get 번들 ("로케일 문자열"Locale.ARABIC)의의 ResourceBundle의 객체를 반환 된 ResourceBundle getBundle는 방법 (Propertyfilename, Local.languagename) 클래스를 사용하고 ; 아니요 - 지원되지 않음
영어, 아랍어를 지원하려면 어떻게해야합니까?
I 로컬국제화
RB = ResourceBundle.get 번들 ("로케일 문자열"Locale.ARABIC)의의 ResourceBundle의 객체를 반환 된 ResourceBundle getBundle는 방법 (Propertyfilename, Local.languagename) 클래스를 사용하고 ; 아니요 - 지원되지 않음
영어, 아랍어를 지원하려면 어떻게해야합니까?
1) 각 속성 파일의 이름은 .properties로 바뀌어야합니다. 여기서 language_code는 2 자의 소문자 언어 코드이고 country_code는 2 자의 대문자입니다.
예.
MyResource_fr_FR.properties
은 MyResource (프랑스는 프랑스, FR는 프랑스)를 지정합니다.
속성 파일에서 아랍어를 지원하려면 언어에 대한 이스케이프 시퀀스를 입력해야합니다.
아랍어 때문에 ISO 8859-6 문자 집합을 사용합니다 (예를 들어)
당신은 당신의 등록 정보 파일에있는 경우 :
char_ren=\u00631, 8859_6_CHARSET
char_ren는 아랍어 CHARACTER RHEN을 나타냅니다.
추신. 당신의 특성 파일의 이름 지정
MyResource_ar.properties
의 \ u00631가 RHEN 문자의 16 진수 값입니다 될 것입니다.
출처 : http://www.langbox.com/codeset /iso8859-6.html 및 http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/ –
올바른 인코딩을 사용하도록 파일을 이스케이프 처리하려면 sun jdk에 포함 된 native2ascii 도구를 사용하여 파일을 변환 할 수 있습니다. – Mike
먼저, java.util.Locale
은 실제로는 상수를 가지고 있지 않다. 하지만 그 언어 코드를 복용 Locale
생성자를 사용하여 스스로를 정의에서 당신을 중지해서는 안 :
public static final Locale ARABIC = new Locale("ar");
둘째, by default 특성 파일은 ISO-8859-1
인코딩으로 InputStream
로 읽어 ResourceBundle
후드 받고있다. 따라서 두 개의 속성 파일이 필요합니다. 하나는 UTF-8
인코딩이고 다른 하나는 Java 응용 프로그램에 제공하는 데 사용하는 값 (예 : text_ar.properties.utf8
)과 ISO-8859-1
인코딩 (예 : text_ar.properties
)을 유지하는 데 사용됩니다. 다음과 같이 UTF-8
파일 ISO-8859-1
로 파일 변환하기 위해 native2ascii
도구를 사용할 수 있습니다 :
c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_ar.properties.utf8 text_ar.properties
이 유니 코드 코드 포인트에 비 ISO-8859-1
문자를 변환합니다. 예 : القيمة
은 \u0627\u0644\u0642\u064a\u0645\u0629
이 될 수 있습니다 (따라서 편집 할 수 없으므로 원본을 편집 용으로 유지하는 것이 좋습니다).
또는 자바 6을 이미 사용하고 있다면을 사용하여 속성 파일을 읽으려면 ResourceBundle.Control#newBundle()
및 PropertyResourceBundle
constructor taking an Reader
을 사용할 수 있습니다.
key=القيمة
package com.stackoverflow.q2183245;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import java.util.ResourceBundle.Control;
public class Test {
private static final Locale ARABIC = new Locale("ar");
private static final Control UTF8CONTROL = new UTF8Control();
public static void main(String args[]) throws Exception {
ResourceBundle bundle = ResourceBundle.getBundle("text", ARABIC, UTF8CONTROL);
System.out.println(bundle.getString("key")); // Prints القيمة
}
}
class UTF8Control extends Control {
public ResourceBundle newBundle
(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException
{
String bundleName = toBundleName(baseName, locale);
String resourceName = toResourceName(bundleName, "properties");
ResourceBundle bundle = null;
InputStream stream = null;
if (reload) {
URL url = loader.getResource(resourceName);
if (url != null) {
URLConnection connection = url.openConnection();
if (connection != null) {
connection.setUseCaches(false);
stream = connection.getInputStream();
}
}
} else {
stream = loader.getResourceAsStream(resourceName);
}
if (stream != null) {
try {
// This line is changed to make it to read properties files as UTF-8.
bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
} finally {
stream.close();
}
}
return bundle;
}
}
참고 : 다음 newBundle()
방법은 원본과 copypasted 여기
UTF-8
은 다음과 같은 내용으로 클래스 패스에 text_ar.properties
파일을 인코딩 "일반"가 있다고 가정 할 킥오프 예제 소스 코드를 약간 변경하여 코드 예제를 간결하게 만들었 으면 원한다면 원래대로 되돌려 놓고 PropertyResourceBundle
코드로 라인을 변경하여 UTF-8
은 Reader
으로 인코딩됩니다.
우연히 프레임 워크를 사용하고 있습니까? –
오라클은 로케일 지원 : JDK 6 을 http://www.oracle.com/technetwork/java/javase/locales-137662.html JDK 7 http://www.oracle.com/technetwork/ java/javase/javase7locales-334809.html JDK 용 http://www.oracle.com/technetwork/java/javase/java8locales-2095355.html –