版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.05.07 |
前言
iOS中的視圖加載可以有兩種方式帅涂,一種是通過xib加載,另外一種就是通過純代碼加載罐孝。它們各有優(yōu)點和好處,xib比較直觀簡單肥缔,代碼比較靈活但是看著很多很亂莲兢,上一家公司主要風(fēng)格就是用純代碼,這一家用的就是xib用的比較多。這幾篇我們就詳細(xì)的介紹一個xib相關(guān)知識改艇。感興趣的可以看上面寫的幾篇收班。
1. xib相關(guān)(一) —— 基本知識(一)
2. xib相關(guān)(二) —— 文件沖突問題(一)
3. xib相關(guān)(三) —— xib右側(cè)標(biāo)簽介紹(一)
4. xib相關(guān)(四) —— 連線問題(一)
5. xib相關(guān)(五) —— 利用layout進(jìn)行約束之界面(一)
6. xib相關(guān)(六) —— 利用layout進(jìn)行約束之說明和注意事項(二)
7. xib相關(guān)(七) —— Storyboard中的segue (一)
8. xib相關(guān)(八) —— Size Classes(一)
9. xib相關(guān)(九) —— 幾個IB修飾符(一)
10. xib相關(guān)(十) —— xib的國際化(一)
11. xib相關(guān)(十一) —— xib的高冷用法之修改視圖的圓角半徑、邊框?qū)挾群皖伾ㄒ唬?/a>
12. xib相關(guān)(十二) —— UIStackView之基本介紹(一)
13. xib相關(guān)(十三) —— UIStackView之枚舉UIStackViewDistribution使用(二)
14. xib相關(guān)(十四) —— UIStackView之UIStackViewAlignment使用(三)
15. xib相關(guān)(十五) —— UIStackView之工程實踐(四)
16. xib相關(guān)(十六) —— UINib之基本介紹(一)
17. xib相關(guān)(十七) —— UINib之Introduction(二)
18. xib相關(guān)(十八) —— UINib之Nib文件(三)
19. xib相關(guān)(十九) —— UINib之Nib文件(四)
回顧
上一篇主要講述了UINib之Nib文件遣耍,這一篇講述字符串資源闺阱。
String Resources - 字符串資源
本地化過程的一個重要部分是本地化您的應(yīng)用程序顯示的所有文本字符串。根據(jù)它們的性質(zhì)舵变,位于nib文件中的字符串可以很容易地與nib文件內(nèi)容的其余部分一起定位酣溃。但是,嵌入代碼中的字符串必須被提取纪隙,本地化赊豌,然后重新插入代碼。為了簡化這一過程并簡化維護(hù)代碼绵咱,OS X和iOS提供了將字符串與代碼分離并將它們放入資源文件中這種基礎(chǔ)結(jié)構(gòu)碘饼,以便輕松進(jìn)行本地化。
包含可本地化字符串的資源文件由于文件擴(kuò)展名為.strings
悲伶,因此稱為字符串文件艾恼。您可以根據(jù)需要手動或編程創(chuàng)建字符串文件。標(biāo)準(zhǔn)字符串文件格式由一個或多個鍵值對和可選注釋組成麸锉。給定對中的鍵和值是用雙引號括起來并用等號分隔的文本字符串钠绍。 (您也可以使用字符串文件的屬性列表格式,在這種情況下花沉,頂級節(jié)點是一個字典柳爽,并且該字典的每個鍵值對都是一個字符串條目。)
Listing 2-1顯示了一個簡單的字符串文件碱屁,其中包含默認(rèn)語言的非本地化條目磷脯。當(dāng)你需要顯示一個字符串時,你將左邊的字符串傳遞給一個可用的字符串加載例程娩脾。你得到的是包含最適合當(dāng)前用戶的文本翻譯的匹配值字符串赵誓。對于開發(fā)語言,通常對鍵和值使用相同的字符串晦雨,但這樣做不是必需的架曹。
Listing 2-1 A simple strings file
/* Insert Element menu item */
"Insert Element" = "Insert Element";
/* Error string used for unknown error types. */
"ErrorString_1" = "An unknown error occurred.";
一個典型的應(yīng)用程序每個本地化至少有一個字符串文件,也就是每個包的.lproj
子目錄中的一個字符串文件闹瞧。默認(rèn)字符串文件的名稱是Localizable.strings
,但您可以使用您選擇的任何文件名創(chuàng)建字符串文件展辞。創(chuàng)建字符串文件在Creating Strings Resource Files中有更深入的討論奥邮。
注意:建議您使用UTF-8編碼保存字符串文件,該編碼是標(biāo)準(zhǔn)字符串文件的默認(rèn)編碼。當(dāng)Xcode將字符串文件復(fù)制到產(chǎn)品中時洽腺,會自動將字符串文件從UTF-8轉(zhuǎn)換為UTF-16脚粟。有關(guān)標(biāo)準(zhǔn)字符串文件格式的更多信息,請參閱Creating Strings Resource Files蘸朋。有關(guān)Unicode及其文本編碼的更多信息核无,請轉(zhuǎn)至 http://www.unicode.org/ or http://en.wikipedia.org/wiki/Unicode。
字符串資源(本地化和非本地化)的加載最終依賴于OS X和iOS中的bundle和國際化支持藕坯。有關(guān)bundle的信息团南,請參閱 Bundle Programming Guide。有關(guān)國際化和本地化的更多信息炼彪,請參閱Internationalization and Localization Guide吐根。
Creating Strings Resource Files - 創(chuàng)建字符串資源文件
雖然您可以手動創(chuàng)建字符串文件,但很少需要這樣做辐马。 如果使用適當(dāng)?shù)淖址虞d宏編寫代碼拷橘,則可以使用genstrings
命令行工具來提取這些字符串并為您創(chuàng)建字符串文件。
以下各節(jié)介紹如何設(shè)置源文件以促進(jìn)使用genstrings
工具的過程喜爷。 有關(guān)該工具的詳細(xì)信息冗疮,請參閱genstrings
手冊頁。
1. Choosing Which Strings to Localize - 選擇本地化哪些字符串
當(dāng)涉及到本地化應(yīng)用程序的接口時檩帐,并不總是適用于本地化您的應(yīng)用程序使用的每個字符串术幔。 翻譯是一個昂貴的過程,翻譯用戶從未看到的字符串是浪費(fèi)時間和金錢轿塔。 不顯示給用戶的字符串(例如應(yīng)用程序內(nèi)部使用的通知名稱)不需要翻譯特愿。 考慮下面的例子:
if (CFStringHasPrefix(value, CFSTR("-")) { CFArrayAppendValue(myArray, value);};
在這個例子中,字符串“ - ”在內(nèi)部使用勾缭,用戶永遠(yuǎn)不會看到; 因此揍障,它不需要放在一個字符串文件中。
以下代碼顯示了用戶看不到的另一個字符串示例俩由。 字符串%d%d%s
不需要本地化毒嫡,因為用戶永遠(yuǎn)不會看到它,并且它對用戶看到的任何內(nèi)容都沒有影響幻梯。
matches = sscanf(s, "%d %d %s", &first, &last, &other);
由于nib文件是分開定位的兜畸,因此不需要包含已位于nib文件內(nèi)部的字符串。 但是碘梢,您應(yīng)該本地化的一些字符串包括以下內(nèi)容:
- 以編程方式添加到窗口咬摇,面板,視圖或控件并隨后顯示給用戶的字符串煞躬。 這包括您傳入標(biāo)準(zhǔn)例程的字符串肛鹏,例如顯示警告框的字符串逸邦。
- 菜單項標(biāo)題字符串,如果這些字符串以編程方式添加在扰。 例如缕减,如果您使用自定義字符串作為撤消菜單項,那些字符串應(yīng)該位于字符串文件中芒珠。
- 顯示給用戶的錯誤消息桥狡。
- 顯示給用戶的任何樣板文字。
- 應(yīng)用程序的信息屬性列表(Info.plist)文件中的一些字符串; 請參閱Runtime Configuration Guidelines*皱卓。
- 新的文件和文件名稱裹芝。
2. About the String-Loading Macros - 關(guān)于字符串加載宏
Foundation and Core Foundation
框架定義了下面的加載宏,使從字符串文件中加載字符串更容易:
-
Core Foundation宏
-
Foundation宏
您可以在源代碼中使用這些宏來從應(yīng)用程序的某個字符串文件中加載字符串好爬。 在檢索實際字符串值時局雄,宏將用戶的當(dāng)前語言偏好設(shè)置考慮在內(nèi)。 另外存炮,genstrings
工具搜索這些宏炬搭,并使用它們包含的信息為應(yīng)用程序構(gòu)建最初的一組字符串文件。
有關(guān)如何使用這些宏的其他信息穆桂,請參閱Loading String Resources Into Your Code宫盔。
3. Using the genstrings Tool to Create Strings Files - 使用genstrings工具產(chǎn)生字符串文件
在開發(fā)過程中的某個時候,您需要通過代碼創(chuàng)建所需的字符串文件享完。如果您使用Core Foundation和Foundation宏編寫代碼灼芭,則創(chuàng)建字符串文件的最簡單方法是使用genstrings
命令行工具。您可以使用此工具生成一組新的字符串文件或根據(jù)您的源代碼更新一組現(xiàn)有文件。
要使用genstrings
工具,通常至少要提供兩個參數(shù):
- 源文件列表
- 一個可選的輸出目錄
genstrings
工具可以用.c模软,.m或.java文件擴(kuò)展名解析C缎患,Objective-C和Java代碼文件贯溅。雖然不是嚴(yán)格要求,但建議指定輸出目錄,并且是genstrings
放置結(jié)果字符串文件的位置。在大多數(shù)情況下猜旬,您需要為開發(fā)語言指定包含項目資源的目錄。
以下示例顯示了一個用于運(yùn)行genstrings
工具的簡單命令倦卖。此命令使工具解析當(dāng)前目錄中的所有Objective-C源文件洒擦,并將生成的字符串文件放入必須已存在的en.lproj
子目錄中。
genstrings -o en.lproj *.m
第一次運(yùn)行genstrings
工具時怕膛,它會為您創(chuàng)建一組新的字符串文件熟嫩。后續(xù)運(yùn)行將使用源代碼中的當(dāng)前字符串條目替換這些字符串文件的內(nèi)容。對于后續(xù)運(yùn)行褐捻,在運(yùn)行g(shù)enstrings之前保存當(dāng)前字符串文件的副本是個好主意邦危。然后洋侨,您可以區(qū)分新舊版本舍扰,以確定哪些字符串已添加到(或已更改)您的項目倦蚪。然后,您可以使用此信息來更新字符串文件的任何已經(jīng)本地化的版本边苹,而不是替換這些文件并再次對其進(jìn)行本地化陵且。
在單個字符串文件中,每個key必須是唯一的个束。幸運(yùn)的是慕购,genstrings
工具足夠智能,可以合并找到的任何重復(fù)條目茬底。當(dāng)它發(fā)現(xiàn)在單個字符串文件中多次使用的密鑰字符串時沪悲,該工具會將各個條目的注釋合并為一個注釋字符串并生成警告。 (可以使用-q選項禁止重復(fù)條目警告阱表。)如果將相同的key字符串分配給不同字符串文件中的字符串殿如,則不會生成警告。
有關(guān)使用genstrings
工具的更多信息最爬,請參閱genstrings
手冊頁涉馁。
4. Creating Strings Files Manually - 手動創(chuàng)建字符串文件
雖然genstrings工具是創(chuàng)建字符串文件最方便的方法,但您也可以手動創(chuàng)建它們爱致。要手動創(chuàng)建字符串文件烤送,請在TextEdit
(或您的首選文本編輯應(yīng)用程序)中創(chuàng)建一個新文件,并使用Unicode UTF-8
編碼保存它糠悯。 (在保存文件時帮坚,TextEdit通常默認(rèn)選擇合適的編碼方式。要強(qiáng)制執(zhí)行特定編碼互艾,必須在應(yīng)用程序首選項中更改保存選項试和。)此文件的內(nèi)容由一組鍵值對和可選注釋組成描述每個鍵值對的目的。鍵和值字符串由等號分隔忘朝,整個條目必須以分號字符結(jié)尾灰署。按照慣例,注釋被包含在C風(fēng)格的注釋分隔符(/ 和 /)中局嘁,并且被放置在它們描述的條目之前溉箕。
Listing 2-2顯示了字符串文件的基本格式。本示例中的條目來自TextEdit應(yīng)用程序的Localizable.strings
文件的英文版本悦昵。每個等號左側(cè)的字符串表示該鍵肴茄,右側(cè)的字符串表示該值。開發(fā)應(yīng)用程序時的一個常見約定是使用等于用于開發(fā)應(yīng)用程序的語言中的值的key名稱但指。因此寡痰,因為TextEdit是使用英語開發(fā)的抗楔,所以Localizable.strings
文件的英文版具有匹配的鍵和值。
Listing 2-2 Strings localized for English
/* Menu item to make the current document plain text */
"Make Plain Text" = "Make Plain Text";
/* Menu item to make the current document rich text */
"Make Rich Text" = "Make Rich Text";
Listing 2-3
顯示了相同條目的德語翻譯拦坠。 這些條目也位于名為Localizable.strings
的文件中连躏,但該文件版本位于TextEdit應(yīng)用程序的德語項目目錄中。 請注意贞滨,這些鍵仍然是英語入热,但分配給這些鍵的值是德語。 這是因為最終用戶從不會看到關(guān)鍵字符串晓铆。 它們被代碼用來檢索相應(yīng)的值字符串勺良,在這個例子下,它是德語的骄噪。
Listing 2-3 Strings localized for German
/* Menu item to make the current document plain text */
"Make Plain Text" = "In reinen Text umwandeln";
/* Menu item to make the current document rich text */
"Make Rich Text" = "In formatierten Text umwandeln"
5. Detecting Non-localizable Strings - 檢測非本地字符串
基于AppKit的應(yīng)用程序可以利用內(nèi)置的支持來檢測不需要本地化的字符串尚困,以及那些需要本地化但目前不需要的字符串。要使用此內(nèi)置支持链蕊,請在運(yùn)行應(yīng)用程序時設(shè)置用戶默認(rèn)值或添加啟動參數(shù)事甜。指定一個布爾值來指示是啟用還是禁用用戶默認(rèn)值∈竟可用的用戶默認(rèn)值如下:
-
NSShowNonLocalizableStrings
用戶默認(rèn)標(biāo)識不可本地化的字符串讳侨。字符串以大寫形式記錄到shell中。此選項偶爾會產(chǎn)生一些誤報奏属,但總體上仍然有用跨跨。 -
NSShowNonLocalizedStrings
用戶默認(rèn)定位的字符串是本地化的,但在應(yīng)用程序的現(xiàn)有字符串文件中找不到囱皿。您可以使用此用戶默認(rèn)值來捕獲過時的本地化問題勇婴。
例如,要在TextEdit
應(yīng)用程序中使用NSShowNonLocalizedStrings
用戶默認(rèn)值嘱腥,請在終端中輸入以下內(nèi)容:
/Applications/TextEdit.app/Contents/MacOS/TextEdit -NSShowNonLocalizedStrings YES
Loading String Resources Into Your Code - 加載字符串資源到代碼中
Core Foundation
和Foundation
框架提供了用于檢索存儲在字符串文件中的本地化和非本地化字符串的宏耕渴。 盡管這些宏的主要目的是在運(yùn)行時加載字符串,但它們還可以充當(dāng)次要目的齿兔,作為genstrings工具可用于定位應(yīng)用程序的字符串資源的標(biāo)記橱脸。 這是第二個目的,它解釋了為什么許多宏允許您指定比加載字符串通常需要更多的信息分苇。 genstrings工具使用您提供的信息自動創(chuàng)建或更新應(yīng)用程序的字符串文件添诉。 表2-1列出了可以為這些例程指定的信息類型,并描述了如何使用genstrings
工具使用該信息医寿。
Table 2-1 Common parameters found in string-loading routines
參數(shù) | 描述 |
---|---|
Key | 該字符串用于查找相應(yīng)的值栏赴。 該字符串不得包含擴(kuò)展ASCII字符集中的任何字符,其中包括ASCII字符的重音版本靖秩。 如果您希望初始值字符串包含擴(kuò)展的ASCII字符须眷,請使用允許您指定默認(rèn)值參數(shù)的例程竖瘾。 (有關(guān)擴(kuò)展ASCII字符集的信息,請參閱相應(yīng)的Wikipedia entry花颗。) |
Table name | 指定key所在的字符串文件的名稱捕传。 genstrings工具將此參數(shù)解釋為字符串應(yīng)放置在其中的字符串文件的名稱。 如果未提供表名捎稚,則字符串將放置在默認(rèn)的Localizable.strings 文件中乐横。 (為此參數(shù)指定一個值時,請包含不帶.strings 擴(kuò)展名的文件名今野。)表名以.nocache 結(jié)尾的.strings 文件(例如ErrorNames.nocache.strings )不會通過NSBundle 緩存其內(nèi)容。 |
Default value | 與給定鍵相關(guān)聯(lián)的默認(rèn)值罐农。 如果未指定默認(rèn)值条霜,那么genstrings工具將使用key字符串作為初始值。 默認(rèn)值字符串可能包含擴(kuò)展的ASCII字符涵亏。 |
Comment | 翻譯注釋以包含字符串宰睡。 您可以使用注釋向翻譯團(tuán)隊提供有關(guān)如何使用給定字符串的線索。 genstrings工具將這些注釋放入字符串文件中气筋,并將它們放在相關(guān)條目正上方的C風(fēng)格注釋分隔符(/ 和 /)中拆内。 |
Bundle | 與包含字符串文件的包相對應(yīng)的NSBundle對象或CFBundleRef類型。 您可以使用它從不同于應(yīng)用程序主包的包中加載字符串宠默。 例如麸恍,您可以使用它從框架或插件加載本地化的字符串。 |
當(dāng)您從字符串文件請求字符串時搀矫,返回的字符串取決于可用的本地化(如果有)抹沪。 Cocoa和Core Foundation宏使用內(nèi)置的bundle國際化支持來檢索其本地化符合用戶當(dāng)前語言首選項的字符串。 只要您的本地化資源文件放置在適當(dāng)?shù)奶囟ㄓ谡Z言的項目目錄中瓤球,使用這些宏加載字符串應(yīng)自動生成適當(dāng)?shù)淖址?如果找不到適當(dāng)?shù)谋镜鼗址Y源融欧,則該包的加載代碼會自動選擇相應(yīng)的非本地化字符串。
有關(guān)一般國際化以及如何創(chuàng)建特定于語言的項目目錄的信息卦羡,請參閱Internationalization and Localization Guide噪馏。 有關(guān)bundle結(jié)構(gòu)以及如何從bundle目錄中選擇資源文件的信息,請參閱Bundle Programming Guide绿饵。
1. Using the Core Foundation Framework - 使用Core Foundation框架
Core Foundation框架定義了一個函數(shù)和幾個宏欠肾,用于從應(yīng)用程序包中加載本地化的字符串。NSBundle類的localizedStringForKey:value:table:方法從駐留在當(dāng)前包中的字符串文件加載指定的字符串資源蝴罪。 Cocoa還定義了以下用于獲取本地化字符串的宏:
NSLocalizedString (key, comment)
NSLocalizedStringFromTable (key, tableName, comment)
NSLocalizedStringFromTableInBundle (key, tableName, bundle, comment)
NSLocalizedStringWithDefaultValue (key, tableName, bundle, value, comment)
與Core Foundation一樣董济,Apple建議您使用Cocoa便捷宏來加載字符串。 這些宏的主要優(yōu)點是它們可以被genstrings工具解析并用于創(chuàng)建應(yīng)用程序的字符串文件要门。 他們使用起來也更簡單虏肾,并讓您將翻譯評論與每個條目相關(guān)聯(lián)廓啊。
有關(guān)前面宏的語法的信息,請參閱Foundation Functions Reference
封豪。 用于加載字符串的其他方法也在NSBundle Class Reference中定義谴轮。
2. Examples of Getting Strings - 獲取字符串示例
以下示例演示了使用Foundation和Core Foundation宏來檢索字符串的基本技巧。 每個示例都假定當(dāng)前包中包含名稱為Custom.strings
的字符串文件吹埠,該文件已被翻譯成法文第步。 該翻譯文件包含以下字符串:
/* A comment */
"Yes" = "Oui";
"The same text in English" = "Le même texte en anglais";
使用Foundation框架,你可以您可以使用NSLocalizedStringFromTable宏來獲取“YES”
字符串的值缘琅,如以下示例所示:
NSString* theString;
theString = NSLocalizedStringFromTable (@"Yes", @"Custom", @"A comment");
使用Core Foundation
框架粘都,您可以使用CFCopyLocalizedStringFromTable宏獲取相同的字符串,如下例所示:
CFStringRef theString;
theString = CFCopyLocalizedStringFromTable(CFSTR("Yes"), CFSTR("Custom"), "A comment");
在這兩個示例中刷袍,代碼指定要檢索的key翩隧,即字符串“YES”。 它們還指定要在其中查找key的字符串文件(或表)呻纹,在本例中為Custom.strings
文件堆生。 在字符串檢索期間,注釋字符串被忽略雷酪。
Advanced Strings File Tips - 高級字符串文件提示
以下各節(jié)提供了一些關(guān)于使用字符串文件和字符串資源的高級技巧淑仆。
1. Searching for Custom Functions With genstrings - 使用genstrings搜索自定義函數(shù)
genstrings
工具默認(rèn)情況下搜索Core Foundation
和Foundation
字符串宏。它使用這些宏中的信息在項目的字符串文件中創(chuàng)建字符串條目哥力。您還可以指導(dǎo)genstrings
在您的代碼中查找自定義的字符串加載函數(shù)蔗怠,并使用除標(biāo)準(zhǔn)宏之外的那些函數(shù)。您可以使用自定義函數(shù)來封裝內(nèi)置的字符串加載例程并執(zhí)行一些額外的處理省骂,或者您可以用您自己的自定義模型替換默認(rèn)的字符串處理行為蟀淮。
如果要使用自定義函數(shù)使用genstrings
,則函數(shù)必須使用Foundation宏使用的命名和格式約定钞澳。您的函數(shù)的參數(shù)必須完全匹配相應(yīng)宏的參數(shù)怠惶。當(dāng)你調(diào)用genstrings
時,你需要指定-s
選項轧粟,后跟與NSLocalizedString
宏對應(yīng)的函數(shù)的名稱策治。您的其他函數(shù)名稱應(yīng)該從這個基本名稱構(gòu)建。例如兰吟,如果你指定的函數(shù)名稱MyStringFunction
通惫,你的其他函數(shù)名應(yīng)該是MyStringFunctionFromTable
,MyStringFunctionFromTableInBundle
和MyStringFunctionWithDefaultValue
混蔼。genstrings
工具查找這些函數(shù)并使用它們來構(gòu)建相應(yīng)的字符串文件履腋。
2. Formatting String Resources - 格式化字符串資源
對于某些字符串,您可能不希望(或能夠)對字符串資源中的整個字符串進(jìn)行編碼,因為部分字符串可能在運(yùn)行時發(fā)生更改遵湖。 例如悔政,如果一個字符串包含用戶文檔的名稱,則需要能夠?qū)⒃撐臋n名稱動態(tài)插入到字符串中延旧。 創(chuàng)建字符串資源時谋国,可以使用通常用于處理Foundation和Core Foundation框架中的字符串替換的任何格式化字符。 Listing 2-4顯示了幾個使用基本格式化字符的字符串資源迁沫。
Listing 2-4 Strings with formatting characters
"Windows must have at least %d columns and %d rows." =
"Les fenêtres doivent être composes au minimum de %d colonnes et %d lignes.";
"File %@ not found." = "Le fichier %@ n’existe pas.";
要用實際值替換格式化字符芦瘾,可以使用字符串資源作為格式字符串,使用NSString的stringWithFormat:方法或CFStringCreateWithFormat函數(shù)集畅。 Foundation和Core Foundation支持printf
語句中使用的大多數(shù)標(biāo)準(zhǔn)格式化字符近弟。另外,可以使用前面示例中顯示的%@
說明符來插入與任意Objective-C對象關(guān)聯(lián)的描述性文本牡整。請參閱String Programming Guide中的Formatting String Objects以獲取說明符的完整列表藐吮。
翻譯過程中經(jīng)常出現(xiàn)的一個問題是,翻譯者可能需要對翻譯后的字符串中的參數(shù)進(jìn)行重新排序逃贝,以解決源語言和目標(biāo)語言的差異。如果一個字符串包含多個參數(shù)迫摔,那么翻譯器可以在格式化字符之間插入n $格式的特殊標(biāo)簽(其中n指定原始參數(shù)的位置)沐扳。這些標(biāo)簽讓翻譯器重新排列出現(xiàn)在原始字符串中的參數(shù)。以下示例顯示了一個字符串句占,其兩個參數(shù)在翻譯的字符串中被反轉(zhuǎn):
/* Message in alert dialog when something fails */
"%@ Error! %@ failed!" = "%2$@ blah blah, %1$@ blah!";
3. Using Special Characters in String Resources - 在字符串資源中使用特殊字符
就像在C中一樣沪摄,一些字符必須以反斜杠作為前綴,然后才能將它們包含在字符串中纱烘。 這些字符包括雙引號杨拐,反斜杠字符本身以及特殊控制字符,如換行符(\ n)和回車符(\ r)擂啥。
"File \"%@\" cannot be opened" = " ... ";
"Type \"OK\" when done" = " ... ";
您可以通過指定\ U隨后最多四個十六進(jìn)制數(shù)字哄陶,將任意Unicode字符包含在值字符串中。 四位數(shù)字表示所需的Unicode字符的條目; 例如哺壶,空格字符由十六進(jìn)制20表示屋吨,因此當(dāng)指定為Unicode字符時將是\ U0020。 如果字符串必須包含出于某種原因不能輸入的Unicode字符山宾,則此選項非常有用至扰。 如果使用此選項,則還必須將-u選項傳遞給genstrings资锰,以便在結(jié)果字符串文件中正確解釋十六進(jìn)制數(shù)字敢课。 如果指定了-u選項,那么genstrings
會默認(rèn)您的字符串為低位ASCII,并且僅解釋反斜杠序列直秆。
注意:如果您自己生成字符串文件(例如使用
genstrings
)濒募,請確保這些字符串文件在添加到項目中之前以UTF-8編碼結(jié)尾。
4. Debugging Strings Files - 調(diào)試字符串文件
如果在測試過程中遇到問題切厘,并發(fā)現(xiàn)檢索字符串的函數(shù)和宏始終返回相同的key(與翻譯的值相反)萨咳,請在字符串文件上運(yùn)行/ usr / bin / plutil
工具。 字符串文件本質(zhì)上是一種以特殊方式格式化的屬性列表文件疫稿。 使用-lint
選項運(yùn)行plutil
可以發(fā)現(xiàn)隱藏的字符或其他錯誤培他,以防止阻止字符串被正確檢索。
后記
本篇主要講述了字符串資源遗座,感興趣的給個贊或者關(guān)注舀凛,謝謝~~~~