ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

iOS 程序内语言切换 -- 中英文切换

2019-02-12 09:53:24  阅读:370  来源: 互联网

标签:currLanguage 中英文 language ChangeLanguage iOS bundle NSString 切换 语言


随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等;想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下的语言文件,从而显示到界面上面。这里先说中英文的切换,至于其他语言操作复制即可!!!

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.文件中添加两个需要的字符串

中文:

"change_language" = "悄悄是别离的笙箫,沉默是今晚的康桥";

"button" = "切换语言";

英文:
"change_language" = "Quietness is my farewell music, silence is Cambridge tonight";

"button" = "Change Language";

 

5.配置环境已经完成,现在看看代码怎么写????

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

(2)ChangeLanguage.h

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

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

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

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

 

ChangeLanguage.m
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,设置点击事件(storyboard方便,简单)

(2)ViewController.m

- (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];

    //初始化应用语言

    [ChangeLanguage initUserLanguage];

    NSBundle *bundle = [ChangeLanguage bundle];

    /*

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

     

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

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

     */

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

    NSString *buttonStr = [bundle localizedStringForKey:@"button" value:nil table:@"English"];

    [_changeButton setTitle:buttonStr forState:UIControlStateNormal];

    _languageLabel.text = str;

    

}

//切换语言的点击方法

- (IBAction)change:(id)sender {

    //修改语言

    NSString *language = [ChangeLanguage userLanguage];

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

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

    }else{

        [ChangeLanguage setUserlanguage:@"en"];

    }

    

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

}

 

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

- (void)changeLanguage{

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

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

}

//适当的位置移除通知

- (void)dealloc{

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

 

7.下面就来两张运行的界面界面吧

 

 


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

法文,韩文等等其他语言皆是如此,只要写好语言文件即可!

标签:currLanguage,中英文,language,ChangeLanguage,iOS,bundle,NSString,切换,语言
来源: https://www.cnblogs.com/lys-iOS-study/p/10363945.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有