Можно ли установить язык показываемого ViewController вне зависимости от языка устройства?

В iOS есть возможность устанавливать язык показываемого ViewController независимо от языка устройства. Однако, это требует некоторых дополнительных действий, чтобы достичь желаемого результата.

Стандартно, в iOS язык показываемого контента зависит от настройки языка на устройстве. Это происходит из-за того, что iOS автоматически подгружает локализованные ресурсы для языка, выбранного на устройстве.

Для установки языка показываемого ViewController независимо от языка устройства, нам необходимо реализовать собственный механизм локализации. Следующие шаги помогут нам достичь этой цели:

1. Создайте Localizable.strings файлы для каждого языка, которые вы хотите поддерживать. Например, Localizable.strings для английского языка и Localizable.strings для французского языка. В каждом файле объявите ключи и значения для всех текстовых элементов вашего ViewController.

2. Создайте класс LanguageManager, который будет ответственен за установку языка при загрузке ViewController. В этом классе вы можете реализовать методы для изменения языка, а также методы для получения соответствующей локализованной строки из Localizable.strings файлов.

3. В AppDelegate установите язык при запуске приложения. В методе application:didFinishLaunchingWithOptions: добавьте код, который будет вызывать метод устанавливающий выбранный язык из LanguageManager.

4. В вашем ViewController добавьте код, который будет вызывать метод получения локализованной строки для каждого текстового элемента и устанавливать соответствующее значение.

Пример кода для LanguageManager:

class LanguageManager {
    static func setLanguage(_ languageCode: String) {
        UserDefaults.standard.set([languageCode], forKey: "AppleLanguages")
        UserDefaults.standard.synchronize()
    }
    
    static func getLocalizedString(key: String) -> String {
        let currentLanguage = UserDefaults.standard.object(forKey: "AppleLanguages") as! [String]
        let path = Bundle.main.path(forResource: currentLanguage[0], ofType: "lproj")
        let bundle = Bundle(path: path!)
        
        return NSLocalizedString(key, tableName: nil, bundle: bundle!, value: "", comment: "")
    }
}

Пример использования в ViewController:

class ViewController: UIViewController {
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var descriptionLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        titleLabel.text = LanguageManager.getLocalizedString(key: "title_key")
        descriptionLabel.text = LanguageManager.getLocalizedString(key: "description_key")
    }
}

Теперь, при изменении языка в LanguageManager, язык показываемого ViewController будет меняться в соответствии с выбранным языком. Это позволяет устанавливать язык показываемого ViewController независимо от языка устройства.