example-kcp-i18n
自动收集自
example/example-kcp-i18n/README.md。
这个 example 用来验证一件事:业务项目只接 site.addzero.kcp.i18n 这个 Gradle 插件,不再手写 -Xplugin。
Minimal Config
当前示例的核心配置就是这几行:
plugins {
alias(libs.plugins.kotlinJvm)
application
id("site.addzero.kcp.i18n")
}
i18n {
resourceBasePath.set("i18n")
managedLocales.add("en")
}
插件会自动完成:
- 透传编译器参数给
kcp-i18n - 自动补上
site.addzero:kcp-i18n-runtime - 注册
syncI18nLocales/checkI18nLocales
How To Run
这个 example 的 settings.gradle.kts 默认开启了 composite build:
val useIncludedBuild =
System.getenv("ADDZERO_USE_INCLUDED_BUILD")
?.toBooleanStrictOrNull()
?: true
所以在当前仓库里直接跑即可,不需要先 publishToMavenLocal:
./gradlew -p example/example-kcp-i18n test
./gradlew -p example/example-kcp-i18n run
./gradlew -p example/example-kcp-i18n run --args=en
./gradlew -p example/example-kcp-i18n syncI18nLocales
./gradlew -p example/example-kcp-i18n checkI18nLocales
运行行为:
run不带参数时,示例不会主动切语言;如果当前 locale 没有翻译文件,就回退到源码里的中文run --args=en时,示例会调用I8nutil.setLocale("en"),输出英文
Runtime Usage
示例主程序写法:
import site.addzero.util.I8nutil
fun main(args: Array<String>) {
args.firstOrNull()?.let(I8nutil::setLocale)
println(helloMessage())
println(farewellMessage())
}
业务项目里通常在应用启动、用户切换语言、读取本地配置时调用:
I8nutil.setLocale("en")
I8nutil.setLocale("ja")
I8nutil.clearLocale()
Resource Layout
翻译文件位置:
src/main/resources/i18n/en.properties
当前示例内容:
# 你好
Messages_helloMessage_text_你好=hello
# 再见
Messages_farewellMessage_text_再见=goodbye
这里没有 zh.properties。中文原文只在 Kotlin 源码里维护,en.properties 只维护翻译值。
Simulate External Consumer
如果你要模拟“仓库外业务项目从制品仓库解析插件”这条链路,再关闭 composite build:
ADDZERO_USE_INCLUDED_BUILD=false ./gradlew \
:lib:kcp:kcp-i18n:publishToMavenLocal \
:lib:kcp:kcp-i18n-runtime:publishToMavenLocal \
:lib:kcp:kcp-i18n-gradle-plugin:publishToMavenLocal
然后再跑:
ADDZERO_USE_INCLUDED_BUILD=false ./gradlew -p example/example-kcp-i18n test
ADDZERO_USE_INCLUDED_BUILD=false ./gradlew -p example/example-kcp-i18n run --args=en
这一步只是为了模拟外部消费方。当前仓库内开发默认不需要这样做。
Maven / Gradle
已发布至 Maven Central。
implementation("site.addzero:example-kcp-i18n:latest version")
<dependency>
<groupId>site.addzero</groupId>
<artifactId>example-kcp-i18n</artifactId>
<version>latest version</version>
</dependency>