ios和osx支援40種語言的本地化,xcode無疑為這一過程提供了強有力的支援。蘋果將這一多語言適配過程細分為internationalization(國際化)和localization(本地化)兩個階段。
我們來使用nslocalizedstring來讓使用者介面的文字國際化,不過這些文字不是在ib上輸入的,而是在**中產生並賦值的:
1func nslocalizedstring(key: string, tablename: string? =default, bundle: nsbundle =default, value: string =default, #comment: string) -> string
上面這個swift語言宣告的函式可以直接返回乙個經過本地化處理過的字串,這就使得你在**中給一些控制項文字賦值時更有「國際化視野」:
1self.text = nslocalizedstring("share", comment: "share score")
因為不用的語言會有不同的專業名詞,所以最後的comment引數很重要,它可以暗示翻譯人員這段文字要表達的含義。而第乙個引數key的內容為基礎語種的內容,將它作為「鍵」來對映其他語言對應翻譯後的「值」。如果我們需要在字串中插入其他內容,這時需要改進下:1
localizedstringwithformat:方法保證了插入字串中的內容也被轉化成本地格式,比如時間格式、數字的格式等。而此時在swift字串中插入其他資料就不能使用\()了,只能用百分號佔位的形式。
對應的在localizable.strings中可以這樣寫:
******
這樣就將英文與中文鍵值對應起來了,注意那個「1$」表示是在鍵內容(即英文原文)中第乙個插入的資料,因為不用語言表達同乙個意思時,插入字串中的資料順序可能會有變化,這個」數字+$「的標記記錄了它們原本的順序。
nsformatter
nsformatter算是老朋友了,它把資料轉化**們易讀的字串,而且還會根據不同語言和區域進行格式上的優化。它預設使用當地的語言習慣,我們不需要配置任何引數。比如顯示時間日期,數字,金融,位元組計數等格式上的本地化。現在ios8和osx yosemite加入了健康相關的功能,nsformatter也加入了很多新的量詞,比如能量、長度高度、重量等方面。
nsbundle
所以我們在載入一些資源檔案的時候依然向以前那樣從bundle獲取url就行啦,xcode已經幫我們替換成了本地化的資源,前提是你已經在xcode中設定好了當前語言版本的對應資源。
xcode
在xcode5中支援了使用base國際化並用自動布局優化國際化後的介面,現在其他資源檔案也可以這麼幹了,甚至可以在xcode中預覽介面布局效果。
點選乙個xib或storyboard檔案後,在file inspector中的localization中可以設定支援的語言。xcode會自動從介面元素中提取出文字到strings檔案中,翻譯人員可以根據注釋來在對應語言的strings檔案中進行翻譯。當然也可以直觀化的轉換成介面形式的檔案來直觀化翻譯工作:
ps:語言和地區這兩個選項是有差別的,比如當我們將地區設定成瑞典,雖然我們沒有提供對應的瑞典版本的介面文字翻譯,但是時間日期的顯示方式等還是會遵從瑞典的習慣來顯示。所以地區這一項可供選擇的選項包含了所有地區,而語言這一選項只包含了我們在國際化工作中所支援的語言,因為只有國際化中支援的語言(比如上圖,我只加入了英語和漢語)才有相應的資源檔案;而nsformatter地區格式優化是內建的,無需我們提供格式。
之前國際化的工作就是將工程變得有國際範兒,建立起了支援多語種的架構,那麼接下來就是苦逼的翻譯工作和本地資源準備工作,說好聽點兒就叫本地化。
首先要把表面上的工作做了,也就是翻譯使用者介面上所有的文字。當然這不是程式設計師該幹的活兒,更不能直接交給谷歌翻譯,而程式設計師與專業翻譯人員溝通時還是需要成本的:首先把需要翻譯的內容從工程裡整理出來,然後交給負責翻譯的妹子,等妹子翻譯好後再把結果匯入工程中,嗯目測工作量亞歷山卓。ps:為什麼翻譯是妹子?
就算妹子再萌,也不能因為這占用了程式猿們寶貴的工作時間!xcode6簡化了匯入匯出這些資源的流程,它會檢查ib資源和原始檔並提取「source strings」,並生成xliff檔案。翻譯好的xliff檔案也可以通過xcode匯入到工程中來生成和更新資源。嗯,可以把省下來的時間幹一些其他的事情咯。
ps:xliff是由軟體開發商、本地化服務提供商、本地化工具提供商等團體共同倡議和設計,由oasis標準組織發布的用於本地化資料交換的格式標準。它基於xml技術制定軟體資源檔案格式的轉換規格,其目的在於提高軟體的本地化作業效率。
匯出和匯出xliff就是如此簡單,選中專案,在editor選單中可以就找到:
也可以通過命令列的方式進行匯入匯出xliff檔案操作:
1xcodebuide -exportlocalizations -project -localizationpath xcodebuide -importlocalizations -project -localizationpath
無需把翻譯工作推到最後去做,因為匯入和匯出xliff檔案是可以持續整合的,一邊寫**,一邊把現有內容匯出xliff給他人翻譯,這樣能提高效率。每當有新的翻譯修改時也可以及時更新,xcode會把xliff檔案內容與當前翻譯進度合併;在匯出xliff時可以選擇匯出當前開發使用的語言還是已經翻譯中的語言,這些強大的服務無疑是xcode6所賜予我們的。
xcode6 使用layout自動布局
剛剛學習了xcode6的自動布局,發現網上的教程有很多,寫的也很詳細,但還是感覺很複雜,自己實現不了這個效果.但是最終還是嘗試出了一些方法,並且能夠實現較為固定的xib布局,可以作為layout的入門級別的吧.其實layout看上去很複雜,但是明白了最基本的原理之後就會變的清晰很多.layout中的...
關於xcode6之後的ViewDebugging
viewdebugging就是方便我們更好更快的來了解檢視層級,如果我們的專案簡單那麼檢視是相對簡單如果 有問題了直接在 中找就ok了,可是如果我們的專案很大呢,頁面過於複雜如果 突然有問題或者說是,經理來找你說你的label字型不符合等等問題,這是就用到我們的viewdebugging了,它讓你的...
Xcode6除錯出現的問題
1.xcode6新建的專案,跑在7.0以上的真機上,會出現不是全屏顯示的現象,這個問題是由於,啟動螢幕的問題,在原先的xcode4,xcode5中解決這種問題的辦法是新增乙個default 568h 2x.png的啟動,後來引入了images.xcassets後,可以直接在images.xcasse...