инструментрарий
Мультиязычность в iOS
Стандартное решение от Apple предлагает отталкиваться от выбранного языка на нашем устройстве. То есть, чтобы поменять язык в приложении, необходимо полностью поменять язык системы. Что делать, если хочется изменить язык на лету, не выходя из приложения и, тем более, не меняя полностью локаль на устройстве?
Один из вариантов – брать необходимый файл переводов и локализовать приложение на основе выставления своих настроек языка, сохраняя их например в UserDefaults.
Я подготовил менеджер который позволит без труда реализовать быстрое переключение языка в приложении. Проект можно скачать тут ALLocalizedManager.
Менеджер мультиязычноти
Чтобы все это дело заработало необходимо проинициализировать ALLocalizedManager вызвав метод ALLocalizedInit (все методы менеджера сделаны макросами, для удобства) желательно поместить вызов в didFinishLaunchingWithOptions класса AppDelegate.
В момент инициализации проверяется установленый язык из UserDefaults, если настроек еще нет (например, при первом запуске приложения), то берем язык системы и записываем в UserDefaults. После этого, даже если поменять язык системы, в приложении сохранится тот язык, который был проинициалищирован при первом запуске приложения.
использование
В момент установки новой локали необходимо разослать сообщение об этом изменении:
Так как необходимо переключать язык на лету надо отслеживать события измененя, поэтому подписываемся на событие ALLocalizedManagerChangeLangNotification:
После этого в методе обновления нужно обновить текстовки / картинки / ресурсы.
настройка языков
Логика выбора языка во время первого запуска приложения: берется язык системы и проверяется, есть ли он в определенном нами списке языков. Если системный язык отсутствует в словаре, берем тот, который отмечен ключом isDefault.
Пример словаря языков, который необходимо настроить в зависимости от вашего проекта:
Также можно локализовать ресурсы и картинки (ALLocalizationResource, ALLocalizationImage)
методы
Все макросы для работы с менеджером:
Pluralization (Числительные формы)
Для того чтобы добавить в проект числительные формы необходимо сделать слудующее:
- Добавить .strings файл LocalizablePlural
- Допишите в него числовых формы, например: