我正在努力处理我自己的pod中定义的本地化资源。
此pod使用Base Internationalization和以下文件:
Base.lproj
|- Localizable.strings
|- MyViewController.xib
fr.lproj
|- Localizable.strings
|- MyViewController.strings
这是我在podspec
:
spec.resources = "MySDK/*.lproj/*"
在我的应用程序Podfile
中,我的pod被定义为本地依赖项:
pod 'MySDK', :path => '../MySDK'
运行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: "")
}
它有效,但只使用Base.lproj
中定义的字符串,无论手机或模拟器上选择的语言是什么。
我更改了我的podspec
:
spec.resource_bundles = {
"MySDK" => ["MySDK/*.lproj"]
}
为了从代码中加载bundle,但现在什么都不起作用,XIB无法加载。这很奇怪,因为在Development Pods
中,我仍然可以看到与之前完全相同的结构,但是使用蓝色文件夹图标而不是黄色。
以下是我从SDK加载XIB的方式,而不是我的应用程序:
MyViewController.swift
public init(...) {
...
super.init(nibName: "MyViewController", bundle: NSBundle(forClass: MyViewController.self))
}
我改为:
public init(...) {
...
super.init(nibName: "MyViewController", bundle: NSBundle(path: NSBundle.mainBundle().pathForResource("MySDK", ofType: "bundle")!))
}
但它无法找到捆绑包。
从今天早上起,我已经阅读了大量的文档和论坛,但没有成功,所以任何帮助都会受到欢迎! :)
答案 0 :(得分:2)
我终于明白了。
spec.resources
中切换回spec.resource_bundles
而不是podspec
,因为我无法访问生成的捆绑包。然后我不得不关闭XIB的本地化,因为我意识到lang子目录中的资源没有被编译。因此,XIB现在位于lproj
目录之外。
我的新podspec
:
spec.resources = "MySDK/*.lproj", "MySDK/*.xib"
请注意,我复制lproj
目录本身(*.lproj
),而不是lproj
目录(*.lproj/*
)的内容,因为Localizable.strings
会互相覆盖。我需要将它们保存在lang子目录中。
最后,我使用:
访问SDK包NSBundle(forClass: MySDKClass.self)
我仍然没有100%满意,因为我没有设法使用新的spec.resource_bundles
属性。但无论如何,它有效。
答案 1 :(得分:0)
我一直在努力打开和关闭这一周。
到目前为止,我发现的最明显的一点是:https://github.com/CocoaPods/CocoaPods/pull/4635
上面的pull请求状态为了使用resource_bundle你必须使用RESOURCEDIR/**/*
glob模式。 RESOURCEDIR
是什么似乎并不重要。我一直在尝试各种各样的事情,但**/*
glob导致Xcode识别本地化目录。
您可以尝试重现我的结果
pod lib create
创建新项目Base.lproj
目录s.resource_bundles
部分并将*.png
更改为**/*
pod install
现在在Xcode中你应该看到带有Base.lproj文件夹的Assets文件夹。
pod install
以引入新文件这应生成一个可用于翻译的XLIFF文件,然后使用编辑器>导入本地化以引入翻译。
注意您可能需要运行Build>导入翻译后清理。
注意似乎包含pod的项目也必须支持本地化。