本系列文章已收录到专栏,交流群号:689220994,也可点击链接加入。
尽管大多数情况下我们开发的插件可能都是自己或者团队内部使用,但是如果想要将开发的插件发布到 Jetbrains 的插件市场,吸引更多的用户使用和支持,那么 i18n 就必不可少了。而 IntelliJ 也给我提供了内部支持,只需要简单几行代码即可实现 i18n,下面开始分步骤进行讲解,另外本文涉及到的完整代码也已上传到GitHub。
首先我们需要在 resources 文件夹下创建我们的语言文件,这里选择先创建一个 messages 文件夹(名称无要求),然后在下面创建一个ActionBundles.properties
文件(后缀为properties
,名称无要求,一般会分模块创建多个语言文件便于管理,该文件用于配置默认语言即英文),之后再创建一个ActionBundles_zh.properties
文件用于配置中文内容,这里的_zh
则代表用于配置中文,其中_
固定,zh
为语言代码,例如想要配置日语则是ja
,不同国家的语言代码可以在网上自行搜索,这里提供一个网址,效果如下:
可以看到在语言配置文件创建完毕后,我们分别在内部添加了demo.greet-msg=Hello, {0}
和demo.greet-msg=\u4f60\u597d\uff0c{0}
两个配置。其中\u4f60\u597d\uff0c
是你好,
中文字符对应的 Unicode 编码,这里之所以使用 Unicode 编码,是因为官网推荐我们将 ASCII 码范围外的字符都使用 Unicode 编码进行表示,相关的转换网站也很多,这里提供一个。除此之外,还可以看到我们的内容中还包含{0}
,这个则是参数占位标记,多个参数按照0, 1, 2...
的顺序依次累加即可。
有了以上语言文件,我们就可以创建一个工具类专用于语言解析了,这里先展示内容:
# ①
private const val BUNDLE = "messages.ActionBundles"
# ②
object MessageUtils: DynamicBundle(BUNDLE) {
# ③
fun message(@PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any) = getMessage(key, *params)
}
调用方式也很简单:
# ④
MessageUtils.message("demo.greet-msg", "butterfly")
下面分开始介绍上述代码的含义:
首先是①,这里用于声明语言文件的位置,其中messages
和ActionBundles
分别是上文我们创建的用于存储语言文件的文件夹名和文件名。
然后是②,可以看到这里我们创建的工具类继承了DynamicBundle
类,并传递了我们声明的BUNDLE
,有了这部分代码我们就可以得到 IntelliJ 内部的语言文件解析功能:只需要专注于语言文件的编写,而无需考虑不同语言的判断和文件选取。
之后是③,这里声明了一个message
方法,而内容则是直接调用了getMessage(key, *params)
这个DynamicBundle
类内部提供的方法,这里之所以自己重新声明了一遍方法,则是为了使用 key 参数前@PropertyKey(resourceBundle = BUNDLE)
注解的功能,通过使用PropertyKey
注解,当我们调用该方法的时候获取到提示(参数 resourceBundle 的值就是上面声明的 BUNDLE),效果如下:
同时键不存在时还会有报错提示:
最后是④,有了以上工具类,调用方式也很简单,第一个参数为信息的键值,如果想要传递参数,则按顺序进行传递即可(第二个参数为可变参数,PropertyKey 注解会解析配置的语言信息,如果调用参数个数不一致也会有信息提示,如下图)。
然后创建一个 Action 用于测试:
class TestAction: AnAction() {
override fun actionPerformed(event: AnActionEvent) {
NotificationUtils.info(MessageUtils.message("demo.greet-msg", "butterfly"))
}
}
效果如下:
可以看到这里虽然我们没有进行语言选择的操作,但是显示的内容为中文版本。
NotificationUtils
类是自己定义的工具类,内容如下:object NotificationUtils { fun info(msg: String) { Notifications.Bus.notify(Notification("i18n", msg, NotificationType.INFORMATION)) } }
在部分情况下我们可能还想手动的去控制语言的选择,只需要使用Locale.setDefault(Locale.ENGLISH)
即可,这里的参数为Locale.ENGLISH
即英语,其它语言按需去改变即可,配置完后,我们再看效果:
可以发现配置生效,展示的信息为英语版本了。
如果调用Locale.setDefault()
方法传递的语言在我们语言文件中不存在,则会使用默认的语言文件,即没有后缀的语言文件,即ActionBundles.properties
。
在上篇文章的结尾说到这篇文章会介绍 PSI 的进阶内容,不过考虑到使用场景较少,所以这篇文章先介绍了关于 i18n 的相关内容,PSI 的进阶内容则留到后续篇章中再进行介绍。
原网址: 访问
创建于: 2024-05-29 14:24:53
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论