网站的国际化

我使用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值。