Сменить язык в приложении - как перезагрузить? - PullRequest
0 голосов
/ 20 января 2011

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

Способ сделать это описан здесь , в моно-коде, чтобы установить предпочитаемый язык на голландскийи альтернативный язык на английский:

  NSUserDefaults.StandardUserDefaults.SetValueForKey
                (NSArray.FromStrings("nl", "en"), new NSString("AppleLanguages"));

Вы должны перезапустить приложение, прежде чем это вступит в силу.Но на iPhone 4 приложение не перезагружается при закрытии, оно просто скрыто.Есть ли способ принудительно перезапустить приложение после закрытия?

Ответы [ 4 ]

6 голосов
/ 20 января 2011

Спасибо, Димитрис. Так что изменить язык во время выполнения не так просто.

Я нашел решение, которое работает в моем случае:

Когда пользователь меняет язык, я использую решение, описанное Мауро Делрио в «Как заставить NSLocalizedString использовать определенный язык» . В одно касании:

    string newLanguage = "nl";
    myBundle = NSBundle.FromPath(NSBundle.MainBundle.PathForResource(newLanguage, "lproj"));

Все строки теперь будут загружаться на выбранном языке с помощью myBundle.LocalizedString (...). Конечно, все, что уже было напечатано в виде, еще не переведено. Но я нашел простой способ сбросить все просмотры. В моем приложении я использую MainTabController, который выглядит так:

public class MainTabBarController : UITabBarController
{
    public override void ViewDidLoad()
    {
        Reset();
        SelectedIndex = 2;
    }

    public void Reset()
    {
        ViewControllers = new UIViewController[]
        {
            new ViewControllerTab1(),
            new ViewControllerTab2(),
            new ViewControllerTab3(),
            new ViewControllerTab4(),
            new ViewControllerTab5()
        };
    }
}

Так что все, что мне нужно сделать, это вызвать Сброс, как:

((AppDelegate)UIApplication.SharedApplication.Delegate).MainTabBarController.Reset();

Все текущие представления располагаются и воссоздаются на правильном языке. Похоже на хитрость, но это совершенно законно и задокументировано, см. Документация Apple для свойства MainTabBarController viewControllers . Он даже активирует тот же индекс вкладки, что и тот, который был активен, поэтому пользователю кажется, что ничего, кроме языка, не изменилось.

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

1 голос
/ 20 января 2011

Нет, нет способа перезапустить приложение. Вы можете принудительно завершить его, когда пользователи нажимают кнопку «Домой», установив для свойства «UIApplicationExitsOnSuspend» в файле Info.plist значение true.

0 голосов
/ 26 сентября 2012

В качестве дополнительного примечания, чтобы заставить UIBarButtonSystemItem изменить свой языковой стандарт, вы должны добавить

<key>CFBundleDevelopmentRegion</key> 
 <string>nl</string> 

в ваш info.plist.Просто запустите TextEdit и поместите его где-нибудь.Надеюсь, это поможет!

0 голосов
/ 01 мая 2011

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

вот пост, который я написал для этого http://learning -ios.blogspot.com / 2011/04 / advance-localization-in-ios-apps.html

и вот код одного примера приложения https://github.com/object2dot0/Advance-Localization-in-ios-apps

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