///|
fn require_locale(tag : String) -> @moonlocale.Locale {
match @moonlocale.Locale::parse(tag) {
Ok(locale) => locale
Err(error) => abort(error.message())
}
}
///|
fn require_catalog(
locale : @moonlocale.Locale,
resources : Array[@moonlocale.MessageResource],
) -> @moonlocale.MessageCatalog {
match @moonlocale.MessageCatalog::compile(locale, resources) {
Ok(catalog) => catalog
Err(error) => abort(error.message())
}
}
///|
fn main {
let en = require_locale("en")
let zh = require_locale("zh-CN")
let en_catalog = require_catalog(en, [
@moonlocale.message_resource("welcome", "Welcome, {name}!"),
@moonlocale.message_resource(
"cart", "{count, plural, =0 {Your cart is empty} one {Your cart has one item} other {Your cart has # items}}",
),
])
let zh_catalog = require_catalog(zh, [
@moonlocale.message_resource("welcome", "欢迎,{name}!"),
@moonlocale.message_resource("cart", "购物车中有 {count} 件商品"),
])
let bundle = @moonlocale.MessageBundle::new(en, [en_catalog, zh_catalog]).unwrap()
let request = require_locale("zh-Hans-CN")
println(
bundle
.format(request, "welcome", [@moonlocale.string_argument("name", "Mina")])
.unwrap(),
)
println(
bundle
.format(request, "cart", [@moonlocale.int_argument("count", 2500)])
.unwrap(),
)
println(
@moonlocale.format_currency(
request,
@moonlocale.Decimal::new(2599, 2),
"CNY",
@moonlocale.Symbol,
),
)
println(
@moonlocale.format_byte_size(
1572864,
request,
style=@moonlocale.BinaryBytes,
),
)
println(@moonlocale.format_duration(3723, request, max_parts=2))
}