网站的国际化
我使用ResourceBundle方法getBundle(Propertyfilename,Local.languagename)类返回本地ResourceBundle的对象
rb = ResourceBundle.get Bundle(“Locale Strings”,Locale.ARABIC); – 不支持
我怎样才能用它来支持阿拉伯语,英语乐队。
首先, java.util.Locale
确实没有Locale.ARABIC
常量。 但这不应该阻止您使用Locale
构造函数自己定义语言代码:
public static final Locale ARABIC = new Locale("ar");
其次, 默认情况下 ,属性文件位于ResourceBundle
引擎下,读取为具有ISO-8859-1
编码的InputStream
。 所以你真的需要有两个不同的属性文件,一个是UTF-8
编码,用于维护值(例如text_ar.properties.utf8
),另一个用于ISO-8859-1
编码(例如text_ar.properties
)您只是用来提供Java应用程序。 您可以使用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
构造函数,使用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()
方法是从原始源进行复制并略微更改以使代码示例更简洁,如果您希望可以将其恢复为原始并且只需使用PropertyResourceBundle
构造更改该行以使其采用UTF-8
编码的Reader
。
1)必须重命名每个属性文件 .properties其中language_code是2个字符的小写语言代码,country_code是2个字母的大写字母。
例如
MyResource_fr_FR.properties
指定MyResource(fr为法语,FR为FRANCE)。
要在属性文件中支持阿拉伯语,您必须键入该语言的转义序列。
阿拉伯语使用ISO 8859-6 CharSet(例如)
如果你的属性文件中有:
char_ren=\u00631, 8859_6_CHARSET
char_ren将代表阿拉伯字符RHEN。
PS。 将命名您的属性文件
MyResource_ar.properties
\ u00631是RHEN字符的hex值。