我想在应用首次启动时将另一种语言设置为默认语言。 iOS没有这种语言作为界面语言,所以我唯一的方法是手动设置它。我已经在SO上找到了几十个解决方案,那些有效的解决方案只能在模拟器中工作而不能在真实设备上工作。这是我尝试过的:
首先,设置应用程序语言的方法是:
UserDefaults.standard.set(["xx-XX", "yy-YY"], forKey: "AppleLanguages")
问题是,这需要重新启动应用,而我希望第一次启动应用时设置。我也试过了:
UserDefaults.standard.register(defaults: ["AppleLanguages": ["xx-XX", "yy-YY"]])
甚至调用UserDefaults.standard.synchronize()
,在大多数情况下根本不需要。
我试过这些代码的地方:
UIApplication
进行子类化,创建main.swift
并添加
以上代码作为顶级声明在info.plist
:
Localization native development region
设为xx-XX
Localizations
的第一个元素设置为xx-XX
顺便说一下,此时实施自定义本地化不是一种选择。
最令我困惑的是,为什么这样的功能在模拟器中工作而不是真正的设备。
修改
我甚至删除了默认的英语语言,然后再次添加English (World)
,以便旁边没有Development Language
标签。仍然没有奏效。
答案 0 :(得分:2)
答案 1 :(得分:0)
嗯,没有一种合法的方法可以做到这一点。所以我不得不使用一个讨厌的技巧。
struct WeatherData {
var temp: String
var climate: String
var date: String
}
extension WeatherData: Decodable {
enum RootKey: String, CodingKey {
case query
enum ResultsKey: String, CodingKey {
case results, count, lang, created
enum ChannelKey: String, CodingKey {
case channel
enum ItemKey: String, CodingKey {
case item
enum ConditionKey: String, CodingKey {
case condition
enum WeatherConditions: String, CodingKey {
case temp
case text
case date
}
}
}
}
}
}
init(from decoder: Decoder) throws {
let query = try decoder.container(keyedBy: RootKey.self)
let results = try query.nestedContainer(keyedBy: RootKey.ResultsKey.self, forKey: .query)
let channel = try results.nestedContainer(keyedBy: RootKey.ResultsKey.ChannelKey.self, forKey: .results)
var itemContainerUnidentified = try channel.nestedUnkeyedContainer(forKey: .channel)
let itemContainerIdentified = try itemContainerUnidentified.nestedContainer(keyedBy: RootKey.ResultsKey.ChannelKey.ItemKey.self)
let condition = try itemContainerIdentified.nestedContainer(keyedBy: RootKey.ResultsKey.ChannelKey.ItemKey.ConditionKey.self, forKey: .item)
let weather = try condition.nestedContainer(keyedBy: RootKey.ResultsKey.ChannelKey.ItemKey.ConditionKey.WeatherConditions.self, forKey: .condition)
temp = try weather.decode(String.self, forKey: .temp)
date = try weather.decode(String.self, forKey: .date)
climate = try weather.decode(String.self, forKey: .text)
)
此时,我的开发语言开始了,xx-XX(在本例中为fa-IR)是我的默认语言。你知道其余的,设置fr
用户默认值。
同样,这不是最好和最干净的方法,如果您在开发过程的早期阶段,请使用本地化您的应用的自定义实现,或使用L10n-Swift。当然,如果你不能坚持iOS根据用户选择的设备区域设置为你选择的东西。
答案 2 :(得分:0)
要使默认语言成为一种特定的语言,以下代码的工作原理就像一种魅力。(Swift 4.2)
let arr = NSArray(objects: "ja")
UserDefaults.standard.set(arr, forKey: "AppleLanguages")