iOS多语言,支持app内部设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 -- 老陶 刚工作的时候做了多语言,发现网上方法很多都是关于跟随系统语言设置的,而系统内部设置的确比较少。

所以今天闲来没事,写一写总结,供大家参考。

当然做的时候,也会百度搜索,所以项目中可能会看到网上一些比较熟悉的东西。

大家做这一步,相信项目工程是有的了吧(因为本人做独立开发,所以一般新功能几乎都是在项目中做的,很少有写demo,就不考虑demo的情况了)

在项目文件的Supporting Files中的InfoPlist.strings中,右键(或command + N)–>新建一个string文件。

(如果没有这个文件,在xcode6中创建,好像没有看到,可以自己创建一个文件,名字可以随便取,后面会给一个方法,获取这个文件的。) 如图1-1所以图1-1

创建完文件之后,点击项目—>选择Project—>选择Info—>点击“+”号。(画线隐藏) 图1-2

在右下方有个Language的选项,默认进来是只有English的,点击+号之后可以看到各种语言选项

图1-3

在这里选择Chinese(Simplified)。下面会出现一个选项,选择InfoPlist.string文件,那个是语言设置的。(如果是自定义的文件,就选择自定义的那个)

//———————————————————–

到这里,基本配置就完成了。然后后面就是设置需要的字符,以及调用方法了

图1-4 图1-5

在相应的string文件中,写入需要的字符。前面相当于key。后面是value。

CFBundleDisplayName是app的名字,技术不够,暂时不知道如何手动切换语言,改变桌面的名字,这一步,只是根据系统语言来的。

如果默认根据系统语言更改语言,那么调用的时候只需要NSLocalizedString(<#key#>, <#comment#>)用这一句就可以了。其他的不需要做处理。

如果是想自定义的话,那么需要写一个类:

//.h头文件: #import <Foundation/Foundation.h>

@interface InternationalController : NSObject

  • (NSBundle *)bundle; //获取当前资源文件
  • (void)initUserLanguage; //初始化语言文件
  • (NSString *)userLanguage; //获取应用当前语言
  • (void)setUserLanguage:(NSString *)language; //设置当前语言

@end

//.m类体文件

// // InternationalController.m // mworkingHaier // // Created by LaoTao on 14-10-20. // Copyright (c) 2014年 CaiGaoBaDou. All rights reserved. //

#import “InternationalController.h” #import <UIKit/UIKit.h>

@implementation InternationalController

//创建静态变量bundle,以及获取方法bundle(此处不要使用getBundle). static NSBundle *bundle = nil;

  • (NSBundle *)bundle { return bundle; }

//初始化方法:

  • (void)initUserLanguage { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; NSString *string = [def valueForKey:kLanguage];

    if (string.length == 0) { //获取系统当前语言版本(中文zh-Hans,英文en) NSArray *languages = [def objectForKey:@“AppleLanguages”]; NSString *current =[languages objectAtIndex:0]; string = current; [def setValue:current forKey:kLanguage]; [def synchronize]; //持久化,不加的话不会保存 }

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

//获得当前语言的方法

  • (NSString *)userLanguage { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; NSString *language = [def valueForKey:kLanguage]; 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:kLanguage]; [def synchronize]; }

@end

把"InternationalController.h"这个在.pch文件中引用,这样全局就都可以调用了

在AppDelegate.m的didFinishLaunchingWithOptions方法中,加一句:

[InternationalController initUserLanguage]; //初始化应用语言

然后设置个全局的宏变量,系统的是NSLocalizedString.这里就设置了LTlocalizedString(LT是老陶的首字母,beyond521t这个t同理,嘿嘿)

图1-6

self.title = LTLocalizedString(@“TitleName”, nil);

如此就可以使用了。切换语言,请看头文件,直接方法名 + 方法,以及语言就OK了。

注:英文在iOS中为"en",简体中文"zh-Hans".

切换语言后:处理方法是,再次跳转到根视图即可。(更多处理方式,请看本人另一篇日志,根视图处理)

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy