localized-strings-symbols

一个 SPM 和 Xcode 构建插件,用于为本地化字符串键创建 Swift 符号。

功能

这是一个非常简单的构建插件,它创建 Swift 结构来表示你应用程序 .strings 文件中的键。这允许编译器检查你是否引用了有效的字符串,并为格式化标记提供了一些不错的功能。

该插件为你的 .strings 文件中的每个键创建两个“路由”

如果你遵循 SwiftUI 的约定,在键中包含格式说明符,则生成的结构将自动包含用于格式值的强类型函数。在 SwiftUI 上下文(例如,LocalizedStringKey 上的扩展)中,还提供了通过 Image 参数内联 SF Symbols 的函数。

该插件还通过 _Plural 后缀为键提供基本复数支持。

例如,给定以下名为 Localizable.strings 的字符串文件

"NameAlertTitle %@" = "Hello %@!";
"OKButtonTitle" = "OK";
"CountdownTitle %@" = "%@ second remaining";
"CountdownTitle_Plural %@" = "%@ seconds remaining";

输出将提供可以这样使用的符号

// In a SwiftUI context
VStack {
    Text(.nameAlertTitle(formatValue: "Daniel"))
    Text(.nameAlertTitle(imageValue: Image(systemName: "exclamationmark.triangle")))
    Text(.countdownTitle(pluralizationCount: seconds, formatValue: "\(seconds)")
}

// In a non-SwiftUI context
let alertTitle: String = Localizable.nameAlertTitle(formatValue: "Daniel")
let countdownTitle: String = Localizable.countdownTitle(pluralizationCount: seconds, formatValue: "\(seconds)")

非默认表格名称和 SwiftUI

如果你使用的字符串表格名称不是 Localized.strings,则需要告诉 SwiftUI 组件在哪个表格中查找字符串(即,表格名称信息未封装到 LocalizedStringKey 中)。此插件为你生成一个方便的 getter

Text(.nameAlertTitle(formatValue: "Daniel"), tableName: GeneralUI.tableName)

限制

目前,这是一个非常基本的插件,因此存在许多限制和要求。如果你想帮助改进它,欢迎提交 pull request!

使用方法

Xcode 项目

重要提示: 像这样的构建插件需要 Xcode 14 beta 3 或更高版本。

首先,通过单击项目“Package Dependencies”选项卡底部的 + 按钮,然后将包的 URL 粘贴到搜索字段中,将包添加到你的项目中:https://github.com/iKenndac/localized-strings-symbols.git

然后,在以下对话框中,确保将该包添加为相关目标(target)的依赖项。

最后,转到你的目标(target)的“Build Phases”选项卡,并在“Run Build Tool Plug-ins”阶段中,添加插件。

SPM 包

首先,将该包添加到你的依赖项列表中


dependencies: [
    .package(url: "https://github.com/iKenndac/localized-strings-symbols.git", branch: "main")
],

然后,将依赖项和插件添加到你的目标(target)中


    .executableTarget(
        name: "MyCoolPackage",
        plugins: [.plugin(name: "Generate Strings File Symbols", package: "localized-strings-symbols")]
    ),