前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS小技能:本地化(Internationalization & Localization)

iOS小技能:本地化(Internationalization & Localization)

作者头像
公众号iOS逆向
发布2022-08-22 11:21:32
3.3K0
发布2022-08-22 11:21:32
举报
文章被收录于专栏:iOS逆向与安全

引言

  1. 本地化(l10n)是应用程序在对两个或两个以上不同语言的适配,使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言。本地化不仅涉及更改语言交互,还涉及其他相关更改,例如数字,日期,货币等的显示。
  2. 国际化(i18n)是设计和构建应用程序以促进本地化的过程。

Localization is the process of translating your app into multiple languages. But before you can localize your app, you internationalize it. Internationalization is the process of making your app able to adapt to different languages, regions, and cultures. Because a single language can be used in multiple parts of the world, your app should adapt to the regional and cultural conventions of where a person resides. An internationalized app appears as if it is a native app in all the languages and regions it supports. https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/Introduction/Introduction.html#//apple_ref/doc/uid/10000171i

I 本地化

开发规范:始终把面向用户的字符串用 NSLocalizedString 包起来。

1.1 添加本地化功能

如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lproj作为拓展名。

在这里插入图片描述

当本地化的应用程序需要载入某一资源时,如图像、属性列表、nib文件,应用程序会检查用户的语言和地区,并查找相匹配的本地化文件夹。如果找到了相应的文件夹,就会载入这个文件夹中的资源。

NSLocale实例包含了针对这个地区内特定一群人的所有语言文化基准,其中包括:

  • 语言
  • 键盘
  • 数字、日期和时间格式
  • 货币
  • 排序和分类
  • 符号、颜色与头像的使用

每一个NSLocale实例对应着一个_地区标识符_,例如en_US,fr_FR,ja_JP和en_GB。

标识符包含一个语言码(例如en代表英语)和一个地区码,例如US代表美国。

1.2 字符串本地化

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

原理:在%和@中间加上数值

(1

,2$),数字代表参数的顺序 文章:https://blog.csdn.net/z929118967/article/details/108793150

  1. 【iOS APP 内的国际化切换】1、字符串的本地化、2、自定义解析本地化字符串的工具类LanguageManager、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、通过发通知,到各个控制器更新文字(不采用)

  • 效果

1.3 数字和时间格式本地化

使用NSDateFormatter和NSNumberFormatter时需要设置 NSLocale,这样做能确保日期、数字和货币能根据用户设置的地点信息显示正确的格式。

iOS小技能:时间格式化 https://blog.csdn.net/z929118967/article/details/124838767

代码语言:javascript
复制
- (NSDate*) dateFromString:(NSString*)stringTime dateformatter:(NSString*)dateformatter localeIdentifier:(NSString*)localeIdentifier {

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
#warning  真机调试,转换时间 需要设置 NSLocale
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];//zh_CN  en_US en_GB
    [formatter setLocale:usLocale];
    formatter.dateFormat = dateformatter;
    return  [formatter dateFromString:stringTime];
}
- (NSString*) stringFromDate:(NSDate*)date dateformatter:(NSString*)dateformatter localeIdentifier:(NSString*)localeIdentifier {

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
#warning  真机调试,转换时间 需要设置 NSLocale
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];//zh_CN  en_US en_GB
    [formatter setLocale:usLocale];
    formatter.dateFormat = dateformatter;
    return  [formatter stringFromDate:date];
}

1.4 日期键盘本地化

代码语言:javascript
复制
            //1. 设置日期键盘类型
            UIDatePicker *datePicker = [[UIDatePicker alloc]init];
            [datePicker setDatePickerMode:UIDatePickerModeTime];
            NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"zh"];
            [datePicker setLocale:locale];//本地化
            //2. 设置日期格式
            NSDateFormatter *dateF = [[NSDateFormatter alloc]init];
                [dateF setLocale:locale];
            [dateF setDateFormat:@"HH:mm"];
            NSDate *date = [dateF  dateFromString:@"01:00"];//设置默认日期
            [datePicker setDate:date animated:YES];

1.5 nib本地化、图片本地化

nib本地化前的准备:先创建本地化文件夹(zh-Hans.lproj),让应用程序支持对应的语言环境,并选择选择当前需要本地化的

在这里插入图片描述

图片本地化的应用场景:不同的语言登录显示对应的图片

在这里插入图片描述

https://blog.csdn.net/z929118967/article/details/90727365

1.6 info.plist 的国际化

国际化app相关的权限弹框

在这里插入图片描述

https://blog.csdn.net/z929118967/article/details/92388239

II 本地化切换

2.1 一个语言对应多个字符串资源文件的方案

应用场景:解决部分英文国际化没有生效的问题

思路:存储国际化英文字符串的.string文件长度受限,需修改逻辑拆分子文件存储。

文章:https://blog.csdn.net/z929118967/article/details/104300695

2.2 选择相应的本地化资源

NSLocale +preferredLanguages会根据用户的偏好返回一个IETF BCP 47 语言标识符的字符串数组。可以用这些值来定义HTTP头里面的Accept-Language字段,服务器就能选择相应的本地化资。

代码语言:javascript
复制
[request setValue:[NSString stringWithFormat:@"%@", [[NSLocale preferredLanguages] componentsJoinedByString:@", "]], forHTTPHeaderField:@"Accept-Language"];

2.3 APP 内的国际化切换

  1. 字符串的本地化
  2. 自定义解析本地化字符串的工具类LanguageManager、
  3. 例子:登录界面切换中英文。
  4. 文章:https://kunnan.blog.csdn.net/article/details/103733872

2.4 中英文切换

  • iOS用户协议及隐私政策弹框:包含超链接属性、demo支持中英文切换

https://kunnan.blog.csdn.net/article/details/103902362

在这里插入图片描述

III 本地化工具的使用(genstrings)

genstrings 从 C 或 Objective-C(.c 或 .m)的源代码文件生成一个 .strings 文件。一个 .strings 文件用于为应用程序的不同语言作本地化。genstrings ViewController.m

genstrings苹果推出的一个用于自动从代码的NSLocalizedString提取生成国际化字符串的工具,genstrings 会浏览每个所选的源文件,以及每个使用 NSLocalizedString 的源文件,把键和注释追加到目标文件。

  1. 在运行时,NSLocalizedString 会确定首选的语言,并在应用程序包中找到相应的 Localizable.strings 文件,例如法语文件fr.lproj/Localizable.strings。
  2. 如果使用NSLocalizedStringFromTable(key, tbl, comment)来获取字符串,资源文件会以tbl参数作为文件名。

https://blog.csdn.net/z929118967/article/details/90727365

see also

iOS处理语言工具CFStringTransform :智能地处理用户的输入内容,经典应用场景【索引】https://blog.csdn.net/z929118967/article/details/75003548

更多内容请关注 #小程序:iOS逆向,只为你呈现有价值的信息,专注于移动端技术研究领域;更多服务和咨询请关注#公众号:iOS逆向

代码语言:javascript
复制
#define NSLocalizedString(key, comment) \
     [NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • I 本地化
    • 1.1 添加本地化功能
      • 1.2 字符串本地化
        • 1.3 数字和时间格式本地化
          • 1.4 日期键盘本地化
            • 1.5 nib本地化、图片本地化
              • 1.6 info.plist 的国际化
              • II 本地化切换
                • 2.1 一个语言对应多个字符串资源文件的方案
                  • 2.2 选择相应的本地化资源
                    • 2.3 APP 内的国际化切换
                      • 2.4 中英文切换
                      • III 本地化工具的使用(genstrings)
                      • see also
                      相关产品与服务
                      文件存储
                      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档