我米使用的ResourceBundle方法的getBundle(Propertyfilename,Local.languagename)類,它返回本地國際在一個網站
RB = ResourceBundle.get軟件包( 「區域設置字符串」,Locale.ARABIC)的ResourceBundle的一個對象; - 不支持
我如何使用它來支持阿拉伯語,樂隊英語。
我米使用的ResourceBundle方法的getBundle(Propertyfilename,Local.languagename)類,它返回本地國際在一個網站
RB = ResourceBundle.get軟件包( 「區域設置字符串」,Locale.ARABIC)的ResourceBundle的一個對象; - 不支持
我如何使用它來支持阿拉伯語,樂隊英語。
1)每個屬性文件必須重命名爲 .properties其中language_code是2個字符的小寫語言代碼,country_code是2個字母的大寫字母。
E.g.
MyResource_fr_FR.properties
指定MyResource(FR爲法語,FR爲FRANCE)。
要在您的屬性文件中支持阿拉伯語,必須鍵入該語言的轉義序列。
阿拉伯語使用ISO 8859-6字符集,以便(例如)
,如果你在你的屬性文件:
char_ren=\u00631, 8859_6_CHARSET
char_ren將代表阿拉伯字符RHEN。
PS。您的屬性文件的命名將爲
MyResource_ar.properties
\ u00631是RHEN字符的十六進制值。
來源:http://www.langbox.com/codeset /iso8859-6.html和http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/ – 2010-02-02 11:02:53
要輸入轉義您的文件以使用正確的編碼,您可以使用sun jdk中包含的native2ascii工具轉換它們。 – Mike 2010-02-02 15:05:22
首先,java.util.Locale
確實沒有Locale.ARABIC
常數。但是,這不應該使用Locale
構造服用語言代碼自己定義它阻止你:
public static final Locale ARABIC = new Locale("ar");
其次,by default屬性文件是根據ResourceBundle
罩解讀爲InputStream
與ISO-8859-1
編碼。所以你真的需要有兩個不同的屬性文件,一個是UTF-8
編碼,用於維護你剛纔用來提供給Java應用程序的值(例如text_ar.properties.utf8
)和ISO-8859-1
編碼(如text_ar.properties
)。您可以使用native2ascii
工具從UTF-8
文件ISO-8859-1
文件轉換如下:
c:\path\to\jdk\bin\native2ascii.exe -encoding UTF-8 text_ar.properties.utf8 text_ar.properties
這將非ISO-8859-1
字符轉換爲Unicode代碼點。例如。 القيمة
將變成\u0627\u0644\u0642\u064a\u0645\u0629
(這因此使其不可維護,因此建議保留原件以進行編輯)。或者,如果您已經使用Java 6,則可以使用ResourceBundle.Control#newBundle()
和PropertyResourceBundle
constructor taking an Reader
默認使用UTF-8
來讀取屬性文件。
這裏的一個開球例如假設有一個「純」 UTF-8
編碼text_ar.properties
文件中的類路徑具有以下內容:
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源代碼並稍作修改,以使代碼示例不再冗長,如果您希望將其恢復爲原始狀態,只需將PropertyResourceBundle
結構更改爲即可3210編碼Reader
。
您是否正在使用任何框架? – 2010-02-02 10:30:54
Oracle支持區域設置: 爲JDK 6 http://www.oracle.com/technetwork/java/javase/locales-137662.html 爲JDK 7 http://www.oracle.com/technetwork/ java/javase/javase7locales-334809.html for JDK 8 http://www.oracle.com/technetwork/java/javase/java8locales-2095355.html – 2015-01-17 17:28:54