ALanguageParser

CircleCI codecov Codacy Badge Cocoapods platforms Size FOSSA Status License

Swift 中轻量级的 HTTP RFC-2616 Accept-Language 解析器。

ALanguageParser 是 OpenTable 的 npm 包 accept-language-parser 的 Swift 移植版本。 它解析 HTTP 请求中的 accept-language 标头,并生成按质量排序的语言对象数组。

它的设计初衷是在 Swift 服务器端使用(例如 Vapor、Kitura、Perfect),但它也可以用于任何客户端项目。

如何使用

解析 (Parse)

它返回已接受语言的排序列表

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

选取 (Pick)

从给定的 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 Package Manager

该库目前正在使用 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")

CocoaPods

将 pod ALanguageParser 添加到您的 Podfile

pod 'ALanguageParser'

运行 pod install 然后打开您的 workspace 以启动 Xcode。

贡献

请在 GitHub 上打开一个 issue 或 fork 该存储库以进行更改。

在提出任何 PR 之前,请确保测试在 Linux 平台上通过。

在 Linux 上使用 Docker 运行测试

您可以使用 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

许可证

FOSSA Status

作者

Mattia Campolese 创建。

Twitter Follow

另请查看 swift code metrics,Swift 项目的代码指标分析器。