#language #http

web-lang

匹配 http 头部中的 Accept-Language 语言

1 个不稳定版本

0.1.0 2022 年 9 月 23 日

#190国际化 (i18n)

Download history 15/week @ 2024-02-28 6/week @ 2024-03-27 13/week @ 2024-04-03 2/week @ 2024-04-17 56/week @ 2024-04-24

每月 152 次下载

MIT/Apache

28KB
578

Web-Lang

Crates.io Documentation License unsafe forbidden

匹配 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.0 许可证定义,您提交的任何旨在包含在作品中的贡献将双重许可如上所述,不附加任何额外的条款或条件。

无运行时依赖