2016-05-09 2 views
5

Я использую библиотеку Localize-Swift (Link), чтобы локализовать мое приложение и отлично работает с файлами .strings. проблема в том, что я должен локализовать язык, который справа налево, и мне нужно локализовать через Strawboard Interface Builder, поэтому я могу заставить контроллеры представлений правильно смотреть в формате RTL. вопрос в том, как установить раскадровку на выбранный пользователем язык в режиме реального времени?Swift: Как изменить язык внутри приложения?

, например, у меня есть 2 раскадровки файлы:

1- ... /ProjectName/Base.lproj/Main.storyboard

2- ... /ProjectName/fa-IR.lproj/Main .storyboard

Как переключаться между ними в режиме реального времени?

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

благодарит

+1

У меня была такая же проблема раньше, и я разместил решение, которое работало со мной: HTTP://stackoverflow.com/a/37111734/1752899 –

ответ

5

нашел мой ответ:

NSUserDefaults.standardUserDefaults().setObject(["language identifier"], forKey: "AppleLanguages") 
NSUserDefaults.standardUserDefaults().synchronize() 

, к сожалению, пользователь должен перезапустить приложение! Если кто-нибудь может найти решение, чтобы не перезапустить приложение, пожалуйста, сообщите мне.

+1

проверить мой комментарий в ваших вопросах. Я локализую приложение без перезапуска –

+0

@HossamGhareeb. Как мы можем добиться без перезапуска приложения. пожалуйста, скажите мне –

+0

'.synchronize()' устарел и больше не должен использоваться. – Moritz

3

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

+0

Ваше решение настолько короткое, что я нашел его на ранней стадии, но не пробовал. теперь после нескольких дней я пытался, и я счастлив .. Я использовал это: https://github.com/maximbilan/ios_language_manager Это точно такой же код (копировать вставку?!?!), но с дополнениями, без ошибок, с примерами использования и запущенное приложение. 10 минут это было реализовано в моем проекте =] – Yitzchak

0

Возможно, the RSMultiLanguage pod полезное для вас? Я использовал его в своих приложениях и предоставляет возможность изменить язык пользователя в приложении. Я уверен, что вы можете установить его в зависимости от местоположения пользователя с циклом if. Таким образом, вам может не потребоваться перезапустить приложение.

RSMultiLanguage

Использование

Чтобы запустить пример проекта, клонировать репозиторий, и запустить стручок установить из каталога Пример первый.

Установка

RSMultiLanguage доступна через CocoaPods. Чтобы установить его, просто добавьте следующую строку в Podfile:

pod "RSMultiLanguage" 

Автор

Рой Ng, [email protected]

Лицензия

RSMultiLanguage доступно в соответствии с лицензию MIT. Дополнительную информацию см. В файле LICENSE.

0
  1. Требуется перезагрузка приложения. Следуйте строкам кода ниже.

    UserDefaults.standard.набор ([ "Идентификатор языка"], forKey: "AppleLanguages") UserDefaults.standard.synchronize()

  2. Перезапуск приложения не требуется (ответ может требует настройки в условии исходного кода). Следуйте предоставленной веб-ссылке.

http://www.factorialcomplexity.com/blog/2015/01/28/how-to-change-localization-internally-in-your-ios-application.html

1

Я думаю, что ответ KababChi был прав. Однако в новых версиях Swift NSUserDefaults был заменен на UserDefaults. Таким образом, код будет выглядеть так:

UserDefaults.standard.set(languages[indexPath.row], forKey: "AppleLanguages") 
UserDefaults.standard.synchronize() 

Приложение все еще необходимо перезапустить, чтобы применить эти изменения.

Смежные вопросы