App的國際化和本地化(九) —— 自己管理字符串文件(一)

版本記錄

版本號 時間
V1.0 2018.05.13

前言

很多APP都有國際化版本,常見于一些大公司的產(chǎn)品,比如Facebook、Wechat等娱俺,那么國際化需要我們APP做哪些更改呢,接下來這幾篇就一起來看一下APP的國際化和本地化废麻。感興趣的可以看上面幾篇荠卷。
1. App的國際化和本地化(一) —— 簡單介紹(一)
2. App的國際化和本地化(二) —— 查看語言和區(qū)域設(shè)置(一)
3. App的國際化和本地化(三) —— 國際化用戶界面(一)
4. App的國際化和本地化(四) —— 國際化代碼(一)
5. App的國際化和本地化(五) —— 使用區(qū)域設(shè)置格式化數(shù)據(jù)(一)
6. App的國際化和本地化(六) —— 支持從右到左的語言(一)
7. App的國際化和本地化(七) —— 本地化你的App(一)
8. App的國際化和本地化(八) —— 測試您的國際化應(yīng)用程序(一)

回顧

上一篇主要介紹測試您的國際化應(yīng)用程序,本篇主要介紹自己管理字符串文件烛愧。


Managing Strings Files Yourself - 自己管理字符串文件

如果要自行生成并翻譯存儲在項目文件夾中的字符串文件油宜,請按照本附錄中的步驟操作掂碱。 在這種情況下,您可以添加要支持的語言慎冤,生成字符串文件疼燥,并使用AppleGlot詞匯表或其他進程本地化字符串文件。 當您更改用戶界面或?qū)⒚嫦蛴脩舻奈谋咎砑拥酱a中時蚁堤,您有責(zé)任更新字符串文件醉者。

如果要管理自己的字符串文件,請首先將您想支持的語言添加到項目中披诗,如Using Base Internationalization中所述撬即。

重要的事:或者,Xcode會自動生成字符串文件呈队,并將它們添加到項目中剥槐,如導(dǎo)出本地化版本,編輯XLIFF文件(其中包含字符串文件)并導(dǎo)入它們宪摧,如Localizing Your App中所述粒竖。


Viewing Language Folders in the Finder - 在Finder中查看語言文件夾

導(dǎo)入本地化或添加語言后,您可以在Finder中查看不同的語言文件夾几于。項目導(dǎo)航器中出現(xiàn)在組中的本地化資源位于項目文件夾中的單獨語言文件夾中蕊苗。當您導(dǎo)出和導(dǎo)入本地化時,Xcode會為您管理這些文件夾沿彭。要在Finder中查看語言文件夾岁歉,按住Control鍵并點按項目導(dǎo)航器中的項目,然后從快捷菜單中選擇Show in Finder膝蜈。

項目文件夾應(yīng)該包含一個名為Base.lproj的文件夾和其他具有.lproj擴展名的語言特定的文件夾。語言文件夾的前綴是language ID熔掺,如Language and Locale IDs中所述饱搏。

Base.lproj文件夾包含開發(fā)語言中的所有.storyboard.xib文件。添加到項目中的語言文件夾包含項目中每個.storyboard.xib文件的字符串文件置逻。開發(fā)語言文件夾不包含.storyboard.xib文件的字符串文件推沸,因為它們不需要開發(fā)語言中的翻譯。所有語言文件夾都包含一個InfoPlist.strings文件券坞,用于本地化包的屬性鬓催,例如應(yīng)用程序名稱。任何其他本地化資源(例如您從代碼生成并使用的字符串文件)都會顯示在這些語言文件夾中恨锚。

例如宇驾,對于使用英語作為開發(fā)語言的通用iOS應(yīng)用程序,Base.lproj文件夾包含Main_iPad.storyboardMain.iPhone.storyboard猴伶,而en.lproj文件夾包含InfoPlist.strings课舍。如果添加德語塌西,Xcode將創(chuàng)建一個包含InfoPlist.stringsMain_iPad.stringsMain_iPhone.strings文件的de.lproj文件夾筝尾。 de.lproj文件夾中的文件包含需要翻譯為德語的占位符文本捡需。

對于使用英語作為開發(fā)語言的Mac應(yīng)用程序,文件結(jié)構(gòu)可能類似于:


Creating Strings Files for User-Facing Text in Your Code - 為代碼中的面向用戶的文本創(chuàng)建字符串文件

按照Separating User-Facing Text from Your Code中所述筹淫,使用NSLocalizedString宏替換包含面向用戶的文本的字符串后站辉,可以創(chuàng)建并本地化相應(yīng)的字符串文件。

To create a strings file for user-facing text - 為面向用戶的文本創(chuàng)建一個字符串文件

  • 使用genstrings腳本來創(chuàng)建Localizable.strings文件的開發(fā)語言版本损姜。

在終端中饰剥,運行這些命令:

cd [Project folder]
find . -name \*.m | xargs genstrings -o .

對于源文件中每一個NSLocalizedString宏的出現(xiàn),腳本都會將注釋以鍵值對(使用該值的占位符文本)添加到Localizable.strings文件中薛匪,如

/* distance for a marathon */
"RunningDistance" = "RunningDistance";

如果在代碼中使用NSLocalizedString宏捐川,則該鍵的值將默認為該鍵。 如果您需要不同的行為逸尖,請使用Foundation Functions參考中介紹的采用更多參數(shù)的其他NSLocalizedString宏之一古沥。

  • Localizable.strings文件添加到所有語言文件夾。

將該文件添加到您的Xcode項目中娇跟,如Adding Languages中所述岩齿。 出現(xiàn)對話框時,不要將Localizable.strings添加到基本本地化中苞俘。

注意:如果Xcode警告您Localizable.strings文件看起來是Unicode(UtF-16)盹沈,則可以使用文件檢查器將其轉(zhuǎn)換為Unicode(UTF-8)。 要將文件轉(zhuǎn)換為UTF-8吃谣,請在項目導(dǎo)航器中選擇該文件乞封,然后打開文件檢查器。 在文本設(shè)置部分岗憋,從文本編碼彈出式菜單中選擇Unicode(UTF-8)肃晚。 在出現(xiàn)的對話框中,點擊轉(zhuǎn)換仔戈。

  • 本地化每個語言文件夾中的Localizable.strings文件关串。

例如,在en.lproj / Localizable.strings文件中监徘,輸入RunningDistance鍵的英文翻譯:

/* distance for a marathon */
"RunningDistance" = "26.22 miles";

ja.lproj / Localizable.strings文件中晋修,輸入RunningDistance鍵的日語翻譯:

/* distance for a marathon */
"RunningDistance" = "42.20 キロメートル";

在對代碼進行這些類型的更改時逐漸測試您的應(yīng)用程序墓卦。 本地化一組語言文件或使用偽定位技術(shù),如Testing Using Pseudolanguages中所述


Localizing Strings Files - 定位字符串文件

在向項目添加語言時户敬,Xcode將在.storyboard.xib文件中找到的所有面向用戶的文本添加到相應(yīng)的字符串文件中趴拧。 Xcode在標識顯示文本的視圖的每個鍵值對之前插入注釋溅漾。 例如,在這個字符串文件的片段中著榴,列標題Location和文本字段標簽Address:for:require translation添履。

/* Class = "NSTableColumn"; headerCell.title = "Location"; ObjectID = "f0Y-kT-hVz"; */
"f0Y-kT-hVz.headerCell.title" = "Location";
 
/* Class = "NSTextFieldCell"; title = "Address:"; ObjectID = "gfa-oA-9cr"; */
"gfa-oA-9cr.title" = "Address:";
 
/* Class = "NSTextFieldCell"; title = "for:"; ObjectID = "gsV-Sg-yiA"; */
"gsV-Sg-yiA.title" = "for:";

genstrings腳本還會搜索您的代碼以獲取面向用戶的文本,并將其添加到字符串文件中脑又,如 Separating User-Facing Text from Your Code所述暮胧。 除了您的代碼為翻譯員提供注釋外,文件格式相同问麸。 要本地化字符串文件往衷,請指示譯員使用本地化文本替換占位符文本 - 顯示在評論下方等號的右側(cè)。


Localizing Strings Files Using AppleGlot - 使用AppleGlot本地化字符串文件

另一種方案严卖,使用AppleGlot執(zhí)行字符串文件的一些初始翻譯席舍。例如,使用AppleGlot根據(jù)您在創(chuàng)建項目時選擇的模板哮笆,將Xcode添加到用戶界面的視圖的文本本地化来颤。然后,您可以專注于本地化僅添加到用戶界面的特定于應(yīng)用程序的文本稠肘。

AppleGlot是iOS和Mac應(yīng)用程序開發(fā)人員的本地化工具福铅。 AppleGlot提供iOS和Mac語言詞匯表來幫助您翻譯常用文本字符串。它還可以將面向用戶的文本導(dǎo)出為標準格式项阴,本地化人員可以輕松地將其翻譯成多種語言滑黔。 AppleGlot支持增量開發(fā),因此您只需在每個發(fā)行版中將更改轉(zhuǎn)換為用戶文本环揽。

要下載AppleGlot和語言詞匯表略荡,請轉(zhuǎn)到Build Apps for the WorldUnder Programming Resources > Downloads歉胶,單擊AppleGlot and Localization Glossaries汛兜。如有必要,輸入您的Apple ID并單擊登錄跨扮。下載AppleGlot的.dmg文件以及您支持的語言。要安裝AppleGlot验毡,請打開AppleGlot.dmg文件并雙擊AppleGlot.pkg衡创。

在本地化文件之前,您可以使用AppleGlot語言詞匯表翻譯所有常用文本字符串晶通。

To translate your .storyboard and .xib strings files using AppleGlot glossaries - 使用AppleGlot術(shù)語表翻譯您的.storyboard和.xib字符串文件

  • 在終端中璃氢,創(chuàng)建一個AppleGlot環(huán)境
mkdir [MyAppleGlotEnvironment]
cd [MyAppleGlotEnvironment]
appleglot -w create .
  • 設(shè)置源語言和目標語言。
appleglot -w setlangs [base_language_id] [target_langauge_id]

例如狮辽,如果開發(fā)語言是英語且目標是俄語一也,請將en傳遞給base_language_id巢寡,將ru傳遞給target_langauge_id

  • 在Finder中椰苟,將語言資源文件夾粘貼到AppleGlot環(huán)境_NewBase文件夾中抑月。

如果使用base internationalization,請將特定于語言的文件夾[target_language_id] .lproj粘貼到_NewBase文件夾中舆蝴,并將文件夾的名稱更改為[base_language_id] .lproj谦絮。例如,將ru.lproj粘貼到_NewBase中洁仗,并將名稱更改為en.lproj层皱。

否則,如果您不使用base internationalization赠潦,[base_language_id] .lproj文件夾應(yīng)該包含您想要翻譯成目標語言的所有字符串文件叫胖。

  • 打開目標語言詞匯表.dmg,并將詞匯表(具有.lg擴展名的文件)復(fù)制到_LanguageGlossaries文件夾中她奥。

  • 在終端中瓮增,填充_NewLoc文件夾。

appleglot -w populate

這將在_ApplicationDictionaries文件夾中創(chuàng)建一個.ad文件方淤,其中包含以前翻譯的字符串和_WorkGlossary文件夾中的.wg文件钉赁,該文件夾包含項目中的所有字符串,盡可能多地使用語言詞匯表中的所有字符串携茂。

  • 或者你踩,使用支持這些文件格式的第三方本地化工具,使用adwg擴展名來定位文件中剩余的字符串讳苦。

  • 在終端中带膜,將翻譯整合到您的字符串文件中。

appleglot -w update
appleglot -w finalize
  • 在Finder中鸳谜,將本地化資源粘貼到Xcode項目文件夾中膝藕。

_NewLoc / [base_language_id] .lproj文件夾的內(nèi)容粘貼到Xcode項目文件夾中的[target_language_id] .lproj文件夾中。 例如咐扭,如果目標語言是俄語芭挽,請將_NewLoc / en.lproj文件夾的內(nèi)容粘貼到ru.lproj文件夾中。

對于Mac應(yīng)用程序薛闪,Xcode模板中的主菜單項會出現(xiàn)翻譯辛馆,除了應(yīng)用程序名稱的出現(xiàn)。

有關(guān)AppleGlot的更多信息豁延,請閱讀位于AppleGlot.dmg文件中的AppleGlot 4 User’s Guide昙篙。


Updating Storyboard and Xib Strings Files Using ibtool - 使用ibtool更新Storyboard和Xib字符串文件

.storyboard.xib文件中更改面向用戶的文本時腊状,請使用ibtool命令生成新的字符串文件。使用另一個工具(例如FileMerge)來識別更改并將它們合并到您支持的每種語言的現(xiàn)有字符串文件中苔可。編輯.storyboard或.xib文件時缴挖,Xcode不會自動更新相應(yīng)的字符串文件。

在終端中硕蛹,切換到Base.lproj文件夾醇疼,然后運行此命令為xib文件生成一個字符串文件:

ibtool [MyNib] .xib --generate-strings-file [MyNib_new.strings]

或者,在將更改與每個lproj文件夾中的[MyNib] .strings文件合并之前法焰,將輸出文件中的更改本地化秧荆。要從Xcode啟動FileMerge,請選擇Xcode> Open Developer Tool> FileMerge埃仪。

或者乙濒,您可以使用ibtool命令將翻譯合并回nib文件并執(zhí)行其他增量本地化更新,如ibtool手冊頁中所述卵蛉“涔桑或者使用appleglot命令來管理對字符串文件的更改,如Importing Localizations中所述


Creating a Pseudolocalization - 創(chuàng)建偽定位

如果Testing Your Internationalized App中描述的偽定位選項不足以測試您的應(yīng)用程序傻丝,請創(chuàng)建您自己的偽定位甘有。 將語言添加到您的項目中,如Using Base Internationalization中所述葡缰。 通過用偽文本替換占位符文本來編輯語言文件夾中的字符串文件亏掀。 如Testing Specific Languages and Regions中所述設(shè)置語言啟動參數(shù),然后運行您的應(yīng)用程序泛释。

例如滤愕,通過添加世界語言的特征來編輯字符串文件中的占位符文本,但保持原文可讀怜校,如

/* distance for a marathon */
"RunningDistance" = "[??ü?ń?ń?????á?ń?êè]";

一種技術(shù)是為每個字符串添加前綴和后綴间影。 然后嗽交,您可以輕松識別在測試應(yīng)用程序時這些前綴和后綴不顯示的位置腋粥。 使用多字節(jié)字符作為前綴來驗證您的應(yīng)用是否支持這些字符

后記

本篇主要講述了自己管理字符串文件,感興趣的給個贊或者關(guān)注~~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末籽前,一起剝皮案震驚了整個濱河市裙顽,隨后出現(xiàn)的幾起案子付燥,更是在濱河造成了極大的恐慌,老刑警劉巖锦庸,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件机蔗,死亡現(xiàn)場離奇詭異蒲祈,居然都是意外死亡甘萧,警方通過查閱死者的電腦和手機萝嘁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扬卷,“玉大人牙言,你說我怎么就攤上這事」值茫” “怎么了咱枉?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長徒恋。 經(jīng)常有香客問我蚕断,道長,這世上最難降的妖魔是什么入挣? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任亿乳,我火速辦了婚禮,結(jié)果婚禮上径筏,老公的妹妹穿的比我還像新娘葛假。我一直安慰自己,他們只是感情好滋恬,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布聊训。 她就那樣靜靜地躺著,像睡著了一般恢氯。 火紅的嫁衣襯著肌膚如雪带斑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天酿雪,我揣著相機與錄音遏暴,去河邊找鬼。 笑死指黎,一個胖子當著我的面吹牛朋凉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播醋安,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼杂彭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吓揪?” 一聲冷哼從身側(cè)響起亲怠,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柠辞,沒想到半個月后团秽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年习勤,在試婚紗的時候發(fā)現(xiàn)自己被綠了踪栋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡图毕,死狀恐怖夷都,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情予颤,我是刑警寧澤囤官,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站蛤虐,受9級特大地震影響党饮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驳庭,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一劫谅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嚷掠,春花似錦捏检、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霹娄,卻和暖如春能犯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犬耻。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工踩晶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枕磁。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓渡蜻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親计济。 傳聞我的和親對象是個殘疾皇子茸苇,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容