我刚刚完成了this国际化教程,我对它非常满意。但我想知道,如果我构建一个工具栏并为用户提供一些更改语言的选项,它在我的应用程序中如何工作?我确信应用程序需要重新启动,我期待eclipse为它提供动态行为。所以没有期望。
答案 0 :(得分:1)
你应该看一下这篇博文:
e4环境中有org.eclipse.e4.core.services.nls.ILocaleChangeService
,但您需要为其准备应用程序。
最好下载源代码并查看: https://github.com/fipro78/e4translationexample
如果您没有使用e4或不介意重启,您可以使用此代码(未经测试):
// set the eclipse relaunch property
StringBuffer arguments = new StringBuffer();
arguments.append("${eclipse.vm}\n"); //$NON-NLS-1$
arguments.append("-nl\n").append("de").append("\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
arguments.append("-vmargs\n"); //$NON-NLS-1$
arguments.append(System.getProperty("eclipse.vmargs")); //$NON-NLS-1$
System.setProperty("eclipse.exitcode", Integer.toString(IApplication.EXIT_RELAUNCH)); //$NON-NLS-1$
System.getProperties().setProperty(IApplicationContext.EXIT_DATA_PROPERTY, arguments.toString());
PlatformUI.getWorkbench().restart();
请注意,这不适用于您的开发环境,因为不支持重新启动。
答案 1 :(得分:0)
我们这样做:
IPreferenceStore preferenceStore = new ScopedPreferenceStore(new InstanceScope(),getBundle().getSymbolicName());
preferenceStore.setValue("language", locale.toString()); //$NON-NLS-1$
getWorkbench().restart();
虽然您可以从绑定到处理程序的参数化命令获取区域设置,例如:
public class ChangeLanguageHandler extends AbstractHandler implements IElementUpdater {
private static final String PARAM = "lang"; //$NON-NLS-1$
@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
// Consider to supress deselection event:
if (event.getTrigger() instanceof Event) {
final Widget widget = ((Event) event.getTrigger()).widget;
if (widget instanceof MenuItem) {
if (!((MenuItem) widget).getSelection()) {
return null;
}
}
}
final Shell shell = HandlerUtil.getActiveShell(event);
final String lang = event.getParameter(PARAM);
if (openDialogAndAskIfUserIsSureAboutThis_BecauseItRequiresARestart) {
invokeCodeAboveWithTheNewLocale(new Locale(lang));
}
return null;
}
// Update the Checked State...
@SuppressWarnings("rawtypes")
@Override
public void updateElement(final UIElement element, final Map parameters) {
final Object param = parameters.get(PARAM);
element.setChecked(Locale.getDefault().getLanguage().equals(param));
}