1 个不稳定版本
0.1.0 | 2022 年 9 月 23 日 |
---|
#190 在 国际化 (i18n)
每月 152 次下载
28KB
578 行
Web-Lang
匹配 http 头部、urls 或其他来源中的语言。
语言标签(例如:"en-au"
)从不进行验证,这个 crate 只尝试理解所提供的任何值,忽略它无法理解的任何输入,并根据一些简单的规则找到最佳匹配。
此 crate 受 Django 的翻译处理启发。
特性
- 无不安全代码
- 无 panic
- 已测试;代码覆盖率:100%(道德上)
- 无依赖
示例
只需传递一个语言标签的可迭代对象和 Accept-Language
头部,即可找到最佳匹配。
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")
);
带有自定义语言枚举的完整示例。
use web_lang::{Language, match_accept};
#[derive(Copy, Clone, PartialEq, Debug)]
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.
assert_eq!(
match_accept(
LANGUAGES.iter().copied(),
"de;q=0.5, en-gb;q=0.9, ja;q=0.2, *;q=0.1"
),
Some(MyLanguage::English)
);
文档
许可证
根据您的选择,许可如下
- Apache 许可证第 2 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义,您提交的任何旨在包含在作品中的贡献将双重许可如上所述,不附加任何额外的条款或条件。