iOS語言國際化(本地化)
Only in the dictionary, will success appear before work.
只有在字典裡,成功才出現在工作之前。
前言
年前公司談了一個專案,對方是臺灣的,談的很愉快。但是問題來了,App需要過國際化。老闆說,既然要做繁體的,那麼就把英文也一起做了吧。當時做完了就快放假了,也沒有心情寫,加上還沒有寫過有關國際化的文章,於是就有了這篇文章。
公司的專案寫的時候是純程式碼寫的,所以這篇文章主要說的是純程式碼的語言國際化,xib及storybroad略微涉及。言歸正傳,開擼!
一、選中藍色工程資料夾,在PROJECT
中info
裡面的Localizations
新增需要的國際化的語言,如圖1
二、國際化我們要做的有兩部分:應用名稱國際化和字串(App內的文字)國際化
2.1、應用名稱國際化
應用名稱本地化,是指同一個App的名稱,在不同的語言環境下(手機當前顯示的語言)顯示不同的名稱。比如,微信在簡體中文環境下App名稱顯示為微信
,在英語環境下顯示為WeChat
。下文就是應用名稱本地化。
2.1.1、選中Info.plist
檔案,command + N
,選擇Strings File
。
2.1.2、檔案命名的時候必須是
InfoPlist
,必須是哦。
建立完成之後會有一個檔案,如圖:
2.1.3、選中建立好的
InfoPlist.strings
檔案,開啟檔案檢查器,點選上面的Localize...
,如圖:
2.1.4、點選之後會有一個彈出框,點選列表你會發現,裡面的有的語言都是之前(標題號為一)新增過的。
2.1.5、選擇一種語言,點選確定(Localize)就會出現下圖,上面會有你開始新增過的所有語言,剩下的只要打鉤就行了。記得打鉤的時候點選一個稍微停頓一下再點第二個,具體為啥,你點快點你就知道。
依次勾選之後,檢視左邊新建的檔案InfoPlist.strings
,你會發現會多出三個子檔案,如圖:
2.1.6、接下來就到了關鍵的時候了,在對應的檔案中進行應用名稱國際化,在進行國際化的時候會用到
CFBundleDisplayName
欄位,在使用該欄位的時候可以加上引號也可以不加。
(1)在InfoPlist.strings(English)
中新增如下程式碼:
//在手機語言是英文時顯示的名稱
CFBundleDisplayName = "App Name";
(2)在
InfoPlist.strings(Chinese (Simplified))
中新增如下程式碼:
//在手機語言是簡體中文時顯示的名稱
CFBundleDisplayName = "應用名稱";
(3)在
InfoPlist.strings(Chinese (Traditional))
中新增如下程式碼:
//在手機語言是繁體中文時顯示的名稱
CFBundleDisplayName = "應用名稱";
做完上面的話,設定手機不同的語言,你會發現應用的名稱就相應的改變了, 要是需要其他國語言,以此類推。
2.2、字串國際化
字串國際化就是App中的字串在不同語言環境顯示的不同狀態。舉個栗子,主頁在中文是主頁,在英文就是Home。字串國際化和應用名稱國際化基本一樣,但也有細微差別,就是新建的檔名稱不一樣,還有就是,在使用的時候會用到NSLocalizedString(key, comment)
這個巨集,下面細說。
2.2.1、和應用名稱本地化一樣,command + N
新建檔案:
檔案命名的時候一定要是
Localizable.strings
,一定要是哦。
2.2.2、新建好之後,點選新建的Localizable.strings
檔案,在右邊的檔案檢查器Localize...
新增需要的語言:
2.2.3、剩下的操作和2.1.4、2.1.5、2.1.6的操作是一樣的,最終是這樣子的:
2.2.4、字串國際化和應用名稱國際化寫法是一樣的,左邊是key,右邊是value。舉個button的栗子:
(1)在Localizable.strings(English)
中新增如下程式碼:
//在手機語言是英文時顯示的名稱
"button" = "Button";
(2)在Localizable.strings(Chinese (Simplified))
中新增如下程式碼:
//在手機語言是簡體中文時顯示的名稱
"button" = "按鈕";
(3)在Localizable.strings(Chinese (Traditional))
中新增如下程式碼:
//在手機語言是繁體中文時顯示的名稱
"button" = "按鈕";
2.2.5、萬事俱備,只欠東風,怎麼用呢?開始筆者就提到了要用NSLocalizedString(key, comment)
這個巨集,它是Foundation框架自帶的,根據Key獲取對應的字串,然後賦值給程式碼中的字串。兩個引數。使用的時候第一個引數就填寫國際化等號左邊的,第二引數填寫nil即可。
例:給App中某個button設定title
[btn setTitle:NSLocalizedString(@"button", nil) forState:UIControlStateNormal];
上面一行程式碼就OK了,在設定手機不同語言的時候就會顯示自己設定的value值了。
後記
到這國際化基本就完成了, 以後有時間我會把xib和storyboard的國際化加上。有啥不對的地方歡迎指正,大家共同進步。
相關文章
- iOS語言國際化/本地化-實踐總結iOS
- iOS 國際化 && 本地化iOS
- iOS國際化(本地化)iOS
- iOS擴充-語言國際化iOS
- iOS 多國語言本地化與App內語言切換(Swift)iOSAPPSwift
- iOS國際化(多語言)漫談iOS
- 語言本地化
- Django國際化與本地化指南Django
- MFC 多語言 本地化
- 國際化方案(1)- 多語言
- Android 之 語言 國際化Android
- ios國際化iOS
- react-intl 國際化多語言方案React
- Flask教程第十三章:國際化和本地化Flask
- iOS應用程式多語言&本地化解決方案iOS
- Spring Boot應用的國際化與本地化支援Spring Boot
- Swift iOS : 本地化SwiftiOS
- Android 國際化之多語言適配小記Android
- Blazor 國際化多語言介面 (I18nText )Blazor
- Android國際化(多語言)實現,支援8.0Android
- 鴻蒙Next應用全球化之路:國際化與本地化鴻蒙
- 雲音樂前端國際化多語言探索實踐前端
- iOS 本地化(IB篇)iOS
- iOS 專案本地化iOS
- Java Struts2 本地化/國際化(i18n)淺析Java
- jquery/vue/react前端多語言國際化翻譯方案指南jQueryVueReact前端
- Angular primeNg i18n 國際化多語言處理Angular
- iOS 本地化(非IB篇)iOS
- iOS 多語言化之痛iOS
- 鴻蒙Next應用國際化:語言與區域設定鴻蒙
- cocos2d-x本地化/多語言適配
- star 最多的 Go 語言本地化庫|GitHub 2.8KGoGithub
- Netflix推薦系統(Part Five)-國際化和本地化推薦
- 使用jquery.i18n實現國際化多語言顯示jQuery
- .NET應用系統的國際化-多語言翻譯服務
- Android-國際化(多語言)切換詳解及例項Android
- GPT大語言模型Alpaca-lora本地化部署實踐【大語言模型實踐一】GPT模型
- 國際C語言混亂程式碼大賽C語言