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

У меня есть проект, и этот проект поддерживает два языка: английский и испанский.

Если у пользователя выбран испанский язык, приложение открывает испанский язык. Тот же цикл работает и для английского языка.

Во-вторых, у нас есть веб-сайт, и этот веб-сайт предоставляет поддержку на испанском и английском языках. Пользователь может зарегистрироваться (Sign Up) или войти (Sign In) с английского или испанского сайта.

Мой вопрос: как пользователь, если я решу зарегистрироваться через испанский сайт, я должен перейти в приложение на испанском, а не на английском языке.

Как я могу это сделать? Универсальная ссылка или глубокая ссылка. Кто-нибудь собирал этот цикл ранее?


person Durul Dalkanat    schedule 24.01.2018    source источник


Ответы (2)


Вы не можете изменить язык устройства из приложения.

Решением для вашего варианта использования может быть ручная обработка локализации в вашем проекте: вместо того, чтобы полагаться на NSLocalizedString, вам придется использовать свою собственную функцию для предоставления локализации для данной строки/ключа. В «нормальном» сценарии использования вы бы использовали предпочитаемый язык системы; при открытии приложения по ссылке вы должны добавить язык в качестве параметра URL и использовать этот язык для сеанса приложения. (Обратите внимание, что это не будет работать с локализациями Storyboard или Info.plist, только с текстами, которые вы явно установили в коде).

person dr_barto    schedule 24.01.2018
comment
Спасибо за ответ, я не меняю язык устройства. Не меняя язык устройства, я могу изменить язык интерфейса одной кнопкой с английского на испанский или с испанского на английский. Мой вопрос в другом. Пользователь приходит с веб-сайта с другим языком. - person Durul Dalkanat; 24.01.2018
comment
Хорошо, тогда извините, я неправильно понял ваш вопрос. - person dr_barto; 24.01.2018

Используйте Branch iOS SDK для диплинкинга, чтобы убедиться, что пользователь получает язык, даже если приложение не установлено заранее. В ваших ссылках вы должны иметь возможность установить поле language в english, epanish и т. д. Когда пользователь открывает ваше приложение, вы можете просто вытащить эту информацию из обратного вызова Branch вот так.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  // listener for Branch Deep Link data
  Branch.getInstance().initSession(launchOptions: launchOptions) { (params, error) in
      // do stuff with deep link data (nav to page, display content, etc)
      print(params as? [String: AnyObject] ?? {})
      let language = params?['language']
      //Store this in their NSUserDefaults
      let defaults = UserDefaults.standard.set(language, forKey: "language")
  }
  return true
}

Информация в ваших UserDefaults будет сохраняться до тех пор, пока пользователь не удалит приложение и не переустановит его.

let language = UserDefaults.standard.string(forKey: 'language')
person clayjones94    schedule 26.01.2018
comment
Не может что? Использовать отложенные диплинки? - person clayjones94; 26.01.2018
comment
Мы не можем использовать сторонние библиотеки для этого проекта. Это правило проекта. Мы создаем всю библиотеку, которая нам нужна, внутреннюю и их частный модуль. - person Durul Dalkanat; 26.01.2018
comment
Что ж, тогда лучше всего использовать универсальные ссылки, но вы не сможете использовать отложенные прямые ссылки. - person clayjones94; 26.01.2018