前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地化

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

作者头像
公众号iOS逆向
发布于 2021-07-05 12:45:35
发布于 2021-07-05 12:45:35
1.7K00
代码可运行
举报
文章被收录于专栏:iOS逆向与安全iOS逆向与安全
运行总次数:0
代码可运行

前言

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

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

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

I、nib& info.plist 本地化

  • 本地化前的准备

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

在这里插入图片描述

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

info.plist 的国际化

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

II、图片本地化

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

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

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

  • 在代码中照常使用图片即可
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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、通过发通知,到各个控制器更新文字(不采用)

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//NSLocalizedStringFromTable(key, tbl, comment)
NSLocalizedStringFromTable(@"Tip", @"KN", nil);

  • 完整的读取代码如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

//程序的本地化,引用国际化的文件
#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本地化工具的使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
➜  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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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命令,生成字符串资源文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-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


在这里插入图片描述

  • 将资源文件导入项目即可,然后打开资源文件,可以发现已经生成了key和comment
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
➜  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";

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS APP 内的本地化切换【修订】
从CSDN下载【iOS APP 内的国际化切换】demo源码:https://download.csdn.net/download/u011018979/19089505
公众号iOS逆向
2021/07/05
6520
iOS APP 内的本地化切换【修订】
iOS小技能:APP内的本地化语言切换(案例:登录界面切换中英文)
选 make Localize代表会将Localizable.strings加入到英语的本地化文件夹en.lproj中去
公众号iOS逆向
2022/08/22
3.3K0
iOS小技能:APP内的本地化语言切换(案例:登录界面切换中英文)
iOS小技能:本地化(Internationalization & Localization)
如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lproj作为拓展名。
公众号iOS逆向
2022/08/22
3.4K0
iOS小技能:本地化(Internationalization & Localization)
3分钟实现iOS语言本地化/国际化(图文详解)
语言本地化,又叫做语言国际化。是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言。往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这就要求应用程序所展示的文字、图片等信息,能够让讲不同语言的用户读懂、看懂。进而提出为同一个应用程序适配多种语言,也即是国际化。语言国际化之所以又叫做语言本地化,这是站在每个用户的角度而言的,是指能够让用户本地、本土人群能够看懂的语言信息,顾名思义,语言本地化。其实语言本地化 == 语言国际化! 本文将分如下7个主要章节一步一步讲解如何完全本地化一个App。
VV木公子
2018/06/05
17.9K0
iOS本地化字符串指定参数顺序(应用场景:app内的多语言切换)
对于在中英文语法的区别,在本地化字符串的时候,我们常常需要调整stringWithFormat的参数顺序
公众号iOS逆向
2021/01/18
1.5K0
iOS本地化字符串指定参数顺序(应用场景:app内的多语言切换)
iOS本地化技巧:一个语言对应多个字符串资源文件的方案(解决部分英文国际化没有生效的问题)
突然发现中文可以解析,英文无法解析。后来发现是存储英文的文件modified: retail/retail/class/consts/Localizable/en.lproj/Localizable1.strings 内容太长。
公众号iOS逆向
2021/07/05
8990
iOS本地化技巧:一个语言对应多个字符串资源文件的方案(解决部分英文国际化没有生效的问题)
iOS CocoaPods 子模块实现多语言
子模块做了一个功能,这个功能需要用到多语言,为了不与主工程其它模块耦合,需要把多语言功能放在当前子模块里面。
傅_hc
2020/11/26
2.6K0
iOS CocoaPods 子模块实现多语言
iOS本地化字符串指定参数顺序(应用场景:app内的多语言切换)【修订】
从CSDN下载【iOS APP 内的国际化切换】demo源码:https://download.csdn.net/download/u011018979/19089505
公众号iOS逆向
2021/07/05
7750
iOS app国际化 、跳转到系统设置、iOS10通知、正则表达式
一、APP国际化 先上效果图: 效果图.gif ①、添加需要支持的语言种类,如下图 1.png ②、新建File文件 2.png ③、按照第②步分别创建2个.strings的文件,文件名必须为InfoPlist.strings和最好为Localizable.strings。如下图: 3.png ④点击上图3中右边视图中绿色框内的Localizable,会弹出下图所示:,然后选择对应的语言文件,Base是默认的语言文件!分别对InfoPl
且行且珍惜_iOS
2018/05/22
6960
iOS Storyboard创建APP 的国际化操作
Storyboard创建APP 的国际化操作      最近在看《X-code江湖录》这本书,看到了APP 国际化这点,刚刚也简单的实践了一下。现在和大家分享分享!      写的这个简单的Demo全都是用 Storyboard 写的,用 Storyboard 做项目孩纸们也知道我们这个最重要的就是 mian.Storyboard 这个文件了。UI创建也全是在这个文件里面,那这个文件国际化了,你创建的导航,标签等等也就上面的文字也就相应的国际化了。首先给你的项目添加 你需要的语言,我这里添加的是日语,当然不
Mr.RisingSun
2018/01/09
1.6K0
iOS Storyboard创建APP 的国际化操作
iOS 多国语言本地化与App内语言切换(Swift)写在前面前言准备工作storyboard/xib本地化纯代码本地化语言切换后记
本文同步 个人博客 简书 掘金 慕课 使用Xcode 9.3 Swift4.1
gwk_iOS
2018/08/23
2.5K0
iOS 多国语言本地化与App内语言切换(Swift)写在前面前言准备工作storyboard/xib本地化纯代码本地化语言切换后记
对iOS应用中的文本进行本地化
作为一个程序员,如果让你考虑设计一套逻辑对原始文本针对不同语言的进行本地化转换,我想大多数人都会考虑使用字典(键值对)的解决方案。苹果也是采取了同样的处理,通过创建针对不同语言的多个字典,系统可以轻松的查找出一个原始文本(键)对应的本地化文本(值)。比如:
东坡肘子
2022/07/28
2.3K0
对iOS应用中的文本进行本地化
iOS本地化国际化多语言支持
虽说大多数人开发的应用都是在中国区发布吧,但也有人喜欢把手机设成英语呀,不管是为了练英语还是出国需要,也有外国友人在我国使用呀。所以如果用户中可能包括这些人的话,那么多语言支持是个很重要的课题,这个功能直译是本地化,意译是国际化,通俗地说就是多语言支持了,本文为了通俗就叫多语言支持。iOS开发实现多语言是件特别方便的事儿,本文就讲解实现的方法,分为App名称多语言支持、内容文本多语言支持、获取当前设备所使用的语言三个方面。
Cloudox
2021/11/23
6390
iOS本地化国际化多语言支持
鸿蒙next字符串基础:掌握字符串操作与多语言支持
在鸿蒙(HarmonyOS)开发中,字符串处理是基础且重要的一环。它不仅涉及到日常的文本显示,还关系到应用的国际化和本地化。本文将带你深入了解鸿蒙next版本中字符串的基本操作、多语言支持以及如何在实际开发中应用这些知识。
淼学派对
2024/11/04
4740
IOS本地化应用
BK项目已完成7788,在项目的后期需要被翻译成多国语言版。为了适应全球多个国家使用多个存储。
全栈程序员站长
2022/07/05
9180
IOS本地化应用
如何优雅的完成iOS国际化
上网随便翻翻,关于iOS国际化的文章层出不穷,我看到过很多很好的方法,有很多也是我以前用过的方法。从我的iOS开发生涯到现在已经有五个年头了,虽然去到企业里的项目基本上都是面对国内用户的,但是我的个人项目我都会做一下国际化,因此也会有很多海外用户来下载我的App.
Leacode
2019/02/26
2.2K0
iOS国际化
#1 在最新的Xcode中没有InfoPlist.strings & Localization.strings文件, 所以我们要自己建立这两个文件
周希
2019/10/15
1.4K0
iOS国际化
如何整理 iOS 老项目中混乱不堪的多语言翻译?
linksmart 项目截止目前已经支持了 17 个国家的语言,从诞生到现在也已经经历了很多程序员的修改和维护,代码已经变得十分混乱。因为公司一直在接新的定制项目,所以也没有时间进行一次彻底的重构,只能在维护某方面的 BUG 的时候,对相关代码进行局部重构。
零式的天空
2022/03/25
5440
《iOS UI 开发捷径 利用 Interface Builder 高效、优雅地开发 UI》 读书笔记第1章 Interface Bundle 概要第2章 使用 Interface Builder第3
第1章 Interface Bundle 概要 ---- Bundle 一种标准化的层次结构,保存了可执行代码及代码所需要的资源。 nib Next Interface Builder Interface Builder 的优点 开发和维护效率高 减少大量的 UI 代码和“胶水代码” 适配变得十分简单 IB 也可以做一些非 UI 的事情 利用 IB 学习控件可以达到事半功倍的效果 Interface Builder 的缺点 IB 的执行效率没有纯代码高 使用 IB 开发的过程中容易出现一些小问题 有一定的学
iOSDevLog
2018/05/17
2.5K0
从零到多页复用:我的WPF MVVM国际化实践
作为一名WPF开发者,我最近在一个配置工具项目中遇到了国际化需求。起初,我只是想让按钮文本支持英文和中文切换,但随着页面增多,需求复杂化,我逐渐摸索出一套从简单到专业化的实现方案。这篇文章记录了我的探索过程,从最基础的资源文件开始,到多页面复用的优化,希望能给有类似需求的开发者一些启发。
码事漫谈
2025/03/11
1360
从零到多页复用:我的WPF MVVM国际化实践
推荐阅读
相关推荐
iOS APP 内的本地化切换【修订】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验