This meta-crate contains two basic crates for Unicode Language Identifier and Locale manipulation.
Unic crate for Unicode Language Identifiers management.
Language Identifier describes a combination of language, region, script and variants. Examples: "en-US"
, "sr-Cyrl-RU"
, "de-AT"
, "zh-Hans"
.
Unic crates for Unicode Locale Identifiers management.
Locale Identifiers extend Language Identifiers with a set of extensions for unicode, transform and private.
This allows the user to encode additional data. Examples: "en-US-u-hc-h24"
, "pl-u-ca-buddhist"
.
The unic-langid
crate is fully functional and should parse/manipulate/serialize in conformance with the standard.
The Rust API is considered close to stable.
The unic-locale
crate is mostly complete with full support for unicode, transform and private extensions. The other
extension type is not currently supported.
The API shadows that of unic-langid
and is intended to be a drop-in replacement for unic-langid
so that users can start with a simple Language Identifier coverage and extend it to use unic-locale
once needed.
All code implements (parts) of Unicode UTS #35 Language and Locale Identifiers.
The API is intended to function similarly to ICU Locale and ECMA402 Intl.Locale.
In early tests the performance of parsing a set of language identifiers into a well formed struct, unic-langid
is ~50 times faster than ICU Locale.
Performance is consider close to optimal at the moment.
Whoa, I can see you saying, what is it about with all those crates here?
Well, that's an excellent question!
Unless you want a deep dive into procedural macro and proc-macro-hack, let me just give you a tl;dr:
unic-{langid|locale}
- User facing public crates that you should use. Potentially withfeatures = ["macros"]
unic-{langid|locale|-impl
- The real code behind all of this.unic-{langid|locale}-macro-impl
- Actual implementations of the procedural macrosunic-{langid|locale}-macro
- Declaration crates for the macros
In result, there's a little bit of hackery here to get everything work nicely for you, but all you should care about are the two top crates with optional features if you want.
The rest will hopefully go away one day once we mature the macros ecosystem in Rust.