[iOS] 檢查多國語言檔案 (Check Localization File)
沒想到簡單的多國語言檔案,也能造成App邏輯出現問題呢⋯⋯
這次由於檔案中莫名多了個「看不見的字元」,編譯能過,但卻讓NSLocalizedString(key, comment)出現問題!原本傳key會回value,出了問題後傳key會依然回key⋯⋯
沒想到簡單的多國語言檔案,也能造成App邏輯出現問題呢⋯⋯
這次由於檔案中莫名多了個「看不見的字元」,編譯能過,但卻讓NSLocalizedString(key, comment)出現問題!原本傳key會回value,出了問題後傳key會依然回key⋯⋯
隨著Swift發展日益盛行,以Objective C為主開發的我要開始與Swift「交互作用」,這次主題是在Objective C使用Swift的Singleton,這看似很容易達成的用法,卻在我又多了C語言來混用,就變得複雜啊~
Swift已經升級到第4版本,我還是沒認真在寫Swift 4,主要是因為它還不太穩定,這幾年必須多花時間去改寫語法到最新版本,於是在有限的開發時間下,我依然對相對穩定的Objective C情有獨鍾XD~
舉一個例子,當我要使用Open Source Charts,Xcode會偵測是否相容,否則就無法編譯成功,如圖:
好在只要選擇到Swift 4,就能成功編譯!也感謝超好用的圖表開源Charts作者,願意每次Swift升級就改寫語法,造福我們成千上萬的iOS開發者!
怎麼在Objective C中使用Swift Open Source?可參考文章:在Objective C專案使用Swift第三方套件。
我App中有三個Localization,分別是:
使用者可以在這三個隨意切換,來顯示他想要的語言介面。
三年前已有實現過多國語言化的預設語言 (Default (Fallback) Language of Localization),不過那篇文章我是有寫code,這次只要調整專案中的Info.plist即可!
調整過後,我切換到日語(SIM字眼旁是日文),App介面語言是英文喔~
想要學寫程式的人,總要先知道自己的目的是什麼?如果還不知道的人,可以去測驗一下圖解我該學什麼程式語言?
亦或者可以參考世界上最多人使用的程式語言,在GitHub上程式語言熱門排名圖解:
可以看到Javascript從2013年成為第一熱門語言,大概跟Node.js發展有非常大的關係。Objective-C則在2015年從排行榜消失,猜測是因為越來越多開發者轉向Swift發展。
表現越來越突出的是Java,我公司資深工程師楊大建議我學Java,對未來無往不利,然而我卻想要學Javascript。哈~透過Node.js,就能寫出前後端的服務!
參考:
週末就來點幽默小品吧~學過許多程式語言的我,看到圖解如果論文跟程式語言一樣自然會心一笑,因為真的是「吐嘲」到語言的痛處啊!
現在我主要寫的語言是Objective C,對於不熟的語言抱持著敬佩的態度,畢竟要能廣泛被程式設計師使用,一定有其獨到之處,所以不用太在意人家會的語言而自己卻不會唷~
以下有八種程式語言,如果你精通其中一項,而且知道其他語言,那麼大概會知道教授為何那麼說嚕~
重點是⋯⋯知道自己要的是什麼就好啦!
老實說,我看不懂HTML那個花盆是啥意思耶><~
有LATEX這語言XD?
請高手幫我解答一下⋯⋯
我在想,要是把Objective C也畫上去,圖中那個教授會講什麼話呢?「為什麼你要用那麼多中括號[]?」
以繁體中文(因為是母語喲!)為主來做多國語言化,另外兩個語言是簡體中文和英文,跟著多國語系 (Localization)這篇文章做,照理說已經沒有其它問題,但是呢⋯⋯若哪天日本人想用這個App,那麼他會看到哪個語言?實際跑過發現是偉大的繁體中文,然而我們的期望卻是套用英文,這時候該怎麼辦呢?打掉重練?噢~不。
一個能夠跨國際使用的App,需要多國語言化(Localization),之前介紹的是系統運行時自動轉換字串的語言,然而我們想要知道目前使用者的偏好語言 (Prefer Language),來做更進一步的運用,比如將語言碼當作參數傳遞。
/** Theme: Language IDE: Xcode 6 Language: Objective C Date: 103/10/14 Author: HappyMan Blog: https://cg2010studio.wordpress.com/ */ // 記錄語言碼 NSString *languageStr = [[NSLocale preferredLanguages] objectAtIndex:0]; // NSString *languageStr = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]; if ([languageStr isEqualToString:@"zh-Hant"]) {// 繁中 self.languageCode = @"2"; } if ([languageStr isEqualToString:@"zh-Hans"]) {// 簡中 self.languageCode = @"1"; } if ([languageStr isEqualToString:@"en"]) {// 英語 self.languageCode = @"0"; }
有兩種用法可行,注意事項請看文件說明!
+ (NSArray *)preferredLanguages NS_AVAILABLE(10_5, 2_0);
note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information@property (readonly, copy) NSArray *preferredLocalizations;
a subset of this bundle’s localizations, re-ordered into the preferred order for this process’s current execution environment; the main bundle’s preferred localizations indicate the language (of text) the user is most likely seeing in the UI
真沒想到聽場國際會議,居然需要聽FM廣播!?原來演講者不只會講國語,還會講粵語和英語,於是就有三個頻道供與會人士選擇~
想說FM這麼老舊的玩意兒,實在不需要買太好的規格,因為我會用到它的機會很少,不過既然都要購買一個,那就仔細研究一下市場上可聽FM廣播的機子,於是我就選擇一台功能頗多的MP3多媒體喇叭 (DeeJay)。
HappyMan・迴響