spark 中语言插件有个问题

本文介绍了解决Spark语言插件无法显示中文选项的问题,并提供了一个适用于Spark 2.5.8版本的修复方法。
spark的语言插件显示不出中文选项的,那是因为它仅能识别两个字母的语言文件,例:"en",中文是:"zh_CN",带了国名就不能识别了,但是仍然可以正确显示中文,只是语言选项中没有简体中文了。

修改这个文件:LanguagePlugin.java

package org.jivesoftware.sparkimpl.plugin.language;

import java.awt.event.ActionEvent;
import java.io.File;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.Locale;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.zip.ZipFile;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JOptionPane;

import org.jivesoftware.resource.Res;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.settings.local.LocalPreferences;
import org.jivesoftware.sparkimpl.settings.local.SettingsManager;

/**
* Allows for changing of default languages within Spark.
*
* @author Derek DeMoro
*/
public class LanguagePlugin implements Plugin {

private Locale[] locales;
private JMenu languageMenu;

public void initialize() {
// Register with action menu
final JMenu actionsMenu = SparkManager.getMainWindow().getMenuByName(Res.getString("menuitem.actions"));

languageMenu = new JMenu(Res.getString("menuitem.languages"));

locales = Locale.getAvailableLocales();

// Load files
URL sparkJar = getClass().getClassLoader().getResource("spark.jar");
if (sparkJar == null) {
// Do not initialize
return;
}

String url = URLDecoder.decode(sparkJar.getPath());

try {
ZipFile zipFile = new JarFile(new File(url));
for (Enumeration e = zipFile.entries(); e.hasMoreElements();) {
JarEntry entry = (JarEntry)e.nextElement();
String propertiesName = entry.getName();
// Ignore any manifest.mf entries.
if (propertiesName.endsWith(".properties")) {
int lastIndex = propertiesName.lastIndexOf("i18n_");
int period = propertiesName.lastIndexOf(".");
if (lastIndex == -1 && propertiesName.contains("spark_i18n")) {
addLanguage("en");
}
else {
String language = propertiesName.substring(lastIndex + 5, period);
addLanguage(language);
// Log.error("propertiesName:"+propertiesName+" language:"+language);
}
}
}
zipFile.close();
zipFile = null;
}
catch (Throwable e) {
Log.error("Error unzipping plugin", e);
}

actionsMenu.add(languageMenu);
}

private void addLanguage(String language) {
int ind=language.indexOf("_");
String country=null;
if(ind>=0) {
country=language.substring(ind+1,language.length());
language=language.substring(0,ind);
}
for (int i = 0; i < locales.length; i++) {
final Locale locale = locales[i];
if (locale.getLanguage().equals(language) && (country==null || locale.getCountry().equals(country))) {
Action action = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
final LocalPreferences preferences = SettingsManager.getLocalPreferences();
preferences.setLanguage(locale.getLanguage());
preferences.setCountry(locale.getCountry());

int ok = JOptionPane.showConfirmDialog(SparkManager.getMainWindow(), Res.getString("message.restart.required"), Res.getString("title.confirmation"), JOptionPane.YES_NO_OPTION);
if (ok == JOptionPane.YES_OPTION) {
SparkManager.getMainWindow().shutdown();
}
}
};

String displayCountry = locale.getDisplayCountry(locale);
action.putValue(Action.NAME, locale.getDisplayLanguage(locale)+ ( displayCountry==null || displayCountry.length()<=0 ? "" : " - "+displayCountry ));
languageMenu.add(action);
break;
}
}
}

public void shutdown() {
}

public boolean canShutDown() {
return false;
}


public void uninstall() {
}
}


实在是忘了改了什么,于是把所有的内容都发出来了,替换原来那个就行了,版本是2.5.8。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值