Khi bạn đang phát triển SDK. Bạn cần một số hoạt động thêm.
1) tạo Localizable.strings như bình thường trong YourLocalizeDemoSDK.
2) tạo cùng Localizable.strings trong YourLocalizeDemo.
3) tìm đường dẫn Bundle của bạn của bạn về YourLocalizeDemoSDK.
Swift4 :
// if you use NSLocalizeString in NSObject, you can use it like this
let value = NSLocalizedString("key", tableName: nil, bundle: Bundle(for: type(of: self)), value: "", comment: "")
Bundle(for: type(of: self))
giúp bạn tìm gói trong YourLocalizeDemoSDK. Nếu bạn dùngBundle.main
thay thế, bạn sẽ nhận được một giá trị sai (thực tế nó sẽ là cùng một chuỗi với khóa).
Nhưng nếu bạn muốn sử dụng phần mở rộng String được đề cập bởi dr OX . Bạn cần phải làm thêm một số. Phần mở rộng nguồn gốc trông như thế này.
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
Như chúng ta biết, chúng tôi đang phát triển SDK, Bundle.main
sẽ nhận được gói của YourLocalizeDemo. Đó không phải là những gì chúng ta muốn. Chúng tôi cần gói trong YourLocalizeDemoSDK. Đây là một mẹo để tìm thấy nó một cách nhanh chóng.
Chạy mã dưới đây trong một phiên bản NSObject trong YourLocalizeDemoSDK. Và bạn sẽ nhận được URL của YourLocalizeDemoSDK.
let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL
In cả hai url, bạn sẽ thấy rằng chúng tôi có thể xây dựng cơ sở bundleURLofSDK trên mainBundleURL. Trong trường hợp này, nó sẽ là:
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
Và phần mở rộng String sẽ là:
extension String {
var localized: String {
let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
return NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "")
}
}
Hy vọng nó giúp.