1//! fluent-langneg is an API for operating on locales and language tags.
2//! It's part of Project Fluent, a localization framework designed to unleash
3//! the expressive power of the natural language.
4//!
5//! The primary use of fluent-langneg is to parse/modify/serialize language tags
6//! and to perform language negotiation.
7//!
8//! fluent-langneg operates on a subset of [BCP47](http://tools.ietf.org/html/bcp47).
9//! It can parse full BCP47 language tags, and will serialize them back,
10//! but currently only allows for operations on primary subtags and
11//! unicode extension keys.
12//!
13//! In result fluent-langneg is not suited to replace full implementations of
14//! BCP47 like [rust-language-tags](https://github.com/pyfisch/rust-language-tags),
15//! but is arguably a better option for use cases involving operations on
16//! language tags and for language negotiation.
17
18pub mod accepted_languages;
19pub mod negotiate;
20
21pub use accepted_languages::parse as parse_accepted_languages;
22pub use negotiate::negotiate_languages;
23pub use negotiate::NegotiationStrategy;
24
25use unic_langid::{LanguageIdentifier, LanguageIdentifierError};
26
27pub fn convert_vec_str_to_langids<'a, I, J>(
28 input: I,
29) -> Result<Vec<LanguageIdentifier>, LanguageIdentifierError>
30where
31 I: IntoIterator<Item = J>,
32 J: AsRef<[u8]> + 'a,
33{
34 inputimpl Iterator>
35 .into_iter()
36 .map(|s: J| LanguageIdentifier::from_bytes(s.as_ref()))
37 .collect()
38}
39
40pub fn convert_vec_str_to_langids_lossy<'a, I, J>(input: I) -> Vec<LanguageIdentifier>
41where
42 I: IntoIterator<Item = J>,
43 J: AsRef<[u8]> + 'a,
44{
45 inputimpl Iterator
46 .into_iter()
47 .filter_map(|t: J| LanguageIdentifier::from_bytes(t.as_ref()).ok())
48 .collect()
49}
50