面试题答案
一键面试在Objective-C编写的Mac OS应用中:
获取用户系统的语言偏好设置
可以使用 NSUserDefaults
类结合特定的键来获取用户系统语言偏好设置。具体步骤如下:
- 通过
NSUserDefaults
的standardUserDefaults
类方法获取共享的用户默认设置对象。 - 使用
objectForKey:
方法,传入AppleLanguages
键来获取语言偏好数组。
示例代码如下:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
if (languages.count > 0) {
NSString *preferredLanguage = languages[0];
NSLog(@"Preferred language: %@", preferredLanguage);
}
根据语言偏好切换应用内显示的语言
-
本地化字符串:
- 首先,在项目中创建不同语言的
strings
文件。例如,对于英文,创建Localizable.strings
文件放在en.lproj
文件夹下;对于中文,创建Localizable.strings
文件放在zh-Hans.lproj
文件夹下(简体中文)。 - 在
Localizable.strings
文件中,以键值对的形式存储需要本地化的字符串。例如:"key_for_welcome_message" = "Welcome"; // en.lproj/Localizable.strings "key_for_welcome_message" = "欢迎"; // zh-Hans.lproj/Localizable.strings
- 首先,在项目中创建不同语言的
-
加载本地化字符串:
- 使用
NSLocalizedString
宏来加载本地化字符串。这个宏会根据当前系统语言偏好自动加载对应的字符串。 - 示例代码如下:
NSString *welcomeMessage = NSLocalizedString(@"key_for_welcome_message", @"Description of the welcome message");
- 使用
-
动态切换语言:
- 如果需要在应用运行时动态切换语言,可以使用
NSBundle
类。 - 首先创建一个方法来根据传入的语言代码创建对应的
NSBundle
对象。 - 示例代码如下:
- 如果需要在应用运行时动态切换语言,可以使用
- (NSBundle *)bundleForLanguage:(NSString *)languageCode {
NSString *path = [[NSBundle mainBundle] pathForResource:languageCode ofType:@"lproj"];
return [NSBundle bundleWithPath:path];
}
- 然后在需要切换语言的地方,获取对应语言的 `NSBundle` 对象,并设置给 `NSLocalizedString` 宏使用的 `NSBundle`。例如:
NSBundle *newBundle = [self bundleForLanguage:@"zh-Hans"];
NSString *localizedString = NSLocalizedStringFromTableInBundle(@"key_for_welcome_message", @"Localizable", newBundle, @"Description of the welcome message");