我正在使用两个 Swift 包并使用字符串目录
.xcstrings
来管理本地化。
每个包都有自己特定的本地化密钥,但我还需要重用一些通用密钥,例如
ok_button_title
。
问题
我想避免在每个包中重复相同的翻译条目。理想情况下,我希望这些共享翻译有单一的事实来源。
我尝试使用以下代码来引用主应用程序包中的翻译密钥:
String(
localized: "ok_button_title",
table: "Localizable",
bundle: .main,
comment: "Ok button title"
)
这会从主包中检索翻译,但不会自动在 Swift 包的字符串目录中创建键。
问题
是否可以直接在 Swift 包中重用主包的翻译?
或者,有没有办法在 Swift 包的字符串目录中自动生成密钥?或者这种行为是预期的而不是错误?
要使用字符串目录管理 Swift 包中的本地化
.xcstrings
,您需要确保以下几点:
.module
捆绑。这可确保正确加载特定于包的翻译。Package.swift
文件必须指定 // swift-tools-version: 6.0
或更高版本才能支持包中的 String(localized:table:bundle:comment)
字符串。否则,请使用 NSLocalizedString(_:tableName:module:comment:)
步骤:
以下是如何为 Swift 包设置可重用字符串目录:
.xcstrings
文件。swift
文件中。.xcstrings
文件中的翻译。实现示例:
定义本地化枚举,以便更清晰、更轻松地检索本地化字符串:
enum L10n {
static let okButtonTitle = String(
localized: "ok_button_title",
table: "Shared", // Matches the name of your .xcstrings file.
bundle: .module, // Uses the Swift Package's module bundle.
comment: "Ok button title"
)
}
用途:
要检索应用程序中的本地化值:
import YourTranslationsPackageName
let buttonTitle = L10n.okButtonTitle