iOS開發(fā) - 多語言適配(應用國際化&內(nèi)容國際化)

    iPhone是支持多種語言系統(tǒng)的。作為開發(fā)者,我們所開發(fā)的應用也注定會走出國門椅您,面向世界。那同一個應用寡键,如果想給不同國家的人使用掀泳,那就必須要做國際化適配。手機設置為中文的就給人家看中文西轩,手機設置為英文的就給人家看英文员舵,還包括變體語言。從前端開發(fā)角度看藕畔,多語言適配分為兩種:應用國際化马僻、內(nèi)容國際化。

應用國際化:系統(tǒng)的一些設置注服,致使我們在開發(fā)階段不能想顯示一個Label一樣韭邓,隨意的顯示文案措近,比如應用名、系統(tǒng)權限提示...女淑,這時候我們就需要做應用國際化瞭郑,使用不同系統(tǒng)語言的用戶,桌面上顯示的名稱不一樣鸭你;調(diào)用權限時屈张,提示的語言也不一樣。
內(nèi)容國際化:這個好理解袱巨,一個“登錄”按鈕阁谆,用漢語的人看見的是“登錄”,用英語的人看見的是“Sign In”...
如果想要讓應用做國際化適配瓣窄,一定要在搭建框架時就做好適配準備5严谩!俺夕!最起碼也得在前期就準備上裳凸。如果前期沒有做相應的準備,應用開發(fā)接近尾聲了劝贸,想起來要適配國際化姨谷,那就為時已晚了:你要把所有要做國際化適配的內(nèi)容拿出來讓人翻譯,翻譯完再替換映九,關鍵這個還有另一端Android的事梦湘,要同步,總之坑會很多件甥!

一捌议、內(nèi)容國際化:

  1. 準備工作(以添加中文簡體和日語為例):
  • 添加中文:

    保持默認勾選,下一步
    如果所選語言列表里面沒有引有,則再更多里面找瓣颅,例如日語
  1. 添加string File文件,名字是Localizabel.strings譬正。
    直接點擊Creat

    3.選擇生成的文件宫补,在右邊Localization里面勾選適配的語言

    4.編輯各自的strings文件

    5.引用:在VC中寫一個Label,用NSLocalizedString(key: String, comment: String)為其賦值

    6.前往手機設置頁面更改手機語言:通用 - 語言與地區(qū)曾我,將想選的語言拖動置頂端:

    7.切換語言后粉怕,啟動App,顯示結果為:

二抒巢、應用國際化(配置國際化):

  1. 做了內(nèi)容國際化的贫贝,可以跳過。沒做過的照著內(nèi)容國際化第一步蛉谜,添加適配語言稚晚。
  2. 添加InfoPlist.strings文件凤优。
    名字為InfoPlist.strings,名字不能是別的蜈彼,甚至大小寫都不能錯!0呈弧幸逆!
  3. 選擇生成的文件,在右邊Localization里面勾選適配的語言
  4. 編輯各自的strings文件
NSBluetoothPeripheralUsageDescription //藍牙
NSCalendarsUsageDescription  //日歷
NSCameraUsageDescription  //相機
NSPhotoLibraryUsageDescription  //相冊
NSContactsUsageDescription  //通訊錄
NSFaceIDUsageDescription   //Face ID
NSLocationAlwaysUsageDescription //定位:始終允許(iOS11之后降級為NSLocationWhenInUseUsageDescription)
NSLocationWhenInUseUsageDescription  //定位:使用期間定位
NSLocationAlwaysAndWhenInUseUsageDescription  //始終允許(iOS11之后新增)
NSMicrophoneUsageDescription  //麥克風
NSSpeechRecognitionUsageDescription  //語音識別

5.引用:在VC中寫一個Button調(diào)用相機

//
//  ViewController.swift
//  NYDemo
//
//  Created by year on 2024/11/23.
//

import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate & UINavigationControllerDelegate {
    /// 測試Label
    lazy var testLabel: UILabel = {
        let label = UILabel(frame: CGRect(x: 20, y: 200, width: UIScreen.main.bounds.size.width - 40, height: 100))
        label.backgroundColor = .white
        label.font = .systemFont(ofSize: 30)
        label.textColor = .black
        label.numberOfLines = 0
        return label
    }()
    /// 相冊
    lazy var photoBtn: UIButton = {
        let button = UIButton(type: .custom)
        button.setTitle(NSLocalizedString("ny_photograph", comment: "拍照"), for: .normal)
        button.frame = CGRect(x: 0, y: 0, width: 200, height: 50)
        button.center = CGPoint(x: UIScreen.main.bounds.size.width / 2, y: UIScreen.main.bounds.size.height / 2)
        button.backgroundColor = .white
        button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
        button.setTitleColor(.black, for: .normal)
        button.addTarget(self, action: #selector(goToPhotoFunc), for: .touchUpInside)
        return button
    }()
    @objc func goToPhotoFunc() {
        let photoPicker = UIImagePickerController()
        photoPicker.delegate = self
        photoPicker.sourceType = .camera
        self.present(photoPicker, animated: true)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.    
        view.addSubview(testLabel)
        testLabel.text = NSLocalizedString("ny_login_string", comment: "登錄")
        view.addSubview(photoBtn)
    }
}

6.前往手機設置頁面更改手機語言:通用 - 語言與地區(qū)暮现,將想選的語言拖動置頂端:

7.切換語言后还绘,啟動App,點擊拍照栖袋,彈出提示框拍顷,顯示結果為:

三、啟動頁國際化:

  • (不可用的)方式一:通過國際化文件LaunchScreen.strings進行適配塘幅。
    官網(wǎng)明確說明了昔案,“啟動頁是靜態(tài)的,任何展示在上面的文字都不能被國際化电媳,所以要避免在啟動頁上包含文本踏揣。”
    那還要給生成了國際化適配的LaunchScreen.strings文件匾乓。感覺有點上當了捞稿。

  • 方式二:創(chuàng)建多個LaunchScreen.storyboard, 通過不同的InfoPlist文件配置不同的LaunchScreen.storyboard

  1. 添加語言:

    保持默認勾選,下一步
  2. 添加InfoPlist.strings文件拼缝。
    名字為InfoPlist.strings娱局,名字不能是別的,甚至大小寫都不能錯_制摺Kテ搿!
  3. 選擇生成的文件猪叙,在右邊Localization里面勾選適配的語言
  4. 新建兩個LaunchScreen.storyboard娇斩,分別為LaunchScreenCn.storyboard、LaunchScreenEn.storyboard穴翩。并添加兩個Label寫上各自的文言
  5. 編輯各自的strings文件犬第,添加鍵值對,key為UILaunchStoryboardName, 值分別為LaunchScreenEn芒帕、LaunchScreenCn
  6. 卸載重新運行
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歉嗓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子背蟆,更是在濱河造成了極大的恐慌鉴分,老刑警劉巖哮幢,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異志珍,居然都是意外死亡橙垢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門伦糯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柜某,“玉大人,你說我怎么就攤上這事敛纲∥够鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵淤翔,是天一觀的道長翰绊。 經(jīng)常有香客問我,道長旁壮,這世上最難降的妖魔是什么监嗜? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮寡具,結果婚禮上秤茅,老公的妹妹穿的比我還像新娘。我一直安慰自己童叠,他們只是感情好框喳,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厦坛,像睡著了一般五垮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杜秸,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天放仗,我揣著相機與錄音,去河邊找鬼撬碟。 笑死诞挨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的呢蛤。 我是一名探鬼主播惶傻,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼其障!你這毒婦竟也來了银室?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜈敢,沒想到半個月后辜荠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡抓狭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年伯病,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片否过。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡狱从,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叠纹,到底是詐尸還是另有隱情,我是刑警寧澤敞葛,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布誉察,位于F島的核電站,受9級特大地震影響惹谐,放射性物質(zhì)發(fā)生泄漏持偏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一氨肌、第九天 我趴在偏房一處隱蔽的房頂上張望鸿秆。 院中可真熱鬧,春花似錦怎囚、人聲如沸卿叽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽考婴。三九已至,卻和暖如春催烘,著一層夾襖步出監(jiān)牢的瞬間沥阱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工伊群, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留考杉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓舰始,卻偏偏與公主長得像崇棠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔽午,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容