我的应用包含4种不同的语言。现在开发语言是英语我想设置一些其他语言(俄语)作为默认语言(应用程序语言必须是俄语,当应用程序第一次安装时)我该如何实现?
在我的app delegate中:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
NSBundle.setLanguage(defaultLanguage)
}
extension NSBundle {
class func setLanguage(language: String) {
defer {
object_setClass(NSBundle.mainBundle(), Language.self)
}
objc_setAssociatedObject(NSBundle.mainBundle(), &bundleKey, NSBundle.mainBundle().pathForResource(language, ofType: "lproj"), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
我添加了此代码,但语言没有改变。
答案 0 :(得分:0)
您可以使用UserDefaults存储当前语言。如果未设置,请使用默认语言。
这是中文例如:
var bundle: Bundle? = nil
func setLanguage(_ index: Int) {
switch index {
case 0:
print("Set language to En.")
let path = Bundle.main.path(forResource: "Base", ofType: "lproj")
self.bundle = Bundle.init(path: path!)
case 1:
print("Set language to Zh.")
let path = Bundle.main.path(forResource: "zh-Hant", ofType: "lproj")
self.bundle = Bundle.init(path: path!)
case 2:
print("Set language to Ch.")
let path = Bundle.main.path(forResource: "zh-Hans", ofType: "lproj")
self.bundle = Bundle.init(path: path!)
default:
let path = Bundle.main.path(forResource: "zh-Hant", ofType: "lproj")
self.bundle = Bundle.init(path: path!)
break
}
}
func get(_ key: String) -> String {
if self.bundle != nil {
return NSLocalizedString(key, tableName: "Localizable", bundle: bundle!, value: "", comment: "")
}
return ""
}
答案 1 :(得分:0)
您可以将当前语言保存在NSUserDefaults
中。创建不同的文本文件以将不同的语言特定数据保存为读取和放大的键值对。写。每个文件只能包含该语言的键值。例如密钥字符串home,
english.txt
包含值home
,其中bangla.txt
包含নীড়
等。
然后为getter和setter方法为UniversalLanguageProvider
创建一个类。只需创建一个字典,并根据您在NSUserDefaults
中设置的语言将文本文件中的所有文本数据保存到此。
首次启动应用时,当前语言为nil
。然后你可以像这样明确地设置为俄语:
NSString* language = [[NSUserDefaults standardUserDefaults] objectForKey:@"language"];
if(!language)
[[NSUserDefaults standardUserDefaults] setObject:@"russian"
forKey:@"language"];