Match a languages from the http Accept-Language
header, urls, or other sources.
Language tags (eg: "en-au"
) are never validated,
this crate simply tries to make sense of whatever value it is given,
ignoring any input that it cannot understand, and find the best match
based on a few simple rules.
This crate is inspired by Django's translation handling.
#[forbid(unsafe_code)]
)Simply pass an iterable of language tags and the Accept-Language
header
to find the best match.
rust
assert_eq!(
match_accept(
["en", "en-au", "de"],
"de;q=0.5, en-gb;q=0.9, ja;q=0.2, *;q=0.1"
),
Some("en")
);
Complete example with a custom language enum.
```rust use weblang::{Language, matchaccept};
enum MyLanguage { English, AustralianEnglish, German, Japanese, }
impl Language for MyLanguage { fn tag(&self) -> &str { match self { Self::English => "en", Self::AustralianEnglish => "en-au", Self::German => "de", Self::Japanese => "ja", } } }
const LANGUAGES: &[MyLanguage] = &[ MyLanguage::English, MyLanguage::AustralianEnglish, MyLanguage::German, MyLanguage::Japanese ];
// Use your own language enum. asserteq!( matchaccept( LANGUAGES.iter().copied(), "de;q=0.5, en-gb;q=0.9, ja;q=0.2, *;q=0.1" ), Some(MyLanguage::English) ); ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.