15 个版本

0.3.2 2021 年 5 月 24 日
0.2.2 2016 年 2 月 12 日
0.2.0 2015 年 10 月 17 日
0.1.0 2015 年 7 月 11 日
0.0.2 2015 年 3 月 30 日

#2 in 国际化(i18n)

Download history 220729/week @ 2024-04-16 232777/week @ 2024-04-23 218201/week @ 2024-04-30 214057/week @ 2024-05-07 229214/week @ 2024-05-14 235192/week @ 2024-05-21 248466/week @ 2024-05-28 262937/week @ 2024-06-04 262092/week @ 2024-06-11 234628/week @ 2024-06-18 255224/week @ 2024-06-25 227197/week @ 2024-07-02 248417/week @ 2024-07-09 257720/week @ 2024-07-16 265563/week @ 2024-07-23 256387/week @ 2024-07-30

1,079,068 每月下载量
用于 2,680 个 crate(46 个直接使用)

MIT/Apache

495KB
12K SLoC

rust-language-tags

Build Status MIT licensed Documentation

语言标签可用于标识人类语言、脚本(例如,拉丁字母脚本)、国家和其他地区。

语言标签由 BCP47 定义,W3C 的介绍见 "HTML 和 XML 中的语言标签"。它们通常用于 HTML 和 HTTP 的 Content-LanguageAccept-Language 标头字段。

此包目前支持解析(完全符合规范的解析器)、格式化和比较语言标签。

示例

创建一个简单的语言标签,表示在比利时使用的法语,并打印它

use language_tags::LanguageTag;
let langtag = LanguageTag::parse("fr-BE").unwrap();
assert_eq!(format!("{}", langtag), "fr-BE");

解析一个表示由私人协议指定的特殊类型英语的标签

use language_tags::LanguageTag;
use std::iter::FromIterator;
let langtag: LanguageTag = "en-x-twain".parse().unwrap();
assert_eq!(langtag.primary_language(), "en");
assert_eq!(Vec::from_iter(langtag.private_use_subtags()), vec!["twain"]);

您可以使用相等性检查,但更常见的是检查两个标签是否匹配。在这个示例中,我们检查德语资源是否适合来自奥地利的用户。虽然讲奥地利德语的人通常能理解标准德语,但反过来并不总是正确的。因此,可以将资源提供给用户,但如果资源是 de-AT,而用户请求 de 的表示,则应拒绝请求。

use language_tags::LanguageTag;
let mut langtag_server = LanguageTag::parse("de-AT").unwrap();
let mut langtag_user = LanguageTag::parse("de").unwrap();
assert!(langtag_user.matches(&langtag_server));

如果您只想验证和规范化语言标签的格式,或者您正在使用 RDF,请考虑使用 oxilangtag crate。它非常轻量,因为它不包含语言标签数据库,并且与这个 crate 的接口非常相似。

依赖项

~170KB