版本記錄
版本號 | 時間 |
---|---|
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.storyboard
和Main.iPhone.storyboard
猴伶,而en.lproj
文件夾包含InfoPlist.strings
课舍。如果添加德語塌西,Xcode將創(chuàng)建一個包含InfoPlist.strings
,Main_iPad.strings
和Main_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 キロメートル";
- 如Testing Your Internationalized App中所述,以多種語言測試您的應(yīng)用程序凰盔。
在對代碼進行這些類型的更改時逐漸測試您的應(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 World。Under 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
文件钉赁,該文件夾包含項目中的所有字符串,盡可能多地使用語言詞匯表中的所有字符串携茂。
或者你踩,使用支持這些文件格式的第三方本地化工具,使用
ad
和wg
擴展名來定位文件中剩余的字符串讳苦。在終端中带膜,將翻譯整合到您的字符串文件中。
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
文件夾中。
- 要測試本地化蝗肪,請使用目標語言啟動您的應(yīng)用程序袜爪,如Testing Specific Languages and Regions中所述。
對于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)注~~~~