跨 Swift 包共享字符串目录翻译

问题描述 投票:0回答:1

我正在使用两个 Swift 包并使用字符串目录

.xcstrings
来管理本地化。

每个包都有自己特定的本地化密钥,但我还需要重用一些通用密钥,例如

ok_button_title

问题

我想避免在每个包中重复相同的翻译条目。理想情况下,我希望这些共享翻译有单一的事实来源。

我尝试使用以下代码来引用主应用程序包中的翻译密钥:

String(
  localized: "ok_button_title",
  table: "Localizable",
  bundle: .main,
  comment: "Ok button title"
)

这会从主包中检索翻译,但不会自动在 Swift 包的字符串目录中创建键。

问题

是否可以直接在 Swift 包中重用主包的翻译?

或者,有没有办法在 Swift 包的字符串目录中自动生成密钥?或者这种行为是预期的而不是错误?

swift xcode localization swift-package-manager string-catalog
1个回答
0
投票

要使用字符串目录管理 Swift 包中的本地化

.xcstrings
,您需要确保以下几点:

  1. 捆绑配置:使用 Swift 包的
    .module
    捆绑。这可确保正确加载特定于包的翻译。
  2. Swift Tools 版本:您的
    Package.swift
    文件必须指定
    // swift-tools-version: 6.0
    或更高版本才能支持包中的
    String(localized:table:bundle:comment)
    字符串。否则,请使用
    NSLocalizedString(_:tableName:module:comment:)

步骤:

以下是如何为 Swift 包设置可重用字符串目录:

  • 使用所需的表名称(例如 Shared.xcstrings)创建一个
    .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
© www.soinside.com 2019 - 2024. All rights reserved.