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

 我来答
huanglenzhi
2015-02-06 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517184
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

  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


  @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));

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式