iOS будет иметь список предпочтительного порядка языков на основе ранее выбранных языков.
Итак, если вы перешли с английского на несопоставленный язык (например, ko), приложение будет иметь в качестве AppleLanguages массив:
[ko-(Код Зоны), en-(Код Зоны)].
Вы можете избежать этой процедуры, используя этот код ниже:
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, которая может помочь вам найти лучшее решение для того, что вам нужно.
Кроме того, это только проверка и обновление для текущей локали и языка по умолчанию. сюда не входит раздел «Регион» (например, ko-KR (KR)).
Я нашел интересный текст на эту тему, который может быть полезен Как не надо делать локализацию.
Я надеюсь, что это решит вашу проблему!
person
Luiz Henrique
schedule
23.10.2019