[ SWIFT ] - 史丹福 StandFord-CS193P-課程17-心得分享-20150930

[ SWIFT ] - 史丹福 StandFord-CS193P-課程17-心得分享-20150930
課程重點:Internationalization (國際化)與  Localization(本地化)

本課程主要是說明當App需要支援多國語系時的處理步驟,簡略說明如下:
1.App開法人員新增語系後匯出.xliff檔案(該檔案中會將App中所用到得物件名稱取出)。
2.產出得 .xliff檔案會交付給翻譯人員,翻譯人員透過特定工具開啟.xliff檔案,進行翻譯,完成翻譯後,回傳.xliff檔案。
3.App開發人員將新的.xliff檔案匯入App專案中,開始進行多國語系測試,測試方式有2種:
(3.1)透過storyBoard預覽方式,缺點:無法執行 App
(3.2)設定App語系,直接以新語系執行App,設定方式:新增Schema後,更改 App語系設定。
4.App開發人員在測試後會將需要修改得內容,以備註方式(NSLocalizedString中的comment欄位)寫入.xliff檔案中,重新產生.xliff檔案給翻譯人員。
不斷透過3與4得步驟來修正翻譯內容,完成 App多語系的支援,此過程稱為國際化與本地化。


國際化的2個步驟:
(1)國際化(i18u):因為i與u之間有18個單字
(2)本地化(l10n)

國際化:讓 App中的文字處於被剝離的狀態(產出 .xliff檔案),讓翻譯者可以翻譯它,然而.xliff也有一些格式設定。
本地化:本地公司會依當地語言進行翻譯

Localizer是一種很好的方式從Localizer獲得最新的字符串,由Localizer當地人翻譯字符串後送回給App開法人員,由開發人員測試轉換語系後的App是否運作正常,透過翻譯者與App開發人員之間持續的交流(Internationalization (國際化)與  Localization(本地化)的過程),完成App語系轉換,達成國際化目標。一般來說翻譯的工作都是外包給第三方公司進行
 
Internationalization (國際化)
在國際化的過程中App代碼內共有2個部分需要修改:(1)storyBoard,例如:Labels的名稱轉換。
※在開發App得過程中,養成使用 AutoLayout是非常重要的,因為在國際化的過程中AutoLayout可以解決,字串替換後因長度改變所產生的版本位移問題!或是不同國家的閱讀習慣,例如:阿拉伯是由右至左閱讀,因此App畫面必須左右翻轉,而國際化部分會自動依位置(地球位置)改變App版面配置。
有關國際化的步驟如下:
(1)用國際化去註冊本地化語言:第一次執行時會將storyBoard中物件名稱剝離出來
NSLocalizedString 是一個判斷國際化語言設定的函式,它會根據現在使用者使用的語言版本,到 Localizable.strings 抓取符合語言版本的字串。

註冊本地化語言流程:
(1)點選+選取語系
(2)產生語系檔案 ,此檔案就是在針對storyBoard進行字串剝離,就是將storyBoard中所以物件名稱取出另存成語系檔案。
在 Language部分點選+選擇要新增得語系
(3)新增語系完畢
 點選Main.string中可看到新增的語系檔案

NSLocalizedString 函式參數介紹:
第一個參數是 key,此為唯一方式去驗證字串內容,當設定的開發語言為英文時, key就會是英文,因有時候會需要支援多國語系,因此 key值並不是必要值。
第二個參數是tableName:在bundle中是一種組織翻譯後字串到表中的方式
第三個參數是value:當找不到key時使用。 
第四個參數是 comment,也就是註解。使用上,建議一開始就使用英文當做 key ,方便進行管理,comment非常重要,此為與翻譯者溝通的欄位,會發送註解內容給翻譯者,告訴翻譯者App開發人員是否希望翻譯或是希望表達的內容。
 ※大部分情況下:NSLocalizedString 函式中的tableName與bundle是預設的,tableName需要本地化,這是一個存放所有字串內容的地方,表格名稱:localizable
※大部分情況下使用 NSLocalizedString只會有key與comment,以key為值來取得翻譯人員的註解內容
 Formatters
 Formatters是基於本地的,也就是轉換語系後的格式應以當地為主,Formatters包含2個部分:
(1)語言:要轉換得語系,例如:將中文轉換為日文,則此欄位為日文。
(2)位置:指在世界上實際位置,例如:語言是西班牙語,位置是墨西哥。
 Formatters會依據妳的位置來組織字串內容,例如:某些國家習慣在十位數加上.ex: 1.2
iOS中的其他排版方式:
NSNumberFormatter:排版數字到字串中,此排版也會被用來排版貨幣。
NSDateFormatter:日期,各種日期組件,例如:周天、月天、年週等各種格式。
NSDateComponentsFormatter:
NSByteCountFormatter:取得特定Byte後的字串,例如:3500Bytes字節,擷取2000Bytes以後字節。
MKDistanceFormatter:特定2個位置得距離,也可以定位。
HealthKit:健康組件也有數字,例如:卡路里、能量等。

NSNumberFormatter-範例
1)宣告formatter = NSNumberFormatter()
2)指定格式:var numberStyle: NSNumberFormatterStyle(例如10進制或貨幣類型)
(3)let stringToDisplay:當詢問用戶一個數字時,最好也用數字格式去解析
※數字格式的呈現與處理,都與你做在的位置有關!
 

                                     NSDateFormatter
 以下為各種不同預設得日期格式

UIImage
有些國家在特定圖案上與其他國家不同,例如:交通號誌
如何做到圖片本地化?
將App中所使用到得圖片放到專案中(不是放到images.xcasets)就會變成本地文件,可透過文件檢視器將圖片設定為本地化!
更好的方式是仍將圖片放入images.xcasets中,給於命名後使用NSLocalizedString查閱(以名稱比對方式替換圖片)
 產生.xliff檔案和譯文
產生.xliff檔案後會交付給翻譯人員,翻譯人員透過特定工具查看.xliff文件並進行翻譯,之後再將翻譯好.xliff檔案回傳給App開發人員,由App開發人員將.xliff檔案import到App中,達到多語系!一個.xliff可以包含多國語系,經由不斷、輸入過程來更新翻譯內容。
※可以一個語系一個 .xliff檔案或一個.xliff檔案包含多國語系。
App開發人員點選Editor\Export For Localization產出.xliff檔案,將.xliff檔案傳送給翻譯人員

翻譯人員透過特定工具查看.xliff內容後,進行翻譯,完成翻譯後回傳.xliff檔案給App開發人員,App開發人員將翻譯後的.xliff檔案import至App專案中,進行語系測試
 
下圖為.xliff檔案內容,其中註記為No Translation部分為未翻譯, App開發人員透過備註方式(NSLocalizedString中的comment欄位)與翻譯人員進行溝通

查詢語系切換後執行結果
當完成本地化之後可以在2個位置看到本地化結果
(1)Xcode:透過預覽StoryBoard方式查看語系切換後結果,因是預覽故無法執行App
(2)直接使用語系檔案執行 App 
下圖為預覽方式:
直接使用語系檔案執行 App:
(1)新增Schema
(2)新增語系

以下為在地化得工作項目

Setting-設置

所有的設置都是透過NSUserDefaults 與App進行交流。  
 Settings Bundle設置方式:
 (1)點選新增檔案,選取iOS\Resource\Settings Bundle,新增檔案

 (2)新增Setting Bundle檔案後,會產生(a)Root.plist:可設定得項目 與(b)en.proj:在設定畫面中呈現的字串,而基本的Setting Bundle檔案由一個文字框(text field)、一個滑動器(slider)與一個開關(switch)組成。

下圖右邊為基本的Setting Bundle執行畫面,可透過Root.plist進行設定或移除

點選Root.plist可以查詢Setting Bundle組成設定,依需求將不需要的項目刪除,其中identifier欄位名稱為NSUserDefault得名稱,透過此名稱來取得Setting Bundle得設定值,讓App可以即時作出反應。


點選en.lproj:此為存放  Setting Bundle中字串,此字串為設定畫面上顯示使用 



Setting Bundle設置完成後,App透過NSNotification來取得Setting Bundle得設定值:

NSNotificationCenter.defaultCenter().addObserverForName(
NSUserDefaultsDidChangeNotification....請參考下圖!(請留意紅色字部分為
identifier欄位名稱








留言

熱門文章