2011-03-28 78 views
1

我是新开发的iOS应用程序。所以我最近遇到了我的应用本地化问题。我想执行一些操作来响应系统设置中的语言更改。 要获取语言ID我applicationDidFinishLaunchingWithOptions方法使用如何跟踪iPad中的语言变化?

[[NSLocale preferredLanguages] objectAtIndex:0]; 

。第一次它返回语言ID权限(例如英语为“en”)。然后,我关闭应用程序(或将其发送到后台)并将语言更改为德语。之后,我重新启动我的应用程序,但不是“德”,它仍然返回“EN”。我认为我的应用程序可能会将旧的设置存储在某个地方......但究竟在哪里?如何检索有效的当前值?

+0

我发现我的问题的来源。它是iOS模拟器。我在设备上安装了我的应用程序,所有问题都消失了。 – Yarlik 2011-03-30 12:31:05

+0

如果这个解决方案解决了你的问题,那么你应该为你的问题写一个答案,并接受它作为正确的答案(不仅仅是一个评论)。 – antf 2012-05-26 09:43:35

回答

0

我发现我的问题的来源。它是iOS模拟器。我在设备上安装了我的应用程序,所有问题都消失了。

0

看看这个老答案:

Getting current device language in iOS?

编辑:

NSString *testLang = [[NSLocale preferredLanguages] objectAtIndex:0]; 
NSString *testLang1 = [[NSLocale preferredLanguages] objectAtIndex:1]; 
NSString *testLang2 = [[NSLocale preferredLanguages] objectAtIndex:2]; 
NSString *testLang3 = [[NSLocale preferredLanguages] objectAtIndex:3]; 
NSString *testLang4 = [[NSLocale preferredLanguages] objectAtIndex:4]; 
NSLog(@"LINGUA SYS:%@:%@:%@:%@:%@",testLang,testLang1,testLang2,testLang3,testLang4); 
在调试器控制台

LINGUA SYS:恩:它FR:德:ja

或者:

LINGUA SYS:ES:恩:它FR:德

或:

LINGUA SYS:PT-PT:EN ES:它:FR

所以你发布的代码是没错,误差应在别的地方...

+0

我已经做了一些功课,然后决定问我的问题。我读过这个话题。这很有用,但并不能解决我的问题。调用'[[NSLocale preferredLanguages] objectAtIndex:0];'在语言更改前后返回相同的值。我在小测试应用程序中测试了这个函数,并且它正常工作...但是我仍然无法理解,为什么它在我的主应用程序中不起作用。无论如何,谢谢你的回答。 – Yarlik 2011-03-30 07:44:03

+0

@ user68 ...:mhm,这对我没有意义...我试过你的代码行,它正确地更改了返回的值,所以如果我要求objectAtIndex:1(或2,3 ...)我总是为1获得“en”(当然,在en为0的情况下),然后是2,3 ...在我最后一次更改之前,我已经在0的语言...所以你的错误可能在某处否则......你确定你正在以正确的方式检查它,你在哪里把你得到的价值形成该行代码?我在我的答案中添加了新的编辑... – meronix 2011-03-30 08:14:52

+0

在我看来,问题在于某些项目设置。我发现了另一个类似问题的主题[链接](http://stackoverflow.com/questions/4294597/how-to-prevent-need-for-rebuilding-app-after-changing-language-region) – Yarlik 2011-03-30 08:18:17

0

,如果你做这样的事情:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en",@"es", nil] forKey:@"AppleLanguages"]; 

值存储在NSUSerD默认设置和设置更改不适用。

+1

感谢您的关心,但请阅读我的问题的评论。我已经解决了这个问题。 – Yarlik 2011-06-08 06:49:31