iOS будет иметь список предпочтительного языкового порядка на основе ранее выбранных языков.
Таким образом, если вы перешли с английского языка на несвязанный язык (например, ko), приложение будет иметь в качестве AppleLanguages массив:
[ko- (ZoneCode), en-(ZoneCode)].
Вы можете избежать этой процедуры, используя следующий код:
let defaultCultureCode: String = "en"
let defaults = UserDefaults.standard
let currentAppleLanguages = defaults.stringArray(forKey: "AppleLanguages")
if let currentLanguages = currentAppleLanguages {
if(!currentLanguages.isEmpty && !(currentLanguages.first?.contains(["en", "fr"]))!) {
defaults.removeObject(forKey: "AppleLanguages")
defaults.set([defaultCultureCode], forKey: "AppleLanguages")
defaults.synchronize()
}
}
Я использовал это расширение строки, чтобы проверить, содержат ли текущие языки доступный язык:
extension String {
public func contains(_ elements: [String]) -> Bool {
var haveElementOnString = false
if elements.count == 0 { return false }
else { elements.forEach{ element in haveElementOnString = haveElementOnString || self.contains(element)} }
return haveElementOnString
}
}
На следующем шаге вам предстоит определить лучшую стратегию.
В моем контексте приложения он всегда будет определяться как английский по умолчанию, потому что это единственный доступный файл .strings,Все остальные поддерживаемые строки будут загружены, а затем пользователю будет показано сообщение с предупреждением о том, что новые языки доступны и будут применены в следующий раз.
В StackOverflow много информации о bundle.localizedStringForKey или NSLocalizedStringэто может помочь вам найти лучшее решение для того, что вам нужно.
Кроме того, это только проверка и обновление для текущей локали и языка по умолчанию. сюда не входит раздел Region (например, ko-KR (KR)).
Я нашел интересный текст на эту тему, который может быть полезен Как не делать локализацию .
Надеюсь, это решит вашу проблему!