Typed internationalization, MF2 formatting, and catalog tooling for MoonBit
Dependencies
moon add lampclaw/i18n@0.9.0moonx lampclaw/i18n/cmd/i18n@0.9.0 --helpmoonx lampclaw/i18n/cmd/i18n@0.9.0 scaffold acme/hello ./hello
cd hello
moon update
moon run --target js mainapp/
├── localization/
│ ├── config.json
│ ├── schema.json
│ └── locales/
│ ├── en-US.json
│ └── zh-CN.json
├── i18n/ # fully generated MoonBit package
│ ├── generated.mbt
│ ├── generation-manifest.json
│ └── moon.pkg
├── public/i18n/ # generated deployment manifest + namespace chunks
│ ├── manifest.json
│ ├── en-US--common.json
│ └── zh-CN--common.json
└── main/
├── main.mbt
└── moon.pkg{
"messages": {
"common": ["hello"],
"cart": ["item_count"]
},
"params": {
"common.hello": [{ "name": "name", "type": "String" }],
"cart.item_count": [{ "name": "count", "type": "Int" }]
}
}{
"common": { "hello": "Hello {$name}" },
"cart": {
"item_count": ".input {$count :number}\n.match $count\none {{One item}}\n* {{{$count} items}}"
}
}{
"messageProfile": "unicode-mf2-ldml48.2-js-v2",
"sourceLocale": "en-US",
"defaultLocale": "zh-CN",
"fallbackLocale": "en-US",
"embeddedLocales": ["en-US"],
"release": { "minimumCoverage": 1.0 },
"locales": {
"en-US": { "direction": "ltr" },
"zh-CN": { "direction": "ltr" }
}
}moonx lampclaw/i18n/cmd/i18n@0.9.0 generate \
localization/config.json \
localization/schema.json \
localization/locales \
i18n \
public/i18n
moonx lampclaw/i18n/cmd/i18n@0.9.0 check \
localization/config.json \
localization/schema.json \
localization/locales \
i18n \
public/i18nimport {
"acme/todo/i18n" @app_i18n,
}let i18n = @app_i18n.I18n::new()
let t = i18n.default_translator()
let greeting = t.t(
@app_i18n.Common(@app_i18n.Hello("MoonBit")),
)
let count = t.t(
@app_i18n.Cart(@app_i18n.ItemCount(3)),
)match i18n.install_catalog_chunk_source(
@app_i18n.ZhCN,
@app_i18n.CatalogCommon,
verified_catalog_json,
) {
Ok(_) => ()
Err(message) => println("catalog rejected: \{message}")
}
let zh = i18n.translator(@app_i18n.ZhCN)Typed internationalization, MF2 formatting, and catalog tooling for MoonBit
Dependencies