包资源本地化

5/8/2022 swiftiosspm

原文:https://developer.apple.com/documentation/swift_packages/localizing_package_resources (opens new window)

确保您的 Swift 包为许多语言环境提供本地化资源。

# 概览

将你的 Swift 包中的资源本地化,可以确保它对尽可能多的开发者有用。尽早采用本地化的资源,以避免以后的额外开发成本。

# 声明默认的本地化

要对你的包的资源进行本地化,请在你的包清单中向包的初始化程序传递可选的 defaultLocalization 参数。这个例子提供了英语作为默认的本地化。

let package = Package(
    name: "MyLibrary",
    defaultLocalization: "en",
    platforms: [
    ],
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
)

当你在软件包清单中声明defaultLocalization的值时,Xcode要求该软件包包含本地化的资源。

Important

当声明支持的语言,或命名包含本地化资源的目录时,使用两个字母的ISO 639-1或三个字母的ISO 639-2语言代码,以及可选的区域或脚本指定符。参见CFBundleDevelopmentRegion (opens new window)以了解更多信息

# 将资源添加到特定于语言的目录

要使用Xcode的默认本地化机制,请将本地化的资源放在特定语言的目录中。一个特定语言的目录有一个使用ISO 639语言代码和可选代号的名称,后面是.lproj后缀,并且不包含子目录。例如,英国使用的英语资源位于名为en-GB.lproj的目录中。通过将软件包资源放在以.lproj结尾的目录中,并使用ISO 639语言代码,Xcode可以自动推断出语言。

将您的.lproj目录放在一个名为 Resources 的父目录中,这样您就能识别出它包含包的资源。

当您构建您的Swift包时,Xcode会验证该包的本地化资源并显示警告或错误,以帮助防止在运行时出现问题。例如,Xcode 会检测:

  • .lproj目录下的子目录。
  • 缺少某个地区的资源。
  • 重复的、冲突的或不可访问的资源。

下面的截图显示了一个带有本地化资源的Swift包的结构。

# 本地化 Storyboard 和 Interface Builder 文件

如果 Swift 包包含故事板或 Interface Builder 文件作为资源,则采用基本国际化来减轻本地化人员直接修改这些文件的需要。要让 Xcode 自动识别 Swift 包中的基本本地化:

  • 在软件包清单中为 defaultLocalization 声明一个值。

  • 创建一个名为 "Resources"的目录,用于存放您的本地化资源。

  • 创建一个名为Base.lproj的子目录,并将包的storyboards和Interface Builder文件放入其中。

  • 将所有支持的语言的.lproj目录放在Resources目录中。

如果你喜欢明确地声明一个资源用于基础国际化,请使用流程规则并将Resource.Localization.base传递给它。例如,使用下面的方法来声明一个支持基础国际化的.xib文件:

.process("path/to/MyViewController.xib", localization: .base)

关于基数国际化的更多信息,请看用户界面的国际化 (opens new window)

# 访问本地化资源

Xcode 识别 .lproj 目录中的本地化资源并自动创建资源包。因此,您可以使用您在应用程序开发中可能已经知道的 API 来访问包的代码中的本地化资源文件。例如,使用Foundation在运行时访问一个本地化的字符串:

let localizedString = NSLocalizedString(”a_localized_string”, bundle: Bundle.module, comment: “a comment”)

类似地,你可以用UIImage访问本地化的图像资源:

UIImage(named: "image name", in: .module, with: nil)

更多信息,请参见在代码中访问资源 (opens new window)

上次更新: 5/8/2022, 10:19:13 PM