- 作者:老汪软件技巧
- 发表时间:2024-09-24 07:02
- 浏览量:
通知
右键选中word并弹出选中消息通知。
创建一个action。
我们通过devKit创建一个action。
使用通知接口弹出内容
首先我们要先在Plugin.xml中注册一个通知Group
class="hljs language-ini" lang="ini">defaultExtensionNs="com.intellij">
id="ts.notice" displayType="BALLOON"/>
复制代码
然后开始写代码
Notification notification = new Notification("listener", "标题", content, NotificationType.INFORMATION);
Notifications.Bus.notify(notification, e.getProject());
复制代码
最后面的notify中要填一个 Project ,这个类型大概是在哪个项目(idea)中弹出。 完成代码如下:
@Override
public void actionPerformed(AnActionEvent e) {
Project project = e.getProject();
Editor editor = e.getData(CommonDataKeys.EDITOR);
if (project!= null && editor!= null) {
// 选中内容
String content = editor.getSelectionModel().getSelectedText();
if(content!=null ) {
//提示消息
Notification notification = new Notification("listener", "选中", content, NotificationType.INFORMATION);
Notifications.Bus.notify(notification, e.getProject());
}
}
}
复制代码
然后我们看下显示的效果
消息窗口提示
将Notification 部分替换为下面代码
Messages.showMessageDialog(e.getProject(), content, "选中", Messages.getInformationIcon());
复制代码
然后我们看下运行效果
国际化支持
有些时候开发的插件需要对多语言进行支持,就需要用到国际化功能。
多语言配置
在resources新建一个messages文件夹,存放不同语言的配置文件。
# myfirstplugin_zh.properties
action.notification.text= 选中
# myfirstplugin_en.properties
action.notification.text= selected
复制代码
读取配置
java原生提供了ResourceBundle类实现国际化功能。我们要新建工具类,用于读取配置。
import com.intellij.AbstractBundle;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.PropertyKey;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* 国际化支持
*/
public final class Bundle extends AbstractBundle {
@NonNls
public static final String I18N = "messages.myfirstplugin";
private static final Bundle INSTANCE = new Bundle();
private Bundle() {
super(I18N);
}
@NotNull
public static String message(@NotNull @PropertyKey(resourceBundle = I18N) String key, @NotNull Object ... params) {
System.out.println(key);
String string = message(key,Locale.ENGLISH);
if(MessageFormat.format(string,params)==null){
return MessageFormat.format(string,params);
}
return INSTANCE.getMessage(key, params);
}
private static String message(String key, Locale locale){
ResourceBundle bundle = ResourceBundle.getBundle(I18N,locale);
return bundle.getString(key);
}
}
复制代码
应用
在代码中通过Bundle.message()调用。
Bundle.message("action.notification.text", new Object[0])
复制代码
插件国际化
除了提示语使用ResourceBundle来获取对应的值外,插件中的菜单名也需要多语言支持,可以直接按照下面的格式,给注册的myfirstplugin.properties文件添加配置后,可以自动获取对应语言的值。
action..text = Action Text
action..desc = Action Desc
复制代码
示例: plugin.xml中需要注册国际化文件,有下面两种方式
<idea-plugin>
<resource-bundle>messages.myPluginresource-bundle>
<action id="NotificationAction" class="com.github.myfirstplugin.action.NotificationAction" text="simple notification"
description="simple notification">
<add-to-group group-id="EditorPopupMenu" anchor="first"/>
action>
idea-plugin>
复制代码
或者
resource-bundle="messages.myfirstplugin">
id="NotificationAction" class="com.github.myfirstplugin.action.NotificationAction" text="simple notification"
description="simple notification">
group-id="EditorPopupMenu" anchor="first"/>
复制代码
国际化配置文件
# myfirstplugin_zh.properties
action.NotificationAction.text = 选中词语
action.NotificationAction.desc = 菜单1描述
# myfirstplugin_en.properties
action.NotificationAction.text = selected word
action.NotificationAction.desc = Action Desc
复制代码
运行效果如下