日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS应用国际化教程(2014版)

發布時間:2023/11/29 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS应用国际化教程(2014版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉載至?http://www.cocoachina.com/industry/20140526/8554.html

這篇教程將通過一款名為iLikeIt的應用帶你了解最基礎的國際化概念,并為你的應用添加國際化的支持。該示例應用有一個標簽和一個You Like?按鈕,用戶無論何時點擊You Like?,一些樂觀的銷售數

閱讀器

應用國際化

本文最初由Sean Berry撰寫,由Ali Hafizji針對iOS 7進行了更新。

開發一款偉大的iOS應用程序是件了不起的事情,但是還有比優秀的代碼、華麗的設計以及直觀化交互更多的事要做。躋身在App Store排行榜前列還需要正合時宜的產品營銷、擴大用戶群的能力、實用的工具以及盡可能廣泛地獲得用戶的技術。 對很多開發者來說,國際市場是事后的想法,但由于App Store提供了無縫的全球分享模式,任何iOS開發者都可以通過一鍵點擊把應用程序發布至超過150個國家的市場。亞洲和歐洲代表了潛在客戶不斷增長的市場,這兩個市場中很多人都不是以英語為母語,但是為了讓應用充分利用市場的潛力,你至少要把應用語言國際化。 這篇教程將通過一款名為iLikeIt的應用帶你了解最基礎的國際化概念,并為你的應用添加國際化的支持。該示例應用有一個標簽和一個You Like?按鈕,用戶無論何時點擊You Like?,一些樂觀的銷售數據和對應的圖片就會從按鈕下方淡入顯示。 不過現在,該應用僅僅有英語版本。
?注意:國際化另一個重要的方面是使用Auto Layout改變文本的大小。不過為了讓本教程盡可能地簡單,我們不會主要關注Auto Layout。對于Auto Layout這個話題,我們另有其他教程。
國際化 vs 本地化(Internationalization vs Localization 在你開始學習本教程之前,很重要的一點是了解國際化和本地化之間的不同之處,很多人經常會把這兩個概念搞混。 簡單說,國際化是一個應用程序國際兼容性設計的過程,比如: 1.以用戶母語處理文本輸入和輸出; 2.處理不同的日期、時間以及數字格式; 3.利用適當的歷法和時區處理數據; 國際化是一項你和開發者通過利用系統提供的API來實現的活動,并在代碼上做一些補充和修改,從而讓應用的中文版、阿拉伯語版本和英文版一樣好。 相比之下,本地化僅僅是把應用的用戶界面和資源翻譯成不同的語言,這是你可以也應該交給別人做的工作,除非你能精通app應該支持的每種語言。 現在開始(Getting Started 第一步是downloadiLikeIt項目,我們將會在整個教程中使用它。 在Xcode 5中打開該項目,并在模擬器上運行,你將會看到以下界面: 從截圖中看出,你需要本地化四個項目: UI元素: Hello ?Label UI元素: ?You like? ?Button 銷售數據文本: Yesterday you sold 1000000 apps ? 圖片文本: I LIKE IT ? 花一小會兒時間瀏覽文件和文件夾來熟悉下項目結構。 Main.storyboard包含單個屏幕,它是ViewController類的實例。 從代碼中分離文本 目前,應用展示的所有文本都是以硬編碼字符串存在于Main.storyboard和ViewController里。為了本地化這些字符串,你需要把它們放在一個單獨的文件中。 你將會在包中簡單地引用這些字符串,而不是在你的方法中進行硬編碼。 Xcode使用帶有".strings" 擴展名的文件來儲存和檢索app中使用的所有字符串,以支持每種語言。根據iOS設備當前使用的語言,代碼中一個簡單的方法調用將會查找并返回要求的字符數串。 試試看,打開 File>New>File,選擇Resource中Strings Fils,如圖: 點擊下一步,為文件命名為Localizable.strings,然后點擊save。
?注意:Localizable.strings是iOS用來本地化文本默認的文件名稱。請抑制以其他內容給它命名的沖動,否則以后你每次引用本地化字符串的時候要一次次輸入.strings 文件名。
現在,你已經創建了Localizable.strings文件,你需要添加所有的文本--當前硬編碼在app中的文本。你需要遵從一個特定但簡單的格式:
  • "KEY"?=?"CONTENT";?
  • 這些鍵/內容對功能就像NSDictionary ,慣例是使用默認的內容翻譯作為內容的鍵:比如You Like?,你應該寫:
  • "You?like?"?=?"You?like?";?
  • Key/content對也可以包含格式化字符串:
  • "Yesterday?you?sold?%@?apps"?=?"Yesterday?you?sold?%@?apps";?
  • 現在切換至ViewController.m,找到viewDidLoad方法,現在app會為likeButton和salesCountLabel設置文本,展示如下:
  • _salesCountLabel.text?=?[NSString?stringWithFormat:@"Yesterday?you?sold?%@?apps",?@(1000000)];?
  • [_likeButton?setTitle:@"You?like?"?forState:UIControlStateNormal];?
  • 取而代之的方法是,你需要從此前創建的Localizable.strings文件中讀入字符串。用一個名為NSLocalizedString的宏修改這兩行代碼如下所示:
  • _salesCountLabel.text?=?[NSString?stringWithFormat:NSLocalizedString(@"Yesterday?you?sold?%@?apps",?nil),?@(1000000)];?
  • [_likeButton?setTitle:NSLocalizedString(@"You?like?",?nil)?forState:UIControlStateNormal];?
  • 宏包將一個稍長的代碼片段包裹為一個更易于管理的長度,它使用#define指令創建。如果你想知道NSLocalizedString宏是什么,可按住Control鍵并在NSLocalizedString點擊,可以看到它的定義如下:
  • #define?NSLocalizedString(key,?comment)??
  • ????[[NSBundle?mainBundle]?localizedStringForKey:(key)?value:@""?table:nil]?
  • 在當前的語言中,NSLocalizedString宏使用localizedStringForKey方法查找給定鍵值的字符串。它為table name傳遞nil,所以它使用默認的字符串文件名(Localizable.strings)。更多細節,可查看蘋果的NSBundle Class Reference。
    ?注意:這個宏把注釋作為一個參數,但似乎沒什么用。不像此前那樣需要手動把每個key/value對鍵入Localizable.strings,你還可以使用iOS?SDK帶的一個叫做genstrings的工具來自動處理(非常適用于大型項目)。
    如果使用這個方法,你可以為每個字符串加上一個注釋,注釋會顯示在默認的字符串邊上,作為translator的輔助。比如你可以添加一個注釋指出字符串在哪里使用。 已經有了足夠的背景信息,現在開始吧! 創建并運行你的項目,并且它應該像之前一樣在主屏幕上展示相同的文本,但是西班牙文在哪里?現在你的應用已經進行了本地化設置,添加翻譯是小事一樁。 添加西班牙語本地化(Adding a Spanish Localization 想要添加支持另一種語言,你可以點擊左窗格中的iLikeIt項目文件夾,在旁邊的窗格中選擇Project(不是 Target),然后在Info標簽下你會看到一個Localizations分區。點擊點擊“+”,然后選擇Spanish (es)。 下個屏幕會詢問你哪些文件需要本地化。選中所有文件并點擊Finish。注意:Localizable.strings沒有展示在這個列表中,不過不用驚慌! 在這一點上,Xcode已經在幕后設置好了一些目錄,針對你選擇的語言,這些目錄包含不同版本的InfoPlist.strings和Main.storyboard。你可以使用Finder打開項目文件夾看看,你會看到如圖所示: 看到en.lproj和es.lproj了嗎?它們包含文件的特定語言版本。 en是English的本地化代碼,es是Spanish的本地化代碼。關于其他語言,可參看完整的語言代碼列表。 從現在開始,當你的app想要獲得某個文件的英文版,它就會去en.lproj中查找,而當它想要某個文件的西班牙語版時,它就會去es.lproj找。非常簡單!把你的資源文件放在合適的文件夾里,剩下的事情就交給iOS負責了。 但是等等,Localizable.strings呢?想讓Xcode知道你想將它本地化,那你可以在左窗格里選中文件,然后在右窗格中打開File Inspector。 你會看到一個Localize標簽,點擊并選擇英語(因為當前是英語),最后點擊Localize。 現在File Inspector面板將會展示文件所屬的語言。目前,正如你所看到的,文件只針對英文進行本地化。可通過點擊Spanish左邊的框框添加西班牙語本地化。 回到左窗格并點擊Localizable.strings旁邊的箭頭,它會顯示出子元素。現在文件已經有了兩個版本:一個是英文本,一個是西班牙語版。 想修改西班牙語的文本,可選擇Localizable.strings (Spanish),并用如下內容替代它的內容:
  • "Yesterday?you?sold?%@?apps"?=?"Ayer?le?vendió?%@?aplicaciones";?
  • "You?like?"?=?"~Es?bueno?~";?
  • 恭喜!現在你的應用支持兩種語言了! 為了測試和驗證所有事情都正常工作,你可以在模擬器/設備上把展示語言更改為Spanish,方法是打開設置應用,然后選擇:General -> International -> Language -> Espanol. 如果 Xcode debugger仍在運行中,你可以在Xcode中點擊“stop”,然后點擊“Build & Run”,你將會看到: 地區vs語言(Locale vs Language) 100萬是個相當不錯的銷售數據,我們可以為它添加一些格式讓它看起來更好! 打開ViewController.m并將為_salesCountLabel設置文本的代碼行替換為:
  • NSNumberFormatter?*numberFormatter?=?[[NSNumberFormatter?alloc]?init];?
  • [numberFormatter?setNumberStyle:NSNumberFormatterDecimalStyle];?
  • NSString?*numberString?=?[numberFormatter?stringFromNumber:@(1000000)];?
  • _salesCountLabel.text?=?[NSString?stringWithFormat:NSLocalizedString(@"Yesterday?you?sold?%@?apps",?nil),?numberString];?
  • 編譯并運行應用程序,那么數字就會更容易辨認一些。 這對美國人來說非常棒,但在西班牙,100萬寫作“1.000.000″而不是“1,000,000″。在西班牙文環境下運行應用程序,你將會看到逗號用來隔開0。在iOS中,數字格式化是基于地區/國家,而不是語言,所以為了了解某個西班牙人如何查看銷售數據,可打開Settings.ap,并通過導航改變區域:General -> International -> Region Format -> Spanish -> Spain 在此編譯和運行應用程序,現在你會看到正確的數字格式: 一點額外的前期工作,NSNumberFormatter會自動為合適的區域格式化你的數字。可能的情況下,請拒絕重新發明輪子,因為在iOS上,通常按照蘋果的方式做才能有回報。 國際化Storyboards(Internationalizing Storyboards) Storyboard中的元素,比如標簽、按鈕以及圖片可以在代碼中或者直接在storyboard中設置。在設置文本編程時,你已經學會了如何支持多種語言,但是屏幕頂部的“Hello”標簽沒有IBOutlet,只能在Main.storyboard中設置它的文本。 你可以添加一個IBOutlet,將其連接到Main.storyboard中的label上,然后使用NSLocalizedString設置其文本屬性,就像使用likeButton和 ?salesCountLabel那樣,但是這里有一個本地化storyboard元素更簡單的方法,不需要任何附加代碼。 打開Main.storyboard左側的小三角形,你會看到Main.storyboard (Base)和Main.storyboard (Spanish)。點擊Main.storyboard (Spanish)打 開編輯器,你會看到storyboard中的本地化文本。你已經有了一個Hello標簽入口,如下:
  • /*?Class?=?"IBUILabel";?text?=?"Hello";?ObjectID?=?"pUp-yc-27W";?*/?
  • "pUp-yc-27W.text"?=?"Hello";?
  • 用西班牙語翻譯的“Hola”替換兩個“Hello”:
  • /*?Class?=?"IBUILabel";?text?=?"Hola";?ObjectID?=?"pUp-yc-27W";?*/?
  • "pUp-yc-27W.text"?=?"Hola";?
  • ?注意:絕對不要直接改變自動生成的ObjectID,也不要復制和粘貼上邊的代碼行,因為標簽的ObjectID可能已經跟上邊展示的不一樣了。
    圖片的國際化(Internationalizing Images) 由于應用程序使用了包含英語文本的圖片,所以你需要把圖片本地化,因為零零散散的英文文本會讓你的西班牙應用看起來很不專業,并且也有損于應用的整體易用性和市場潛力。 本地化圖片,首先需要下載西班牙語版本的圖片(在大多數瀏覽器上是右鍵點擊>保存為): 打開Images.xcassets,拖放此前下載的圖片megusta.png并添加至左側的圖片列表,從而把圖片添加至資產Asset catalog。Asset catalogs不能被國際化,所以你需要有一個方法來本地化圖片。 打開Localizable.strings (English) ,并添加如下內容:
  • "imageName"?=?"ilike";?
  • 把以下代碼添加至Localizable.strings (Spanish)文件:
  • "imageName"?=?"megusta";?
  • 從現在開始,你將使用imageName key來檢索本地化版本的圖片。打開ViewController.m并把如下代碼添加到viewDidLoad方法中:
  • [_imageView?setImage:[UIImage?imageNamed:NSLocalizedString(@"imageName",?nil)]];?
  • 如果需要,將模擬器/設備切換到西班牙語,編譯并運行,然后你會看到本地化圖片的展示。 現在你已經有了將應用程序針對多種不同語言本地化所需的所有工具。
    ?注意:這僅適用于每種語言有不同文件名的情況。一個更好的方法是本地化資源文件夾,如這篇文章所描述的那樣。
    額外獎勵 作為最后的獎勵,我們來本地化應用的名字。Info.plist有一個特殊的文件(InfoPlist.strings),你可以在里邊用字符串覆蓋其他語言。為給應用程序一個不同的西班牙語名字,可打開Supporting Files > InfoPlist.strings (Spanish),并插入以下代碼:
  • "CFBundleDisplayName"?=?"Me?Gusta";?
  • 它改變了應用的名稱,像Springboard上展示的那樣。 練習:國際化音頻文件(Exercise: Internationalizing Audio files) 學習到這里,你應該熟悉了基本的國際化知識。這是一個簡單的練習,你可以通過兩個不同的音頻文件(一個是英文版,一個是西班牙語版)來測試下自己新掌握的知識,并基于用戶選擇的語言播放合適的文件。 以下是必要步驟的簡單描述: 1.下載示例音頻文件(sample audio files)。 2.把box-en.wav首個音頻文件拷貝到項目中。 3.打開音頻文件inspector,選擇本地化按鈕,確保你選擇了英語和西班牙語作為支持語言。 4.重命名第二個音頻文件(box-es.wav),和第一個名字(box-en.wav)一樣,然后將其拷貝到es.Iproj文件夾。 5.確保你在Finder提示中選擇了“Replace File”。 何去何從 Final Project包含了你在該教程中所寫的全部代碼。 現在你知道了國際化一款iPhone app所需的基本技術,那就為你現有的應用添加外語支持吧,或者在設計下一款應用時為其添加一門外語支持。正如你所看到的那樣,這幾乎沒有花費多少時間,而它將會讓你的應用接觸到更寬廣更多樣化的受眾,并且你的非英語用戶也會感謝你! 對于實際的翻譯,你可以使用Google的免費翻譯服務(http://www.google.com/translate),但結果可能不是絲毫不差的。如果你可以花點錢,那么你可以考慮蘋果的Internationalization and Localization頁面下方列出了第三方服務提供商。 如果你有任何關于國際化的問題或建議,請加入論壇討論! 原文:Internationalization Tutorial for iOS [2014 Edition]

    總結

    以上是生活随笔為你收集整理的iOS应用国际化教程(2014版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。