自鉴iOS 开发每天分享优质文章开发技术文章

iOS实现语言本地化

2021-11-16  本文已影响0人  喔牛慢慢爬

APP语言本地化,即语言国际化。指的是根据用户操作系统的语言设置,自动将APP的语言设置为和操作系统一致的语言环境。开发过程中包括以下本地化设置:

  • App名称本地化
  • App中文字内容本地化
  • 图片本地化
  • Storyboard/Xib本地化

一、本地化基本设置:

  1. 通过Project→Info→Localizations,点击“+”添加需要本地化/国际化的语言。Xcode默认需要勾选Use Base Internationalization(使用基本国际化),如下图:
image

注:如果勾选Use Base Internationalization,则如果未特别设置本地化语言,就使用Base选项配置。

image image

二、App名称本地化:

应用名称本地化,是指同一个App的名称,在手机不同的语言环境下显示不同的名称。比如,微信在简体中文环境下App名称显示为“微信”,在英语环境下显示为“weChat”。

  1. 选中info.plist文件。按Command+N。创建文件窗口,找到Strings File创建选项,并创建名称为InfoPlist.strings文件。

    image
  2. 创建InfoPlist.strings文件后,在左侧工程文件列表中,如下图:


    image
  3. 然后选中InfoPlist.strings,在Xcode右侧文件检查器中点击Localize,选择需要本地化的语言。

    image
  4. 然后再右侧Localization中勾选所有本地化语言,并查看左侧文件列表,可发现InfoPlist.stirings左侧多了一个箭头,点击箭头可以展开,显示支持的本地化语言。


    image
  5. 接下来,我们分别用不同的语言给InfoPlist.strings下的文件设置对应的名字

// App在英语环境环境下显示的名称
CFBundleDisplayName = "TestDemo";
English
// App在中文环境环境下显示的名称
CFBundleDisplayName = "测试";
Chinese
  1. 最终效果:
English Chinese

注:以前本地化App名称,需要在Info.plist文件中增加一个名为“Application has localized display name”的BOOL类型的Key,并且需要将其值设置为YES,目的是让App支持本地化App名称。现在这个已经不需要配置了

三、App中文字内容本地化

指的是App内的字符串文字在不同的系统语言环境下显示不同的内容,例如“主页”在简体中文的语言环境下显示“主页”,在英语环境下显示“home”,下面简单介绍下如何设置本地化。

  1. 同样需要添加strings类型文件,和设值displayName本地化相同按键 Command + N,创建名称为Localizable.strings文件;

  2. 文件创建成功,查看Xcode左侧文件列表,就会发现多了一个名为Localizable.strings的文件;

    image
  3. 选中Localizable.strings文件,在Xcode右侧点击Localize,来选择设置我们需要本地化的语言

    image
  4. 然后我们发现Xcode的右侧配置列表如下图;

    image
  5. 然后Xcode左侧的Localizable.stirings左侧多了一个箭头,展开后,如下图所示;

    image
  6. Localizable.stirings中设置本地化详细显示内容;

    • Localizable.strings(English)中添加代码:

      "click" = "click";
      
    • Localizable.strings(Chinese,simplified)中添加代码:

      "click" = "点击";
      
  7. 在使用时,需要使用NSLocalizedString(key, comment)这个宏根据Key获取对应的字符串,然后赋值给代码中的字符串。

    // NSlocalizeString 第一个参数是内容,根据第一个参数去对应语言的文件中取对应的字符串,第二个参数将会转化为字符串文件里的注释,可以传nil,也可以传空字符串@""。
    #define NSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
    

    代码:

    NSString *_title = NSLocalizedString(@"click", nil);
    self.title = _title;
    NSLog(@"Title:%@",_title);
    

    输出:

    LocalizationsDemo[2565:164194] Title:点击
    

    其他相似宏定义:

    #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)]
    
    #define NSLocalizedAttributedString(key, comment) \
         [NSBundle.mainBundle localizedAttributedStringForKey:(key) value:@"" table:nil]
    #define NSLocalizedAttributedStringFromTable(key, tbl, comment) \
         [NSBundle.mainBundle localizedAttributedStringForKey:(key) value:@"" table:(tbl)]
    #define NSLocalizedAttributedStringFromTableInBundle(key, tbl, bundle, comment) \
         [bundle localizedAttributedStringForKey:(key) value:@"" table:(tbl)]
    #define NSLocalizedAttributedStringWithDefaultValue(key, tbl, bundle, val, comment) \
         [bundle localizedAttributedStringForKey:(key) value:(val) table:(tbl)]
    
  8. 不同语言环境下的运行结果:

    • 系统语言为英语:

      English
    • 系统语言为简体中文:

      Chinese

四、图片本地化

图片本地化现在有两种设置方式。

五、Storyboard/Xib本地化

  1. 选中需要的本地化的Storyboard文件,在Xcode右侧配置列表中的loaclize配置本地换语言;

    image

    注:创建新工程时默认选中Use Base Internationalization 默认被选中,所以Localization中默认选中Base。所以Main.storyboardLaunchScreen.storyboard默认在Base.lproj文件夹中。

  2. Localization中勾选EnglishChinese,Simplified,表示项目支持英文和简体中文本地化语言。此时文件列表的样式,如下图;

    image
  3. 此时本地化配置完成,可以进行差异化处理。

六、其他技巧

七、参考文献

3分钟实现iOS语言本地化/国际化
iOS 本地化(IB篇)
App Store介绍页中显示的语言列表如何设置

上一篇 下一篇

猜你喜欢

热点阅读