我正在努力使用我自己的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无法加载.这很奇怪,因为 …
我的项目中有两个模块:
commonappcommon依赖Koin,这是一个用于依赖注入的 Kotlin 库:
dependencies {
implementation 'org.koin:koin-core:1.0.2'
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
class MyPresenter: KoinComponent {
...
}
Run Code Online (Sandbox Code Playgroud)
app 不依赖于 Koin 库,因为我不需要在 Android 代码中注入任何东西,所有注入都在公共代码中(演示者、拦截器等)。
但app取决于common:
dependencies {
implementation project(':common')
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
class MyFragment {
private val presenter = MyPresenter()
}
Run Code Online (Sandbox Code Playgroud)
我可以编译common,我可以在 中运行单元测试common,但是当我尝试编译时出现app此错误:
无法解析以下类的超类型。请确保您在类路径中具有所需的依赖项:class xxx.common.presenter.MyPresenter,未解析的超类型:org.koin.standalone.KoinComponent
当我跑 ./gradlew :app:dependencies
debugCompileClasspath
+--- project :common
debugRuntimeClasspath
+--- project :common
| +--- org.koin:koin-core:1.0.2
Run Code Online (Sandbox Code Playgroud)
依赖项在runtime配置中,但在配置中缺失 …