Swift 中轻量级的 HTTP RFC-2616 Accept-Language 解析器。
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
。
从给定的 accept language 字符串中可用的语言中提取第一个选定的语言;如果不存在,则返回 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 5.7 开发,可以通过将以下条目添加到 Package.swift
文件中的 dependencies 数组来集成
.package(url: "https://github.com/matsoftware/accept-language-parser.git", from: "1.1.0")
然后在您的目标中,请添加 ALanguageParser
依赖项
.product(name: "ALanguageParser", package: "accept-language-parser")
将 pod ALanguageParser
添加到您的 Podfile
pod 'ALanguageParser'
运行 pod install
然后打开您的 workspace 以启动 Xcode。
请在 GitHub 上打开一个 issue 或 fork 该存储库以进行更改。
在提出任何 PR 之前,请确保测试在 Linux 平台上通过。
您可以使用 Docker 下载 Swift 镜像并在您的 MacOS/Windows 机器上执行测试。
安装 Docker 及其 CLI 后,您可以通过运行以下命令从 Docker Hub 获取镜像
docker pull swift
下载镜像后,从您 fork 的存储库的根文件夹中,您可以在特权模式下启动容器,并使用绑定挂载来允许 Docker 访问您的文件夹
docker run -it --privileged --mount type=bind,source=$(pwd),target=/app swift /bin/bash
最后,您可以运行测试
root@c4706264baa1:/app$ swift test
由 Mattia Campolese 创建。
另请查看 swift code metrics,Swift 项目的代码指标分析器。