ALanguageParser
轻量级 HTTP RFC-2616 Accept-Language 解析器,用 Swift 编写。
ALanguageParser
是从 OpenTable 的 npm 包 accept-language-parser 转移过来并由 Swift 编写的。它解析来自 HTTP 请求的 accept-language 报头,并按质量排序产出语言对象数组。
它被设计成与 Swift 服务器端一同使用(例如:Vapor、Kitura、Perfect),但它也可以在任何客户端项目中使用。
如何使用
解析
返回接受的按顺序排列的语言列表
import ALanguageParser
let languages = ALanguageParser.parse("it-IT,zh-Hant-HK;q=0.5")
结果将是
[
AcceptedLanguage(code: "it",
quality: 1.0,
region: "IT",
script: nil),
AcceptedLanguage(code: "zh",
quality: 0.5,
region: "HK",
script: "Hant")
]
输出始终按质量顺序从高到低排序。根据HTTP规范,省略质量值表示1.0
。
选择
从给定的接受语言字符串中提取第一个选定的语言,或者如果不存在,则返回 nil
。
let language = ALanguageParser.pick(["fr-CA", "fr-FR", "fr"],
acceptLanguage: "en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8")
输出将是
"fr-CA"
可以通过带有允许部分匹配语言的 loose
参数来调用此函数。例如
let language = ALanguageParser.pick(["fr-CA", "fr-FR", "fr"],
acceptLanguage: "en-GB,en-US;q=0.9,fr-CA;q=0.7,en;q=0.8",
loose: true)
输出将是
"fr"
在宽松模式下,supportedLanguages
的顺序很重要,因为返回的是第一个部分匹配的语言。这意味着如果你想首先选择更特定的语言,你应该将其列在列表的第一位,例如:["fr-CA", "fr"]
。
安装
Swift包管理器
该库正在使用Swift 5.2开发中,可以通过在Package.swift
文件中的依赖数组中添加以下条目进行集成
.package(url: "https://github.com/matsoftware/accept-language-parser.git", from: "1.0.0")
然后在您的目标中,请添加ALanguageParser
依赖项
.product(name: "ALanguageParser", package: "ALanguageParser")
注意:目前存在一个关于Swift工具版本至5.2的问题。请暂时在您的Package.json中使用5.1版本。
CocoaPods
将Pod ALanguageParser
添加到您的Podfile中
pod 'ALanguageParser'
运行 pod install
,然后打开您的 workspace 来启动 Xcode。
贡献
请在GitHub上提出问题或fork仓库以进行更改。
在提出任何PR之前,请确保在Linux平台上的测试通过。
在Linux上使用Docker运行测试
您可以使用Docker下载Swift镜像,并在您的MacOS/Windows机器上执行测试。
一旦Docker及其CLI安装完毕,您可以通过运行以下命令从Docker Hub获取镜像:
docker pull swift
镜像下载完毕后,从您分支仓库的根目录中,您可以通过开启特权模式启动容器并使用绑定挂载,以便Docker访问您的文件夹。
docker run -it --privileged --mount type=bind,source=$(pwd),target=/app swift /bin/bash
最后,您可以运行测试
root@c4706264baa1:/app$ swift test
许可
作者
由 Mattia Campolese 创建。
请也查看 Swift 代码指标,Swift 项目的代码指标分析器。