我正在努力使用我自己的pod中定义的本地化资源.
此pod使用Base Internationalization和以下文件:
Base.lproj
|- Localizable.strings
|- MyViewController.xib
fr.lproj
|- Localizable.strings
|- MyViewController.strings
Run Code Online (Sandbox Code Playgroud)
这是他们在我的定义podspec:
spec.resources = "MySDK/*.lproj/*"
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中Podfile,我的pod被定义为本地依赖项:
pod 'MySDK', :path => '../MySDK'
Run Code Online (Sandbox Code Playgroud)
运行后pod install,我可以看到完全相同的 lproj文件夹Development Pods/MySDK/Resources/MySDK.
MyViewController.xib 完全加载和本地化,我可以更改手机上的语言,文本也会相应更改.
为了使用本地化字符串,我在SDK pod中定义了一个函数:
public func NSLocalizedIntentString(key: String) -> String {
let sdkBundle = NSBundle(forClass: MySDKClass.self)
return NSLocalizedString(key, tableName: nil, bundle: sdkBundle, value: key, comment: "")
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,除了它只使用Base.lproj在手机或模拟器上选择的语言中定义的字符串.
我改变了我podspec的意思:
spec.resource_bundles = {
"MySDK" => ["MySDK/*.lproj"]
}
Run Code Online (Sandbox Code Playgroud)
为了从代码加载bundle,但现在什么都不起作用,XIB无法加载.这很奇怪,因为Development Pods我仍然可以看到与之前完全相同的结构,但是使用蓝色文件夹图标而不是黄色.
以下是我从SDK加载XIB的方法,而不是从我的应用程序加载:
MyViewController.swift
public init(...) {
...
super.init(nibName: "MyViewController", bundle: NSBundle(forClass: MyViewController.self))
}
Run Code Online (Sandbox Code Playgroud)
我改为:
public init(...) {
...
super.init(nibName: "MyViewController", bundle: NSBundle(path: NSBundle.mainBundle().pathForResource("MySDK", ofType: "bundle")!))
}
Run Code Online (Sandbox Code Playgroud)
但它无法找到捆绑.
从今天早上开始,我已经阅读了大量的文档和论坛,但没有成功,所以任何帮助都会受到欢迎!:)
我终于弄明白了。
spec.resources而不是spec.resource_bundles在我的中podspec,因为我无法访问生成的包。然后我不得不关闭 XIB 的本地化,因为我意识到 lang 子目录中的资源没有被编译。因此,XIB 现在位于lproj目录之外。
我的新podspec:
spec.resources = "MySDK/*.lproj", "MySDK/*.xib"
Run Code Online (Sandbox Code Playgroud)
请注意,我复制lproj目录本身 ( *.lproj),而不是目录的内容lproj( *.lproj/*),因为它们Localizable.strings会相互覆盖。我需要将它们保存在 lang 子目录中。
最后,我通过以下方式访问 SDK 包:
NSBundle(forClass: MySDKClass.self)
Run Code Online (Sandbox Code Playgroud)我仍然不是100%满意,因为我没能使用新spec.resource_bundles房产。但无论如何,它有效。
| 归档时间: |
|
| 查看次数: |
1921 次 |
| 最近记录: |