前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS APP 内的本地化切换【修订】

iOS APP 内的本地化切换【修订】

作者头像
公众号iOS逆向
发布2021-07-05 20:54:40
6100
发布2021-07-05 20:54:40
举报
文章被收录于专栏:iOS逆向与安全
  • 1.1 用法
  • 1.2 本地化字符串指定参数顺序
  • 2.1 代码实现
  • 2.2 strings文件的文本内容过长导致key 失效的解决方案
  • 4.1 《用户协议及隐私政策》弹框(包含超链接属性)【本文包含完整demo源码,demo支持中英文切换】
  • 4.2 登录界面切换中英文
  • 4.3 本地化字符串指定参数顺序

前言

从CSDN下载【iOS APP 内的国际化切换】demo源码:https://download.csdn.net/download/u011018979/19089505

文章:https://kunnan.blog.csdn.net/article/details/103733872 原理: 1、自定义解析本地化字符串的工具类LanguageManager 2、应用内切换语言生效的技术实现:采用销毁根控制器,重新进入一次 3、本地化字符串指定参数顺序

  • 效果

划重点

1、字符串的本地化 2、自定义解析本地化字符串的工具类LanguageManager 3、例子:登录界面切换中英文(内含demo)

应用内切换语言生效的技术实现:

1、销毁根控制器,重新进入一次(推荐) 2、通过发通知,到各个控制器更新文字(不推荐)

I 、 字符串的本地化

1.1 用法

  • 创建字符串资源文件Localizable.strings

在这里插入图片描述

  • 为Localizable.strings添加多语言支持

选 make Localize代表会将Localizable.strings加入到英语的本地化文件夹en.lproj中去

在这里插入图片描述

Localizable.strings(English)对应en.lproj文件夹中的Localizable.strings文件 Localizable.strings(Chinese)对应zh-Hans.lproj文件夹中的Localizable.strings文件

  • 在资源文件Localizable.strings配置字符串对应的key和value。

en.lproj/Localizable.strings

代码语言:javascript
复制
static NSString * const kSystem      = @"SystemDefault";

static NSString * const kCH          = @"zh-Hans";
static NSString * const kEN          = @"en";


static NSString * const kProj        = @"lproj";
static NSString * const kLanguageSet = @"kLanguageSet";
"Connected" = "Connected";
"Tip"="Tip";

zh-Hans.lproj/Localizable.strings

代码语言:javascript
复制
"Connected" = "已连接";
"Tip"="提示";

在这里插入图片描述

  • 在代码中使用NSLocalizedString(key, comment)来读取本地化字符串,key是Localizable.strings文件中等号左边的字符串,comment纯粹是注释
代码语言:javascript
复制
 #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)]

这里使用封装的宏进行读取本地化字符串

代码语言:javascript
复制
//程序的本地化,引用国际化的文件
#define QCTLocal(x, ...) HZLocalizedString(x, nil)

#define HZLocalizedString(key, comment)               HZLocalizedStringFromTable(key, @"Localizable", nil)
#define HZLocalizedStringFromTable(key, tbl, comment) [[HZLanguageManager defaultManager] stringWithKey:key table:tbl]




/**
 国际化

 @param key <#key description#>
 @param table Localizable
 @return <#return value description#>
 */
- (NSString *)stringWithKey:(NSString *)key table:(NSString *)table
{
    //假如为跟随系统
    if (self.languageType==HZLanguageTypeSystem) {
        return  NSLocalizedString(key, nil);
    }
    
    //返回对应国际化文字
    if (_bundle) {
        return  NSLocalizedStringFromTableInBundle(key, table, _bundle, nil);
    }
    
    return NSLocalizedStringFromTable(key, table, nil);
}





// 使用QCTLocal读取本地化字符串

        [LBAlertController showAlertTitle:QCTLocal(@"tips") content:QCTLocal(@"str_cann_printer") cancelString:QCTLocal(@"cancel") cancleBlock:nil sureString:QCTLocal(@"sure") sureBlock:^{

如果没有对字符串进行本地化 或者 找不到key对应的值,NSLocalizedString将直接返回key这个字符串

1.2 本地化字符串指定参数顺序

对于在中英文语法的区别,在本地化字符串的时候,我们常常需要调整stringWithFormat的参数顺序

  • iOS本地化字符串指定参数顺序:应用场景:app内的多语言切换

文章:https://kunnan.blog.csdn.net/article/details/108793150 原理:在%和@中间加上数值(1,2$),数字代表参数的顺序

代码语言:javascript
复制
"FORMAT" = "I am %2$@ from '%1$@'";

II、 自定义解析本地化字符串的工具类LanguageManager

2.1 代码实现

  • LanguageManager

从CSDN下载【iOS APP 内的国际化切换】demo源码:https://download.csdn.net/download/u011018979/19089505

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • I 、 字符串的本地化
    • 1.1 用法
      • 1.2 本地化字符串指定参数顺序
        • II、 自定义解析本地化字符串的工具类LanguageManager
          • 2.1 代码实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档