后面写的是
- English
, 这是因为英语是系统默认添加的, 而且同时为
- 3 Files Localized
和
- Main.storyboard
设置了多语言, 我在自己添加的时候没有勾选这两项.
- LaunchScreen.storyboard
的使用, 有一个必要的条件, 就是: 多语言文件名字必须是
- NSLocalizedString
, 否则到最后显示的只能是 key; 者中设置完之后只能让应用跟随系统的语言版本进行切换, 而用户不能手动进行切换
- Localizable
- label.text = NSLocalizedString("label", nil)
- //跟随系统切换, 多语言文件名必须是Localizable
- NSLocalizedString("label", nil);
- //下面三个都可以手动设置多语言
- //第一个参数:是多语言中的key
- //第二个参数:是多语言文件的名字
- //第三个参数:是对key的注释说明,一般传nil
- NSLocalizedStringFromTable(@"label", @"STLocalizable", nil);
- //指定多语言文件名和bundle
- NSLocalizedStringFromTableInBundle(@"label", @"STLocalizable", bundle, nil);
- //在上面的基础上增加一个默认值的参数
- NSLocalizedStringWithDefaultValue(@"label", @"STLocalizable", bundle, @"label", nil);
- NSLocalizedStringFromTable
- label.text = NSLocalizedStringFromTable(@"label", @"STLocalizable", nil);
后, 发现每一种语言都对应一个文件夹, 后缀是
- Show in Finder
,
- .lproj
文件
- STLocalizable.strings
- STLocalizable.strings
值, 对应的想要切换语言的话, 直接切换
- value
后面的参数即可
- pathForResource
存储当前语言
- NSUserDefaults
- - (IBAction) changeLanguage: (UIButton * ) sender {
- switch (sender.tag) {
- case 10:
- { //中文
- [[NSUserDefaults standardUserDefaults] setObject:
- @"zh-Hans"forKey:
- appLanguage];
- }
- break;
- case 11:
- { //日文
- [[NSUserDefaults standardUserDefaults] setObject:
- @"ja"forKey:
- appLanguage];
- }
- break;
- case 12:
- { //英文
- [[NSUserDefaults standardUserDefaults] setObject:
- @"en"forKey:
- appLanguage];
- }
- break;
- default:
- break;
- }
- }
- //根据NSUserDefaults的key去取多语言类型
- NSString *laguageType =[NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]];
- //在文件目录中确认多语言类型对应的路径
- NSString *path = [[NSBundle mainBundle] pathForResource:laguageType ofType:@"lproj"];
- //在多语言文件中查找label对应的值
- NSString *labelText = [[NSBundle bundleWithPath:path] localizedStringForKey:@"label" value:nil table:@"ASLocalized"];
- self.label.text = labelText;
的
- APPDelegate
中:
- didFinishLaunchingWithOptions
- if (![[NSUserDefaults standardUserDefaults] objectForKey:appLanguage]) {
- //默认设为英文
- [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage];
- }
- //获取第一个首选语言
- NSString *language = [NSLocale preferredLanguages][0];
- if (![[NSUserDefaults standardUserDefaults] objectForKey:appLanguage]) {
- NSArray *languages = [NSLocale preferredLanguages];
- NSString *language = [languages objectAtIndex:0];
- if ([language hasPrefix:@"zh-Hans"]) {
- [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage];
- } else if ([language hasPrefix:@"ja"] ) {
- [[NSUserDefaults standardUserDefaults] setObject:@"ja" forKey:appLanguage];
- } else {
- [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage];
- }
- }
- #define LanguageKey @"appLanguage"
- //获取当前语言
- [[NSUserDefaults standardUserDefaults] objectForKey:LanguageKey];
- //获取首选语言顺序
- [NSLocale preferredLanguages];
- //获取首选语言第一语言
- [[NSLocale preferredLanguages] objectAtIndex:0];
- //获取系统所有语言
- [NSLocale availableLocaleIdentifiers];
- //获取当前语言文件路径
- NSString *currentLanguage = [[NSUserDefaults standardUserDefaults] ;objectForKey:LanguageKey];
- NSString *path = [[NSBundle mainBundle] pathForResource:currentLanguage ofType:@"lproj"];
- //根据key获取当前语言对应的本地字符串(参数value:如果key是nil或key在表中找不到本地化字符串,则返回的值。)
- NSString *value = [[NSBundle bundleWithPath:path] localizedStringForKey:@"label" value:nil table:@"TiLocalizable"];
来源: http://www.bubuko.com/infodetail-1972217.html