实现原理:
由于eclipse没有提供启动参数这项或者说可能有我没找到,所以我通过修改config.ini文件的启动参数,实现切换中英文的目的
默认的rcp产品config.ini文件内容:
-startup
plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1200.v20200508-1552
修改后的内容(此处会让rcp产品以英文方式启动):
-startup
plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1200.v20200508-1552
-vmargs
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Duser.language=en
-Duser.country=US
具体操作:
1、在顶层创建2个按钮
2、编写Handler代码逻辑
Locale locale = Locale.getDefault();//获取当前Locale,判断是否要切换语言
URL url = InternalPlatform.getDefault().getInstallURL();//获取rcp产品安装路径
File configFile = new File(url.getFile() + File.separator + "config.ini");//获取导出的config.ini位置
//切换英文
try (FileWriter writer = new FileWriter(configFile , true)) {
writer.write("-vmargs\r\n" + "-Dorg.eclipse.swt.internal.carbon.smallFonts\r\n"
+ "-Duser.language=en\r\n" + "-Duser.country=US");
} catch (IOException e) {
e.printStackTrace();
}
//切换中文
String encoding = "UTF-8";
Long filelength = configFile.length();
byte[] filecontent = new byte[filelength.intValue()];
try (FileInputStream in = new FileInputStream(configFile);
FileWriter writer = new FileWriter(configFile)) {
in.read(filecontent);
String string = new String(filecontent, encoding);//获取config.ini文件字符内容
writer.write(string.replace("-vmargs\r\n" + "- Dorg.eclipse.swt.internal.carbon.smallFonts\r\n"
+ "-Duser.language=en\r\n" + "-Duser.country=US", ""));//删除指定的字符
} catch (IOException e) {
e.printStackTrace();
System.err.println("The OS does not support " + encoding);
return null;
}
// 重启rcp程序刷新界面
PlatformUI.getWorkbench().restart();
留言:
这当中省去了很多细节,不过能遇到这个问题的基本都是有经验的rcp开发者了,有问题在评论区留言,我选择我知道的回复,不知道的就没办法了。