Recarregar o storyboard para alterar a localidade
Estou usando um Storyboard único e localizado para o meu aplicativo. O aplicativo precisa ter uma opção para alterar o idioma rapidamente. Até agora, descobri como alterar o idioma usado durante o lançamento do aplicativo:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize]; //to make the change immediate
E consegui recarregar meu aplicativo inteiro removendo todas as subvisões da janela principal, recarregando o controlador de exibição inicial do storyboard e tornando-o o novo controlador de exibição raiz. (Ele tem alguns problemas, como gerenciar recursos abertos, mas pode ser feito.)
A única coisa que não consegui descobrir é como forçar o iOS a recarregar o storyboard no novo idioma? Parece que os storyboards estão armazenados em cache de alguma forma, e-UIStoryboad:stroyboardWithName:fromNib
não o recarrega completamente, por isso aparece no último idioma.
Eu já considerei duas outras opções:
ter arquivos de storyboard diferentes para cada idioma (é incontrolável, não quero fazer isso)
usando ouvintes de eventos em todos os meus controladores de exibição que respondem a uma mudança de idioma e definem as novas strings na interface do usuário (que também deve ser chamada toda vez que qualquer elemento da interface é instanciado no storyboard). Essa solução requer mais tempo do que gostaríamos de gastar com isso e também aumenta muito a possibilidade de erros.
Existe alguma maneira mais inteligente? Não quero manter o estado atual do meu aplicativo, portanto, reiniciá-lo como se tivesse sido morto e executado novamente parece uma resolução razoável.