Native system locale discovery and normalization for MoonBit.
///|
test "basic locale helpers" {
assert_eq(@sys_locale.canonicalize("en_US.UTF-8"), Some("en-US"))
let tags = @sys_locale.preferred_tags()
match @sys_locale.current_tag() {
Some(tag) => {
assert_true(tags.length() > 0)
assert_eq(tags[0], tag)
}
None => assert_eq(tags.length(), 0)
}
}fn canonicalize(raw : String) -> String?test "canonicalize returns normalized tags" {
debug_inspect(
@sys_locale.canonicalize("en_US.UTF-8"),
content="Some(\"en-US\")",
)
debug_inspect(
@sys_locale.canonicalize("fr_FR@euro"),
content="Some(\"fr-FR\")",
)
}test "current matches the first preferred locale" {
let current = @sys_locale.current()
let preferred = @sys_locale.preferred()
match current {
Some(locale) => {
assert_true(preferred.length() > 0)
@test.assert_eq(preferred[0], locale)
}
None => @test.assert_eq(preferred.length(), 0)
}
}fn current_tag() -> String?test "current_tag mirrors current" {
@test.assert_eq(
@sys_locale.current_tag(),
match @sys_locale.current() {
Some(locale) => Some(locale.tag)
None => None
},
)
}test "parse normalizes locale strings" {
debug_inspect(
@sys_locale.parse("zh_Hans_CN.UTF-8"),
content=(
#|Some(
#| {
#| tag: "zh-Hans-CN",
#| language: "zh",
#| script: Some("Hans"),
#| region: Some("CN"),
#| },
#|)
),
)
debug_inspect(@sys_locale.parse("C.UTF-8"), content="None")
}test "preferred and preferred_tags stay aligned" {
let locales = @sys_locale.preferred()
let tags = @sys_locale.preferred_tags()
@test.assert_eq(locales.length(), tags.length())
for i in 0..<locales.length() {
@test.assert_eq(locales[i].tag, tags[i])
}
}test "preferred_tags starts with current_tag when present" {
let tags = @sys_locale.preferred_tags()
match @sys_locale.current_tag() {
Some(tag) => {
assert_true(tags.length() > 0)
@test.assert_eq(tags[0], tag)
}
None => ()
}
}Native system locale discovery and normalization for MoonBit.