iOS开发——高级技术本地化与国际化详解

本地化与国际化详解
效果如下:
英语:                                                                    中文:



             

                      
具体实现如下:
一。先做准备:设置程序本地化
在xcode点击程序图标:点击Info选项->Localizationn,点击“+”,选择要添加的语言,简体中文选择Chinese(zh-Hans)
你会在你工程目录下发现多了个文件夹,“zh-Hans.lproj",x-code使用.lproj作为其本地化文件夹的扩展名。

 

二。设置xib文件本地化,
图像本地化的方法是一样道理的,可以根据用户的显示语言加载不同的xib文件
操作:点击xib文件,在IB窗口中选择选项选择“File Inspecter",也就是第一个选项,选择“Localization->"+"选择添加的语言,
效果如下,原来的xib文件就会出现三角形,其下有两个文件,因为我的为storyboard,但效果是一样的。就可以实现将其本地化了,非常简单吧

 


 

三。设置应用程序名本地化,
       设置应用程序名存储在应用程序的Info.plist文件中,我们例子实际上为Localize-Info.plist,选择文件,并不需要对文件进行 本地化,而是使"Info.strings"本地化就可以了,在Localize.Info.plist,空白处右键,选择Show Raw Keys/Values,就会看到应用程序名实际为CFBundleDisplayName,我们只需要在对应的 Info.plist中添加以下代码就可以了
英文版:C代码
  1. CFBundleDisplayName = "Localization"; 
复制代码

C代码

  1. CFBundleDisplayName = "本地化";
复制代码


效果图:



四、加载的字符串本地化,
       原理:在代码中将加入的字符串加入NSLocalizeString宏中,启动程序时,系统将根据语言加载相应的文件得到其对应的字符串文件,这个字符 串可以通过系统将NSLocalizedString中的宏生成名为“Localizable.strings”的文件,当然你可以自己去创建这个文件, 然后手动是添加对应的字符串。,
  1. labelName.text = NSLocalizedString(@"Name", @"The name is "); 
  2. labelPassword.text  = NSLocalizedString(@"Password:",@"The password is");
复制代码
NSlocalizeString 第一个参数是内容,第二个参数将会转化为字符串文件里的注释。
转化方法如下 :先关闭项目,打开终端,进入到项目的目录,输入genStrings 文件名.m就可以将该文件中的宏转化为相应的字符串文件,

效果如下:会看到生成"Localizable.strings",
打开文件,就可以交给翻译人员去翻译了





===================
1、本地化字符串,网上那些方法我就不说了,我只更正一点:如果你的Classes下面有子文件夹会报错,使用下面的命令:
find . -name *.m | xargs genstrings -o /Users/apple/(你目标的文件夹)
2、本地化软件的名字:
(1)在info.plist文件里做如下设置:

 

(2)创建一个InfoPlist.strings文件,里面写如下内容:
"CFBundleDisplayName"="你软件的名称";
"CFBundleName"="你软件的名称";
(3)本地化这个文件即可。
3、本地化资源,不必细说了,网上资料很多,这里我只说下我的疑惑:图片资源貌似只能用zh-Hans。
4、本地化icon,目前不支持,所以不要费劲的去本地化icon了。
5、商店的本地化,也不必细说了,很简单,按照苹果需要的填就可以了。




应用genstrings和NSLocalizedString实现App文本的本地化
Admin
2012年3月20日

App本地化的须要不消讲大师也都熟悉打听,本文将介绍一种简单的办法来实现字符串的本地化。

 

在不推敲本地化的景象下,我们若是在代码中给一个Button定义title,一般会如许写:



btn.titleLable.text = @"Example Button";




也许我们已经写了很长的代码才推敲到本地化的题目,大可不必头疼,这时辰,我们要做的是把代码从头扫一遍,然后把每个会显示给用户看的字符串做如下批改:
(对于内部应用的字符串就用不着本地化了)



btn.titleLable.text = NSLocalizedString(@"btn_title", nil);


NSLocalizedString是一个定义在NSBundle.h中的宏,其用处是寻找当前体系说话对应的Localizable.strings文件中的某个key的值。
第一个参数是key的名字,第二个参数是对这个“键值对”的注释,在用genstrings对象生成Localizable.strings文件时会主动加上去。




到今朝为止,我们还没有生成Localizable.strings文件。这是一个逆向的过程,也就是先写好调用过程,再生成strings资料文件。

 

当我们把所有的.m文件都修发好了,就该genstrings对象出场了。
  1. 启动终端,进入工程地点目次。
  2. 新建两个目次,推荐放在资料目次下。
    目次名会感化到Localizable.strings文件对应的说话,不克不及写错了。这里zh-Hans指简体中文,重视不克不及用zh.lproj默示。



mkdir zh-Hans.lproj
mkdir en.lproj


  3. 生成Localizable.strings文件



genstrings -o zh-Hans.lproj *.m
genstrings -o en.lproj *.m


  -o <文件夹>,指定生成的Localizable.strings文件放置的目次。
  *.m,扫描所有的.m文件。这里支撑的文件还包含.h, .java等。

 

  4. 右键点击工程的Resources目次,选择“New Group”,添加两个目次zh-Hans.lproj和en.lproj。
  5. 在新建的group中添加方才生成的Localizable.strings文件。
  6. 最后在Localizable.strings文件中,批改每个key所对应的内容,就大功成功了。




说了一大堆,其实操纵起来还是很简单的,总的来讲就是两条:
  1. 在代码里用NSLocalizedString获取要本地化的字符串
  2. 用genstrings扫描代码文件,生成Localizable.strings,然后加到工程中。

五. 图片和其他资源文件

选中需要本地化的资源文件 -> 打开右边工具栏(Utilites) -> 在“Localization”栏目加入需要支持的语言。xcode会把资源文件拷贝到新加入语言的的目录下,把准备好的本地化文件替换掉xcode自动拷贝的文件即可。

转载于:https://www.cnblogs.com/LifeTechnologySupporter/p/4762656.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab经纬度坐标转换xy坐标,经纬度坐标系转换为UTM坐标系(matlab)

如题所说&#xff0c;直接上程序。验证自己做一下&#xff0c;结果应该是对的。诚不我欺。(注意&#xff1a;程序名与函数名保持一致&#xff01;&#xff01;&#xff01;)function[shuchu]lat_lon2utm(lat_shuru,lon_shuru)%地理经纬度坐标转换为UTM坐标size_shuzusize(lat_s…

matlab空间曲面拟合,matlab如何进行曲面拟合

matlab如何进行曲面拟合以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;在一丘陵地带测量高程&#xff0c;x和 y方向每隔100米测一个点&#xff0c;得高程如下表&#xff0c;试插值一曲面&am…

treegrid.bootstrap使用说明

treegrid.bootstrap使用说明 这个插件是用来做有层次的表格的&#xff0c;大概如图&#xff1a; 官网 http://maxazan.github.io/jquery-treegrid/ 使用这个控件之前需要引入以下css及js&#xff08;因为用到了 bootstrap.js 所以加上了 bootstrap的样式和脚本&#xff09; bo…

matlab 条形图横坐标,Matlab条形图bar横坐标间距设置

1. 默认横坐标数据 X[x1, x2, x3, x4, x5, x6] %一行六列bar(X); %绘制基础条形图2. 修改横坐标标签#考虑横坐标标签文本较长且字体较大的情况bar(X);set(gca, xticklabels,{Apple, Orange, Banana, Pear, Pitaya, Lemon}, Fontname, Times New Roman, Fontsize, 16); %修…

stm32 485和232可以用同一个串口吗_STM32的复用时钟何时开启?

STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗&#xff1f;其实并不是~什么是复用&#xff1f;我们知道&#xff0c;STM32有很多外设&#xff0c;这些外设的外部引脚都是与GPIO共用的。我们可以通过软件来配置引脚作为GPIO引脚还是作为外设引脚。当引脚配置为外设引脚时…

php 简析对象,PHP白盒审计工具RIPS源码简析

RIPS是一款对PHP源码进行风险扫描的工具&#xff0c;其对代码扫描的方式是常规的正则匹配&#xff0c;确定sink点&#xff1b;还是如flowdroid构建全局数据流图&#xff0c;并分析存储全局数据可达路径&#xff1b;下面就从其源码上略探一二。1、扫描流程分析其源码前&#xff…

左右伸缩_冬季装修为啥要留伸缩缝?等到天热地板开裂就晚了!合肥人注意下...

后台有粉丝问&#xff1a;冬天真的不适合做装修吗&#xff1f;假的&#xff0c;这句话不要再传了。每个季节都会有利有弊&#xff0c;只不过冬季施工过程中干燥的比较快&#xff0c;装修的时候对施工要求的更严格。就拿伸缩缝来说吧&#xff0c;冬天装修时不注意&#xff0c;等…

红色警戒2修改器原理百科(七)

&#xff08;十五&#xff09;科技全开——前方高能&#xff0c;BOOM 其实这一小节&#xff0c;最晚应该在第四篇的十小节来讲述的&#xff0c;这样是按照一条线索来讲的&#xff0c;容易理解和把握笔者修改时的思路&#xff0c;以一点逐渐扩大。由于笔者的一些原因&#xff08…

wpf click事件在触摸屏上点击第一次没反应_你的PLC和你的触摸屏为什么总是通讯不上?...

三菱PLC全系列资料免费送啦&#xff01;想要撩我(点击上方红字&#xff0c;免费领资料)很多师傅有以下这些问题&#xff0c;其实除去厂家自行定义的通讯方式外&#xff0c;我们在做项目的时候最常用的通讯方式&#xff0c;通讯不上无非就是这几个原因是否选择正确通讯协议(modb…

ubuntu 开放端口_Masscan端口扫描工具使用小手册

1Masscan介绍1.1 Masscan简介1) nmap是端口扫描仪的合法王位&#xff0c;而今天仍然是最通用的选择。但对于纯粹的速度也有一些已经超越了它&#xff0c;包括scanrand&#xff0c;unicornscan&#xff0c;zmap&#xff0c;和现在的masscan(https://github.com/robertdavidgraha…

hdu4277 暴力

hdu4277 暴力 USACO ORZ Time Limit : 5000/1500ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 4 Accepted Submission(s) : 2 Problem DescriptionLike everyone, cows enjoy variety. Their current fancy is new shapes for pastu…

多线程设置操作时间间隔_听说,有位Java程序员学完这59道多线程面试题之后,直接面上阿里...

前言多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程&#xff0c;进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。软件多线程&…

svm多分类代码_监督学习——分类算法I

本文是监督学习分类算法的第一部分&#xff0c;简单介绍对样本进行分类的算法&#xff0c;包括判别分析(DA)支持向量机(SVM)随机梯度下降分类(SGD)K近邻分类(KNN)朴素贝叶斯分类(NaiveBayes)判别分析(Discriminant Analysis) 判别分析是基于条件概率的分类方法&#xff0c;可以…

oracle awr报告提取,Oracle AWR报告提取方法

默认情况下&#xff0c;oracle是启用数据库统计收集这项功能(AWR)通过show parameter statistics_level来判断是否启用值为TYPICAL或者ALL表示启用AWR值为BASIC&#xff0c;表示禁用AWR1.当前连接实例的AWR报告提取&#xff1a;?/rdbms/admin/awrrpt以sysdba身份登录。SQL>…

关键词组合工具_SEO学习:如何挖掘行业关键词?关键词挖掘策略和工具推荐

关键词是驱动流量增长的基础&#xff01;挖掘关键词是SEO工作的重中之重。如何快速挖掘到行业相关的所有关键词&#xff1f;我们一起了解下。本文大纲如下&#xff1a;拓展和筛选网站主词挖掘搜索引擎推荐关键词业务相关词的挖掘同行关键词的挖掘关键词组合拓展1、拓展和筛选网…

活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!

摘要&#xff1a; 活体检测在各行各业应用比较广泛&#xff0c;如何实现一个活体检测系统呢&#xff1f;早期实现很困难&#xff0c;现在仅使用opencv即可实现&#xff0c;快来尝试一下吧。什么是活体检测&#xff0c;为什么需要它&#xff1f;随着时代的发展&#xff0c;人脸识…

oracle安装命令大全,oracle安装教程及常用命令

虽然网上已经有很多安装教程了,但还是写一个记录一下自己的安装过程以及遇到问题的解决办法1 安装包下载:去oracle的官网 选择DownLoads->database->oracle database:选择接受选择Windows 64的下载,选择file1,和file2,注意两个文件都要下载,下载时要求登录,有oracle账户的…

规格选择_日常使用的拉杆箱脚轮选择哪种规格最合适?

大家可能在采购拉杆箱脚轮的时候&#xff0c;都会有一个问题&#xff0c;拉杆箱脚轮规格选择哪种比较好呢&#xff1f;万向轮好还是单向轮&#xff1f;是万向轮还是单向轮比较耐磨&#xff1f;脚轮厂家诺贝小编接收到大家的疑问&#xff0c;接下来将告诉大家拉杆箱脚轮选择的规…

ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)

1   ERROR: transport error 202: bind failed 2 ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) 3 JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690] 4 …

php session存到redis,php Session存储到Redis的方法

php Session存储到Redis的方法当然要写先安装php的扩展&#xff0c;可参考这篇文章&#xff1a;Redis及PHP扩展安装修改php.ini的设置复制代码 代码如下:session.save_handler redissession.save_path “tcp://127.0.0.1:6379″修改后重启php-fpm或nginx&#xff0c;phpinfo(…