首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问Cocoapods resource_bundles

访问Cocoapods resource_bundles
EN

Stack Overflow用户
提问于 2015-07-06 13:51:56
回答 2查看 3.6K关注 0票数 8

我正在与我自己的荚中定义的本地化资源进行斗争。

这个pod对以下文件使用Base国际化:

代码语言:javascript
复制
Base.lproj
|- Localizable.strings
|- MyViewController.xib

fr.lproj
|- Localizable.strings
|- MyViewController.strings

这就是在我的podspec中定义它们的方式

代码语言:javascript
复制
spec.resources = "MySDK/*.lproj/*"

在我的应用程序的Podfile中,我的pod被定义为本地依赖项:

代码语言:javascript
复制
pod 'MySDK', :path => '../MySDK'

在运行pod install之后,我可以在Development Pods/MySDK/Resources/MySDK中看到完全相同的 lproj文件夹。

MyViewController.xib是完美的加载和本地化,我可以改变我的手机上的语言和文字相应的变化。

为了使用本地化字符串,我在SDK中定义了一个函数:

代码语言:javascript
复制
public func NSLocalizedIntentString(key: String) -> String {
    let sdkBundle = NSBundle(forClass: MySDKClass.self)
    return NSLocalizedString(key, tableName: nil, bundle: sdkBundle, value: key, comment: "")
}

它可以工作,除了,它只使用中定义的字符串,不管手机或模拟器上选择的语言是什么。

我把我的podspec改为:

代码语言:javascript
复制
spec.resource_bundles = {
    "MySDK" => ["MySDK/*.lproj"]
}

为了从代码中加载包,但现在没有任何工作,XIB无法加载。这很奇怪,因为在Development Pods中,我仍然可以看到与以前完全相同的结构,但使用的是蓝色文件夹图标而不是黄色。

下面是我如何从SDK加载XIB,而不是从我的应用程序加载XIB:

MyViewController.swift

代码语言:javascript
复制
public init(...) {
    ...
    super.init(nibName: "MyViewController", bundle: NSBundle(forClass: MyViewController.self))
}

我把它改成:

代码语言:javascript
复制
public init(...) {
    ...
    super.init(nibName: "MyViewController", bundle: NSBundle(path: NSBundle.mainBundle().pathForResource("MySDK", ofType: "bundle")!))
}

但它找不到包裹。

从今天早上开始,我已经阅读了大量的文档和论坛,但都没有成功,因此,任何帮助都是受欢迎的!)

EN

回答 2

Stack Overflow用户

发布于 2015-07-08 14:33:20

我终于想出来了。

  1. 我在我的spec.resources中切换到spec.resource_bundles而不是spec.resource_bundles,因为我无法访问生成的包。
  2. 然后我不得不关闭XIB的本地化,因为我意识到lang子目录中的资源没有编译。因此,XIB现在位于lproj目录之外。 我的新podspec: spec.resources =“MySDK/*..lproj”,“MySDK/*..xib” 请注意,我复制lproj目录本身(*.lproj),而不是复制lproj目录(*.lproj/*)的内容,因为Localizable.strings将相互覆盖。我需要把他们放在他们的lang子目录里。
  3. 最后,我使用以下方法访问SDK包: NSBundle(forClass: MySDKClass.self)

我仍然没有100%满意,因为我没有设法使用新的spec.resource_bundles属性。但不管怎样,这很管用。

票数 4
EN

Stack Overflow用户

发布于 2016-12-14 20:14:05

一周来我一直在为这个不停地挣扎。

到目前为止,我发现的最能说明问题的是:https://github.com/CocoaPods/CocoaPods/pull/4635

上面的拉请求声明为了使用resource_bundle,您必须使用RESOURCEDIR/**/* glob模式。RESOURCEDIR是什么似乎并不重要。我一直在尝试各种方法,但是**/* glob会导致Xcode识别本地化目录。

你可以试着复制我的结果

  1. 使用pod lib create创建一个新项目
  2. 在出现提示时选择Yes以包含演示应用程序
  3. 使用Finder转到资产文件夹并添加一个Base.lproj目录
  4. 在podspec文件中,取消注释s.resource_bundles部分,并将*.png更改为**/*
  5. 使用终端运行pod install

现在,在Xcode中,您应该可以看到带有Base.lproj文件夹的资产文件夹。

  1. 将xib或故事板添加到Base.lproj中。
  2. 添加要翻译的标签。
  3. 添加类以支持xib或情节提要
  4. 再次运行pod install以导入新文件
  5. 在项目导航器中选择Pods项目
  6. 运行编辑器>导出本地化。

这应该会产生一个XLIFF文件,您可以使用这个文件进行翻译,然后使用Editor > Import来导入翻译。

导入翻译后,您可能必须运行>

Note看来,包含pod的项目也必须支持本地化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31247664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档