我正在进行国际化iPhone应用程序的过程 - 我需要根据用户当前的语言环境对某些视图进行编程更改.我疯了,因为无论iPhone模拟器或实际硬件上的语言偏好如何,locale总是评估为"en_US":
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Run Code Online (Sandbox Code Playgroud)
疯狂的是,应用程序的其余部分按预期运行.从Localization.strings文件中选择正确的字符串并在界面中使用,并使用所选语言环境的正确.xib文件.
我也试过以下,但没有用,结果相同:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Run Code Online (Sandbox Code Playgroud)
我有什么简单的东西吗?可能是偏好还是导入?
我以前做的:
正如Darren的回答所暗示的那样,我正在寻找的偏好不在NSLocale,而是在这里:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Run Code Online (Sandbox Code Playgroud)
彼得的答案似乎是一个更好的解决方案:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);
Run Code Online (Sandbox Code Playgroud) 模拟器的语言已经改为日语,为什么[[NSLocale preferredLanguages] objectAtIndex:0] 总是返回"en"?
首选语言和地区都与"en"无关,它"en"来自哪里?

试图获得[[NSLocale preferredLanguages] objectAtIndex:2],然后崩溃显示*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (2) beyond bounds (1)
这是否意味着模拟器中没有设置任何语言?太奇怪了!
在使用iOS8.1/7.1升级到Xcode 6.1之前,这种情况从未发生过.
同时,在我的iPhone 5上试过同样的东西,控制台输出正确的东西.
为什么这么奇怪?有没有人有这样的问题?
哦! 怎么了....
"en"再次,日语和英语没有发现!"en"找到一个?日语和英语在哪里?我需要得到一个字符串像en_US或es_ESiOS中.
显而易见的方法是使用[NSLocale currentLocale]并从那里获取语言信息.但是,这会为您提供"区域格式"而不是实际的设备语言,这意味着如果您使用英语设备语言但区域格式为"西班牙",则会错误地报告es_ES.
如果您需要设备语言,则必须执行以下操作:
[[NSLocale preferredLanguages] objectAtIndex:0]
但是,这只会为您提供语言,因此您可以获得类似en或es最终没有国家/地区代码的内容.
我如何正确获取国家代码,就像Safari一样?
我已经找到了上一个问题,但它使用C.有没有办法通过JQuery或JavaScript来做到这一点?
我知道你可以在iOS上获得所有国家的双字母国家代码.但有没有办法获得三个字母的国家代码?
所以从http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2到http://en.wikipedia.org/wiki/ISO_3166-1_alpha-3 提前致谢!
我打开地图应用程序,从我的代码中显示从用户的当前位置到目标坐标的路线.我使用以下代码打开地图应用.我按下按钮时调用此代码.getCurrentLocation是一种返回最近更新位置的方法.
- (void)showDirectionsToHere {
CLLocationCoordinate2D currentLocation = [self getCurrentLocation]; // LINE 1
NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f",
currentLocation.latitude,
currentLocation.longitude,
destCoordinate.latitude,
destCoordinate.longitude];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
Run Code Online (Sandbox Code Playgroud)
这里[self getCurrentLocation]在LINE 1中用于CLLocationManager确定当前位置并返回该值.
注意:我还没有在LINE1中实现代码.我刚刚计划这样做.
我的问题是:
[self getCurrentLocation在openURL被叫之前返回当前位置吗?我对这些事情有点困惑.请指导我.谢谢.
我试图找到一种方法来获取当天的时间.显然,有一种简单的方法可以将它应用于显示早晨,晚上 如果您对一种语言的静态单词感到满意.有没有办法根据Locale制作它?NSDateComponentsFormatter似乎没有做到这一点.
我的应用程序在运行时更改语言,并建议用户重新启动应用程序.我是这样做的:
typealias LanguageLocaleType = (language: String?, locale: String?, title: String)
let elements: [LanguageLocaleType] = [
(nil, nil, "System Default"),
("en", "en_US", "English"),
("ar", "ar_SA", "Arabic"),
]
//...func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)...
let element = elements[indexPath.row]
guard let language = element.language else {
// How to really reset app back to OS language/locale???
UserDefaults.standard.removeObject(forKey: "AppleLanguages")
UserDefaults.standard.removeObject(forKey: "AppleLocale")
return
}
UserDefaults.standard.set([language], forKey: "AppleLanguages")
if let locale = element.locale, !locale.isEmpty,
Locale.current.identifier != locale,
!Locale.current.identifier.hasPrefix("\(language)_") {
UserDefaults.standard.set(locale, forKey: "AppleLocale")
}
Run Code Online (Sandbox Code Playgroud)
我想提供在列表中设置语言并选择正确的语言,其中一个语言被提供给语言设置System …
我有一个场景,我希望有一个处理程序,当用户按下iOS键盘上的语言更改(地球图标)时会触发该处理程序.
我怎么可能实现这一目标?
谢谢
我正在尝试使用以下代码在我的设备中获取正确的语言(不在模拟器中):
NSString * languageLocale = [[NSLocale preferredLanguages] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
它总是“en”, 但我当前的语言设置为西班牙语
有什么想法为什么检索总是“en”而不是当前的设备语言?
ios ×7
iphone ×3
nslocale ×2
swift ×2
cocoa ×1
cordova ×1
google-maps ×1
ios5 ×1
ios8.1 ×1
keyboard ×1
localization ×1
objective-c ×1
region ×1