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)
1,079,068 每月下载量
用于 2,680 个 crate(46 个直接使用)
495KB
12K SLoC
rust-language-tags
语言标签可用于标识人类语言、脚本(例如,拉丁字母脚本)、国家和其他地区。
语言标签由 BCP47 定义,W3C 的介绍见 "HTML 和 XML 中的语言标签"。它们通常用于 HTML 和 HTTP 的 Content-Language
和 Accept-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));
相关 crate
如果您只想验证和规范化语言标签的格式,或者您正在使用 RDF,请考虑使用 oxilangtag crate。它非常轻量,因为它不包含语言标签数据库,并且与这个 crate 的接口非常相似。
依赖项
~170KB