首页 > 代码库 > iOS应用内切换多国语言

iOS应用内切换多国语言

 

 

 

1.新建工程之类的就不用说了,配置项目本地化支持简体中文和英文

      工程-PROJECT-info->Localizations,点“+”,选择(Chinese(Simplified))添加简体中文,英文Xcode自带有(English),所以不需要再次添加。(点击添加弹出语言菜单,即可选择你所需要的语言)

技术分享

 

2.现在可以开始添加多语言文件了。

   注意:需要手动切换语言,而不是根据系统语言变换,所以命名不能与系统语言文件同名,即Localizable.strings;

自己随意命名,后缀是.strings,一定要记得Targets要勾选项目。

技术分享

 

3.配置English.strings本地化,现在支持中文和英文。

  (1)选中English.strings文件,查看右边栏中的信息;(2)点击Localization中的按钮,弹出框中显示出前面添加的语言;(3)选择中文和英文,base选项可有可无,

技术分享

技术分享

技术分享

 

勾选之后,English.strings中多出了两个文件

技术分享

 

完成之后便是完成了项目内多语言环境的配置,下面看一下这两个文件中应该怎样写

4.文件中添加两个需要的字符串

中文:

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #d12f1b } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px } span.s1 { } span.s2 { color: #000000 } span.s3 { font: 14.0px "PingFang SC" }</style>

"change_language" = "大家好,我叫陈明";

 

"button" = "切换语言";

英文:

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #d12f1b } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px } span.s1 { } span.s2 { color: #000000 }</style>

"change_language" = "Hello,My name is Magellan";

 

"button" = "Change Language";

 

5.配置和语言配置表写好后,接下来开始具体运用到业务中。

(1)新创建工具类,继承自NSObject(在这里我命名为SwichLanguage)

(2)SwichLanguage.h

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px } span.s1 { } span.s2 { color: #703daa } span.s3 { color: #008400 } span.s4 { font: 14.0px "PingFang SC"; color: #008400 } span.s5 { color: #ba2da2 }</style>

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

 

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

 

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

 

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

 

SwichLanguage.m 文件中

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #d12f1b } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ba2da2 } p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px } p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #008400 } p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa } p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } span.s1 { color: #78492a } span.s2 { } span.s3 { color: #ba2da2 } span.s4 { color: #703daa } span.s5 { color: #d12f1b } span.s6 { color: #000000 } span.s7 { color: #4f8187 } span.s8 { font: 14.0px Menlo } span.s9 { color: #3e1e81 } span.s10 { color: #272ad8 } span.s11 { font: 14.0px "PingFang SC" } span.s12 { color: #008400 } span.s13 { font: 14.0px "PingFang SC"; color: #008400 }</style>

#import "SwichLanguage.h"

static NSString*LocalLanguageKey = @"SwitchLanguage";

@implementation SwichLanguage

 

 

static NSBundle *bundle = nil;

 

+ ( NSBundle * )bundle{

    

    

    return bundle;

    

}

 

//首次加载的时候先检测语言是否存在

 

+(void)initUserLanguage{

    

    

    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

    

    

    NSString *currLanguage = [def valueForKey:LocalLanguageKey];

    

    

    if(!currLanguage){

        

        NSArray *preferredLanguages = [NSLocale preferredLanguages];

        

        currLanguage = preferredLanguages[0];

        

        if ([currLanguage hasPrefix:@"en"]) {

            

            currLanguage = @"en";

            

        }else if ([currLanguage hasPrefix:@"zh"]) {

            

            currLanguage = @"zh-Hans";

            

        }else currLanguage = @"en";

        

        [def setValue:currLanguage forKey:LocalLanguageKey];

        

        [def synchronize];

        

    }

    

    

    //获取文件路径

    

    NSString *path = [[NSBundle mainBundle] pathForResource:currLanguage ofType:@"lproj"];

    

    bundle = [NSBundle bundleWithPath:path];//生成bundle

    

}

 

//获取当前语言

 

+(NSString *)userLanguage{

    

    

    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

    

    

    NSString *language = [def valueForKey:LocalLanguageKey];

    

    

    return language;

    

}

 

//设置语言

 

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

    

    

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    

    NSString *currLanguage = [userDefaults valueForKey:LocalLanguageKey];

    

    if ([currLanguage isEqualToString:language]) {

        

        return;

        

    }

    

    [userDefaults setValue:language forKey:LocalLanguageKey];

    

    [userDefaults synchronize];

    

    

    NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj" ];

    

    bundle = [NSBundle bundleWithPath:path];

    

}

 
6.现在方法已经写好,接下就可以在具体的业务代码中使用了
(1)拖拽storyboard,设置点击事件

(2)ViewController.m

 

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #d12f1b } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ba2da2 } p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px } p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 } p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #3e1e81 } p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #008400 } p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #31595d } p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400; min-height: 16.0px } span.s1 { color: #78492a } span.s2 { } span.s3 { color: #ba2da2 } span.s4 { color: #000000 } span.s5 { color: #703daa } span.s6 { color: #d12f1b } span.s7 { font: 14.0px Menlo; color: #000000 } span.s8 { font: 14.0px Menlo } span.s9 { color: #4f8187 } span.s10 { color: #31595d } span.s11 { color: #008400 } span.s12 { font: 14.0px "PingFang SC" } span.s13 { color: #3e1e81 }</style>

#import "ViewController.h"

#import "SwichLanguage.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIButton *changeButton;

@property (weak, nonatomic) IBOutlet UILabel *languageLabel;

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    

    [super viewDidLoad];

    

    // Do any additional setup after loading the view, typically from a nib.

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeLanguage) name:@"changeLanguage" object:nil];

    

    //初始化应用语言

    

    [SwichLanguage initUserLanguage];

    

    NSBundle *bundle = [SwichLanguage bundle];

    

    /*

     

     localizedStringForKey:@"change_language" value:nil table:@"English"

     

     

     localizedStringForKey:各个语言文件中共同的名称

     

     table: English.strings 多语言文件夹的名称

     

     */

    

    NSString *str = [bundle localizedStringForKey:@"change_language" value:nil table:@"English"];

    _languageLabel.text = str;

    

    

}

 

//切换语言的点击方法

 

- (IBAction)changeLanguage:(id)sender {

    

    //修改语言

    

    NSString *language = [SwichLanguage userLanguage];

    

    if ([language isEqualToString:@"en"]) {

        

        [SwichLanguage setUserlanguage:@"zh-Hans"];

        

    }else{

        

        [SwichLanguage setUserlanguage:@"en"];

        

    }

    

    

    [[NSNotificationCenter defaultCenter] postNotificationName:@"changeLanguage"object:self];

    

}

 

//点击改变语言,代理方法刷新界面

 

- (void)changeLanguage{

    

    [_changeButton setTitle:[[SwichLanguage bundle] localizedStringForKey:@"button"value:nil table:@"English"] forState:UIControlStateNormal];

    

    _languageLabel.text =[[SwichLanguage bundle] localizedStringForKey:@"change_language"value:nil table:@"English"];

    

}

 

//适当的位置移除通知

 

- (void)dealloc{

    

    [[NSNotificationCenter defaultCenter] removeObserver:self];

    

}

 

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

 

@end

 

7.一切完成之后,我们可以运行看下效果

 技术分享

 

技术分享

 

切换成功之后,推出程序重新运行就可以看到保留了上次选择的语言。。

 
法文,韩文等等其他语言皆是如此,只要写好语言文件即可!
<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 } span.s1 { }</style>

iOS应用内切换多国语言