Использование неправильного Localizable.string - PullRequest
0 голосов
/ 23 октября 2019

У меня есть приложение для iOS с языком по умолчанию (английский). Он также имеет французскую локализацию и работает, как и ожидалось, на обоих языках.

Вот проблема, с которой я сталкиваюсь: при установке устройства на язык, отличный от английского (по умолчанию) или на язык, для которого предусмотрена локализация (например, установка устройства на японский язык);приложение не падает, как ожидается, на языке по умолчанию. Но он сохраняет последний язык, используемый для приложения. Почему это? И как я могу это исправить?

Я нашел несколько постов с похожей проблемой, но предложенные решения не сработали для меня. Например это , где проблема похожа на мою.

Я использую Xcode версии 11.1 и iOS версии 12.4.2.

1 Ответ

0 голосов
/ 23 октября 2019

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)).

Я нашел интересный текст на эту тему, который может быть полезен Как не делать локализацию .

Надеюсь, это решит вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...