Crates.io | oxilangtag |
lib.rs | oxilangtag |
version | 0.1.5 |
source | src |
created_at | 2020-05-01 17:50:48.763085 |
updated_at | 2024-03-10 20:11:23.192751 |
description | Simple and fast implementation of language tag normalization and validation |
homepage | |
repository | https://github.com/oxigraph/oxilangtag |
max_upload_size | |
id | 236312 |
size | 58,422 |
OxiLangTag is a Rust library allowing to validate and normalize language tags following RFC 5646 (BCP 47).
It is a fork of the language-tags
focusing on RDF use cases.
You might find the language-tags
crate more convenient.
It allows zero stack allocation language tag validation. Getters are also provided to easily retrieve the various language tag components.
If serde
is available, LanguageTag
implements the Serialize
and Deserialize
traits and encodes the language tag as a string.
Example:
use oxilangtag::LanguageTag;
// Parsing and validation
let language_tag = LanguageTag::parse("zh-cmn-Hans-CN-x-test").unwrap();
assert_eq!(language_tag.as_str(), "zh-cmn-Hans-CN-x-test");
// Language tag components
assert_eq!(language_tag.primary_language(), "zh");
assert_eq!(language_tag.extended_language(), Some("cmn"));
assert_eq!(language_tag.full_language(), "zh-cmn");
assert_eq!(language_tag.script(), Some("Hans"));
assert_eq!(language_tag.region(), Some("CN"));
assert_eq!(language_tag.extension(), None);
assert_eq!(language_tag.private_use_subtags().collect::<Vec<_>>(), vec!["test"]);
It is also possible to use this crate in no_std
(with alloc
) by opting-out of the default std
feature:
serde = { version = "*", default-features = false }
This project is licensed under the MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>
).
It is based on the language-tags
crate by pyfisch under MIT license.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Oxilangtag by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.