iOS 本地化 genstrings 一行命令搞定收集(高级)

目录

  • 一、问题出现场景
  • 二、如何收集需要本地化字符串

前言

首先说明为什么要写这一篇?这一篇的重点是什么?
问:需要本地化的时候,你还在一个个抽取到Localizable.strings,再翻译成对应的文本吗?你不觉得这样的方式很笨吗?如果原本的项目都没本地化,那你现在去抽,是不是要抽取到si。。。

你可能会反问我,不一个个抽,难道你还能一下子都抽取出来吗?是的,我有!这也是我为什么要写这一篇的原因。如果不是,那网上一大堆的本地化,我何必重复累诉。

一、问题出现场景

为什么会有这样的场景出现,场景如下:
最近在整理公司的一些老项目的时候,之前的开发人员,压根没做本地化,导致现在要将项目中的语言根据当地改成那边的文字(比如大的如不同国家,小的如不同地区的方言文字)。如果我一个个去每个文件里抽,那我一天48个小时都不够用,而且一点技术含量都没有,简直是弱智的表现。所以,既然"偷懒"作为一个程序员的"优良"品质,我们就应该好好想一想怎么样才能做到最快最好。所以下面将着重介绍如何高效的处理本地化这一点。

二、如何收集需要本地化字符串

1、基本命令介绍

genstrings -o en.lproj *.m
但是这个命令只能生成当前目录的,并没有遍历子目录,所以基本没用

附:genstrings命名的基本语法:

genstrings [-a] [-q] [-o <outputDir>] sourcefile
其中参数:
-a  在存在的文件后面追加内容
-q  关闭多个键/值对的警告
-o  指定输出目录
因此如果我们想输出到en.lproj目录,则代码如下:
genstrings -o en.lproj  *.m
2、高级命令介绍

所谓高级,只是多了个遍历所有的子目录文件的方法而已,先忽略这种叫法。即遍历所有的子目录文件,去生成Localizable.strings,命令如下:

②高级命令:
错误:find ./ -name *.m -print0 | xargs -0 genstrings -o en.lproj("错误写法,执行无效, 因为*.m处两边少了双引号")
正确:find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj(正确写法,亲测有效)
等价于:
正确:find . -name \*.m | xargs genstrings -o en.lproj  (正确,未亲测)
此命令会去把当前cd到的目录下的所有文件(含子目录中的文件)有用到NSLocalizedString函数的key值都写到文件里。

两个命令执行的前提都是你得必须在你所cd到的文件夹下,创建要将生成的Localizable.strings放在什么位置,在上面的命令中是放在en.lproj文件夹中,当然这个名字我们也可以随便取。最后最后,真正本地化的时候,需要安装系统的en.lproj名字来。

两个命令执行的结果都是:如果命令行中的 en.lproj文件夹中没有Localizable.strings,那么其会自动创建Localizable.strings文件,并在其中补全东西。如果有,则会去更新它的内容。
3、详细操作步骤

通过终端命令genstrings生成字符串资源文件的步骤如下:

①、构造需要本地化的字符串

对项目中需要本地化的字符串设置NSLocalizedString,如
NSString *ok = NSLocalizedString(@"OK", @"dialog button");
NSString *ok = NSLocalizedStringFromTable(@"Ok", @"commonTable", @"dialog button");

附:本地化中可能遇到的含格式的字符串的时候,怎么写?参考AFNetworking的写法如下:
[NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode]

②、执行命令

打开终端,cd到项目文件夹下(包含en.lproj和zh-Hans.lproj)
执行上面的命令find ./ -name "*.m" -print0 | xargs -0 genstrings -o en.lproj(正确写法,亲测有效)

③、生成的资源文件在哪?

答:如果使用NSLocalizedStringFromTable(key, tbl, comment)来获取字符串,资源文件会以tbl参数作为文件名,比如上诉生成的资源文件为:commonTable.strings

附:执行命令遇到的常见问题

有时候执行命令后常出现这样的问题,

509D03C5-3AB4-4C1E-A6C5-FF0E60B7876F.png

之前一直以为是命令处理的文件个数有限,后来才发现原来是我们的本地化代码有些地方没写对,或者没写完全。

比如:
①情况1:

1FBDC094-A455-4FED-9E78-14960BB4EFBC.png


0A255F9E-DF29-4460-A091-33E2598569F8.png

这种问题,可全局查找";替换掉那些语句有问题的为", "cjcomment");即可解决问题。

②情况2:
下面这个是括号没对,右括号是中文的括号,不是英文的(对于这种问题,我们可以搜索中文的括号,将项目中的中文括号,替换成英文括号即可解决绝大部分问题,甚至是全部问题)

541E0E79-2BB4-47A4-85F6-54904FF5E263.png

所以,为了解决类似的问题,要养成项目中所有的括号,都用英文的括号表示吧。

End

结束!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容