IntelliJ插件开发-国际化支持

2023-12-13 03:38:52

简介

如果你开发的插件需要对多语言进行支持,就需要用到国际化功能。java原生提供了ResourceBundle类实现国际化功能,idea插件也可以通过国际化文件配置的方式,实现多语言支持。

java内置多语言支持

  1. 在classpath下(例如:src/main/resources),新建messages文件夹,存放不同语言的配置文件:
# myPlugin_zh.properties
plugin.name=插件名称

#myPlugin_en.properties
plugin.name=Plugin Name
  1. 新建工具类,用于读取配置
public class ResourceBundleUtil {
	private static final ResourceBundleUtil INSTANCE = new ResourceBundleUtil();
	private ResourceBundle resourceBundle;
	private Locale currentLocale;

	private ResourceBundleUtil() {
        currentLocale = new Locale("en", "US");
        String langSetting = "读取用户设置的语言";
        if ("zh-CN".equals(langSetting) || ("Default".equals(langSetting)) {
            currentLocale = new Locale("zh", "CN");
        }
        String bundleName = "messages.myPlugin";
        resourceBundle = ResourceBundle.getBundle(bundleName, this.currentLocale);
    }
    
    public static String get(String key) {
        return INSTANCE.getString(key);
    }

    public static String get(String key, Object... params) {
        String message = INSTANCE.getString(key);
        return String.format(message, params);
    }

    private String getString(String key) {
        try {
            return resourceBundle.getString(key);
        } catch (Exception e) {
            return "Key not found: " + key;
        }
    }
	
	// 用户修改语言后,调用此方法
	public static void setLocale(String langSetting) {
        INSTANCE.currentLocale = new Locale("en", "US");
        if ("zh-CN".equals(langSetting) || ("Default".equals(langSetting)) {
            INSTANCE.currentLocale = new Locale("zh", "CN");
        }
        String bundleName = "messages.myPlugin";
        INSTANCE.resourceBundle = ResourceBundle.getBundle(bundleName, INSTANCE.currentLocale);
    }
}

插件国际化

除了提示语使用ResourceBundleUtil来获取对应的值外,插件中的菜单名也需要多语言支持,可以直接按照下面的格式,给注册的messageBundle properties文件添加配置后,可以自动获取对应语言的值。

action.<actionId>.text = Action Text
action.<actionId>.desc = Action Desc

示例:
plugin.xml中需要注册国际化文件

<idea-plugin>
	<resource-bundle>messages.myPlugin</resource-bundle>
	<actions>
		<action id="MyPlugin.Action1" class="com.demo.Action1" />
	</actions>
</idea-plugin>

国际化配置文件

# myPlugin_zh.properties
action.MyPlugin.Action1.text = 菜单1
action.MyPlugin.Action1.desc = 菜单1描述

#myPlugin_en.properties
action.MyPlugin.Action1.text = Action1 Name
action.MyPlugin.Action1.desc = Action1 Desc

参考文献

Localizing Actions and Groups

文章来源:https://blog.csdn.net/liuzhenghua66/article/details/134945794
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。