美文网首页
iOS-详细介绍多语言

iOS-详细介绍多语言

作者: 空白Null | 来源:发表于2017-06-02 14:07 被阅读83次

介绍说明

App对于多语言这块无非2种需求,一是软件根据手机当前操作系统的语言来显示对应的语言;另外一种是,不论当前手机设置的是什么语言,用户可以通过设置(点击按钮)改变当前软件的语言。

下面先介绍第一种,根据手机当前操作系统的语言来显示对应的语言

1、在Xcode工程里面创建文件

屏幕快照 2017-06-02 上午10.30.48.png

2、添加多语言,在这里添加了简体中文和英语两个版本

屏幕快照 2017-06-02 上午10.33.37.png 屏幕快照 2017-06-02 上午10.36.23.png

3、多语言的使用

分别在不同的语言文件中添加测试代码

  1. "text" = "English text"; 
  2. "text" = "简体中文";

说到使用,就要了解下NSLocalizedString是什么

 #define NSLocalizedString(key, comment) \
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
 #define NSLocalizedStringFromTable(key, tbl, comment) \
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:(tbl)]
 #define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
    [bundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
    [bundle localizedStringForKey:(key) value:(val) table:(tbl)]

其实就是宏,而宏定义的又是在资源文件中寻找对应的资源文件;

 1. NSLocalizedString(key,comment)
 2. NSLocalizedStringFromTable(key, tbl, comment)

第一种适合于,让应用跟随系统的语言版本进行切换,而用户却不能手动进行切换;
注意:如果用第一个方法实现多语言,多语言的文件名必须是 Localizable
参数说明:第一个参数是多语言文件中的key,第二个参数是对key的注释说明,一般为nil就可以了

如果要实现的是既可以跟随系统,又可以用户自己切换,就不能使用第一种了,那就要使用第二种 NSLocalizedStringFromTable(key, tbl, comment) tbl这个参数,就是我们自己命名的多语言文件名称;
注:直接使用第二种的话,会跟随系统语言
参数说明:第一个参数是多语言文件中的key,第二个参数是多语言文件的名字,第三个参数是对key的注释说明,一般为nil就可以了

代码中直接定义的Label控件就可以直接使用,实现语言根据系统的切换

 _label.text = NSLocalizedString(@"text", nil);

下面先介绍第二种,用户可以设置语言

创建和上面的步骤一样,不再一一列举;主要看代码实现逻辑;

 AppDelegate.h
 @interface AppDelegate : UIResponder <UIApplicationDelegate>
 @property (strong, nonatomic) UIWindow *window;
 //用来记录选中的哪种语言
 @property(strong, nonatomic)NSString *languageName; 
//通过传进来的参数key,获取相应语言的文本
 -(NSString*)getLanguageName:(NSString*)languageKey;
@end

AppDelegate.m
//实现方法
-(NSString*)getLanguageName:(NSString *)languageKey
{
//获取指定的语言文件的路径
NSString *path = [[NSBundle       mainBundle]pathForResource:_languageName ofType:@"lproj"];
//在指定的路径下获取语言文件,并取出key所对应的语言文本
NSString *textLanguage = [[NSBundle bundleWithPath:path]localizedStringForKey:languageKey value:nil table:@"Localizable"];
return textLanguage;
}

下面是实现类里面的代码:

   //添加两个button的监听事件,手动切换哪种语言
   -(void)clickEnglish
  {
   //赋值指定相应的语言文件
   _appDelegate.languageName = @"en";
  //通过相应的key,在指定的语言文件取出相应的语言文本
   _label.text = [_appDelegate getLanguageName:@"text"];
  }

-(void)clickChinese
{
  _appDelegate.languageName = @"zh-Hans";
  _label.text = [_appDelegate getLanguageName:@"text"];
}

这里的@"en" @"zh-Hans"你可能会问,从哪来的?实际上当你前面按照上面的配置好了以后,你的工程文件夹下面会有几个文件夹。这样就知道该写什么了吧?

屏幕快照 2017-06-02 下午2.02.57.png

相关文章

网友评论

      本文标题:iOS-详细介绍多语言

      本文链接:https://www.haomeiwen.com/subject/ngxufxtx.html