IntelliJ插件开发-国际化支持

简介

如果你开发的插件需要对多语言进行支持,就需要用到国际化功能。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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值