iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)

前言

使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言。

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

image.png

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

I、nib& info.plist 本地化

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

image.png

image.png

打开ViewController.xib(Chinese)文件,修改里面的文字信息

info.plist 的国际化:https://blog.csdn.net/z929118967/article/details/92388239

II、图片本地化

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

image.png

  • 预先准备好的图片替换对应语言的图片即可

例如替换中文 zh-Hans.lproj文件夹中的home.png

  • 在代码中照常使用图片即可[UIImage imageNamed:@"icon_hyxq_youhuiq"];

III、字符串本地化

应用场景:iOS APP 内的国际化切换 (对话框中的文字)、   应用名称本地化

3.1 APP 内的本地化切换

【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、通过发通知,到各个控制器更新文字(不采用)

  • 效果

image.png

image.png

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

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

存储国际化英文字符串的.string文件长度受限,需修改逻辑拆分子文件存储。https://blog.csdn.net/z929118967/article/details/104300695

image.png

如果你的字符串资源文件名不是Localizable.strings,如KN.strings,那么你就得使用NSLocalizedStringFromTable()、NSLocalizedStringFromTableInBundle来读取本地化字符串:

//NSLocalizedStringFromTable(key, tbl, comment)
NSLocalizedStringFromTable(@"Tip", @"KN", nil);
  • 完整的读取代码如下:
//程序的本地化,引用国际化的文件
#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]
- (NSString *)stringWithKey:(NSString *)key table:(NSString *)table
{
    //假如为跟随系统
    if (self.languageType==HZLanguageTypeSystem) {
        return  NSLocalizedString(key, nil);
    }
    //返回对应国际化文字
    if (_bundle) {// 修改成为,从另外一个文件找,先从文件找,如果找不到就从文件二找。
        //NSLocalizedStringFromTableInBundleWithKey
        return [self NSLocalizedStringFromTableInBundleWithKey:key table:table];
    }
    return NSLocalizedStringFromTable(key, table, nil);
}
//{// 修改成为,从另外一个文件找,先从文件找,如果找不到就从文件二找。
- (NSString*)NSLocalizedStringFromTableInBundleWithKey:(NSString *)key table:(NSString *)table{
    NSString* tmp = key;
    if(_bundle){
        tmp =NSLocalizedStringFromTableInBundle(key, table, _bundle, nil);
        if([tmp isEqualToString:key]){
            // 继续从备份表查找
            NSLog(@"开始从Localizable1 找key:%@", tmp);
            tmp =NSLocalizedStringFromTableInBundle(key, @"Localizable1", _bundle, nil);
//            NSLog([NSString stringWithFormat:@"结束从Localizable1 找key:%@",tmp]);
            NSLog(@"结束从Localizable1 找key:%@", tmp);
        }
    }
    return tmp;
}

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

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

文章:https://kunnan.blog.csdn.net/article/details/103733872

原理:

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

2、应用内切换语言生效的技术实现:采用销毁根控制器,重新进入一次

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

———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/z929118967/article/details/108793150

IV 、genstrings本地化工具的使用

➜  MainViewControllerDemo git:(master) ✗ genstrings
Usage: genstrings [OPTION] file1.{m,c,cpp,swift} ... filen.{m,c,cpp,swift}
Options
 -h                       shows this message and exits.
 -encoding encoding       assume input files use specified encoding.
 -SwiftUI                 enables SwiftUI Text() support.
 -a                       append output to the old strings files.
 -s substring             substitute 'substring' for NSLocalizedString.
 -skipTable tablename     skip over the file for 'tablename'.
 -noPositionalParameters  turns off positional parameter support.
 -u                       allow unicode characters.
 -macRoman                read files as MacRoman not UTF-8.
 -d                       attempt to detect encoding if read fails.
 -q                       turns off multiple key/value pairs warning.
 -bigEndian               output generated with big endian byte order.
 -littleEndian            output generated with little endian byte order.
 -o dir                   place output files in 'dir'.
Please see the genstrings(1) man page for full documentation
  • 生成字符串资源文件的另一种方式(通过终端命令genstrings)

苹果推出的一个用于自动从代码的NSLocalizedString提取生成国际化字符串的工具;

如果使用NSLocalizedStringFromTable(key, tbl, comment)来获取字符串,资源文件会以tbl参数作为文件名

使用步骤:

  • 首先添加获取字符串的代码,比如在ViewController.m
NSString *tip = NSLocalizedString(@"Tip", @"dialog title");
    NSString *ok = NSLocalizedString(@"Ok", @"dialog button");
    NSString *tip1 = NSLocalizedStringFromTable(@"Tip", @"ios进阶", @"dialog title");
    NSString *ok1 = NSLocalizedStringFromTable(@"Ok", @"ios进阶", @"dialog button");
  • 打开终端,定位到ViewController.m所在的文件夹,输入genstrings ViewController.m命令,生成字符串资源文件
-rw-r--r--@ 1 mac  staff   714  9 17 11:52 ViewController.m
➜  MainViewControllerDemo git:(master) ✗ genstrings ViewController.m
➜  MainViewControllerDemo git:(master) ✗ ls -lrt
-rw-r--r--  1 mac  staff   140  9 17 11:54 ios进阶.strings
-rw-r--r--  1 mac  staff   140  9 17 11:54 Localizable.strings

image.png

  • 将资源文件导入项目即可,然后打开资源文件,可以发现已经生成了key和comment
➜  MainViewControllerDemo git:(master) ✗ cat Localizable.strings
??/* dialog button */
"Ok" = "Ok";
/* dialog title */
"Tip" = "Tip";
➜  MainViewControllerDemo git:(master) ✗ cat ios进阶.strings
??/* dialog button */
"Ok" = "Ok";
/* dialog title */
"Tip" = "Tip";

image.png

see also


目录
相关文章
|
3月前
|
XML 自然语言处理 Android开发
🌐Android国际化与本地化全攻略!让你的App走遍全球无障碍!🌍
【7月更文挑战第28天】在全球化背景下,实现Android应用的国际化与本地化至关重要 for 用户基础扩展。本文通过旅游指南App案例,介绍全攻略。步骤包括资源文件拆分与命名、适配布局与方向、处理日期时间及货币格式、考虑文化习俗及进行详尽测试。采用Android Studio支持,创建如`res/values-en/strings.xml`等多语言资源文件夹,使用灵活布局解决文本长度差异问题,并通过用户反馈迭代优化。最终,打造一款能无缝融入全球各地文化的App。
156 3
|
5月前
|
存储 缓存 安全
基于iOS平台的高效图片缓存策略实现
【4月更文挑战第22天】 在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。尤其对于iOS平台,由于设备存储空间的限制以及用户对流畅性的高要求,设计一种合理的图片缓存策略显得尤为关键。本文将探讨在iOS环境下,如何通过使用先进的图片缓存技术,包括内存缓存、磁盘缓存以及网络请求的优化,来提高应用的性能和响应速度。我们将重点分析多级缓存机制的设计与实现,并对可能出现的问题及其解决方案进行讨论。
|
5月前
|
存储 缓存 算法
实现iOS平台的高效图片缓存策略
【4月更文挑战第22天】在移动应用开发中,图片资源的处理是影响用户体验的重要因素之一。特别是对于图像资源密集型的iOS应用,如何有效地缓存图片以减少内存占用和提升加载速度,是开发者们面临的关键挑战。本文将探讨一种针对iOS平台的图片缓存策略,该策略通过结合内存缓存与磁盘缓存的机制,并采用先进的图片解码和异步加载技术,旨在实现快速加载的同时,保持应用的内存效率。
|
2月前
|
Java Go Windows
【应用服务 App Service】App Service中上传文件/图片(> 2M)后就出现500错误(Maximum request length exceeded).
【应用服务 App Service】App Service中上传文件/图片(> 2M)后就出现500错误(Maximum request length exceeded).
|
2月前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
99 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
5月前
|
存储 缓存 编解码
实现iOS平台的高效图片缓存策略
【4月更文挑战第23天】在移动应用开发领域,尤其是图像处理密集型的iOS应用中,高效的图片缓存策略对于提升用户体验和节省系统资源至关重要。本文将探讨一种针对iOS平台设计的图片缓存方案,该方案通过结合内存缓存与磁盘缓存的多层次结构,旨在优化图片加载性能并降低内存占用。我们将深入分析其设计理念、核心组件以及在实际场景中的应用效果,同时对比其他常见缓存技术的优势与局限。
图库,设计类软件,App视频截图软件,外加设计图库,在你截取视频就能够实现图片收录,通过设计类网站后台控制系统,可以提前设置好,统计的分类内容,定义好分类,自动收录图片,再将截图汇总整理展示
图库,设计类软件,App视频截图软件,外加设计图库,在你截取视频就能够实现图片收录,通过设计类网站后台控制系统,可以提前设置好,统计的分类内容,定义好分类,自动收录图片,再将截图汇总整理展示
图库,设计类软件,App视频截图软件,外加设计图库,在你截取视频就能够实现图片收录,通过设计类网站后台控制系统,可以提前设置好,统计的分类内容,定义好分类,自动收录图片,再将截图汇总整理展示
|
5月前
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
483 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
5月前
|
大数据 测试技术 数据库
ios app性能分析
ios app性能分析
41 2
|
5月前
|
定位技术 API 开发工具
iOS语言本地化/国际化宝典
iOS语言本地化/国际化宝典
200 0
iOS语言本地化/国际化宝典