您的位置:首页 > 移动开发 > IOS开发

[iOS]如何在iOS开发中切换显示语言实现国际化

2014-07-16 10:59 701 查看
1.在Project设置,添加中英两种语言:



2.新建Localizable.strings文件,作为多语言对应的词典,存储多种语言,点击右侧Localization,勾选中英:



3.添加一个字段,

在English中,添加:"SUBMIT_BTN_TITLE" = "Go";
在Chinese中,添加:"SUBMIT_BTN_TITLE" = "开始";

4.一个工具类GDLocalizableController,用来切换本地语言:
//
//  GDLocalizableController.h
//  guide-book
//
//  Created by why on 7/16/14.
//  Copyright (c) 2014 why. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface GDLocalizableController : NSObject

+(NSBundle *)bundle;//获取当前资源文件

+(void)initUserLanguage;//初始化语言文件

+(NSString *)userLanguage;//获取应用当前语言

+(void)setUserlanguage:(NSString *)language;//设置当前语言

@end

//
//  GDLocalizableController.m
//  guide-book
//
//  Created by why on 7/16/14.
//  Copyright (c) 2014 why. All rights reserved.
//

#import "GDLocalizableController.h"

@implementation GDLocalizableController

static NSBundle *bundle = nil;

+ ( NSBundle * )bundle{
return bundle;
}
+(void)initUserLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSString *string = [def valueForKey:@"userLanguage"];
if(string.length == 0){
//获取系统当前语言版本
NSArray* languages = [def objectForKey:@"AppleLanguages"];
NSString *current = [languages objectAtIndex:0];
string = current;
[def setValue:current forKey:@"userLanguage"];
[def synchronize];//持久化,不加的话不会保存
}

//获取文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@"lproj"];
bundle = [NSBundle bundleWithPath:path];//生成bundle
}

+(NSString *)userLanguage{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSString *language = [def valueForKey:@"userLanguage"];
return language;
}

+(void)setUserlanguage:(NSString *)language{

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

//1.第一步改变bundle的值
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj" ];
bundle = [NSBundle bundleWithPath:path];

//2.持久化
[def setValue:language forKey:@"userLanguage"];
[def synchronize];
}

@end


5. 自定义一个宏方便处理:
// ----- 多语言设置
#define CHINESE @"zh-Hans"
#define ENGLISH @"en"
#define GDLocalizedString(key) [[GDLocalizableController bundle] localizedStringForKey:(key) value:@"" table:nil]

6.使用: [GDLocalizableController setUserlanguage:CHINESE];
NSLog(GDLocalizedString(@"SUBMIT_BTN_TITLE"));
[GDLocalizableController setUserlanguage:ENGLISH];
NSLog(GDLocalizedString(@"SUBMIT_BTN_TITLE"));

参考资料:iOS 应用程序内部国际化,不跟随系统语言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  国际化 iOS 多语言
相关文章推荐