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)容國際化:
- 準備工作(以添加中文簡體和日語為例):
-
添加中文:
- 添加string File文件,名字是Localizabel.strings譬正。
3.選擇生成的文件宫补,在右邊Localization里面勾選適配的語言
4.編輯各自的strings文件
5.引用:在VC中寫一個Label,用NSLocalizedString(key: String, comment: String)
為其賦值
6.前往手機設置頁面更改手機語言:通用 - 語言與地區(qū)曾我,將想選的語言拖動置頂端:
7.切換語言后粉怕,啟動App,顯示結果為:
二抒巢、應用國際化(配置國際化):
- 做了內(nèi)容國際化的贫贝,可以跳過。沒做過的照著內(nèi)容國際化第一步蛉谜,添加適配語言稚晚。
- 添加InfoPlist.strings文件凤优。
InfoPlist.strings
,名字不能是別的蜈彼,甚至大小寫都不能錯!0呈弧幸逆! -
選擇生成的文件,在右邊Localization里面勾選適配的語言
-
編輯各自的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
-
添加語言:
- 添加InfoPlist.strings文件拼缝。
InfoPlist.strings
娱局,名字不能是別的,甚至大小寫都不能錯_制摺Kテ搿! -
選擇生成的文件猪叙,在右邊Localization里面勾選適配的語言
-
新建兩個LaunchScreen.storyboard娇斩,分別為LaunchScreenCn.storyboard、LaunchScreenEn.storyboard穴翩。并添加兩個Label寫上各自的文言
- 編輯各自的strings文件犬第,添加鍵值對,key為
UILaunchStoryboardName
, 值分別為LaunchScreenEn
芒帕、LaunchScreenCn
-
卸載重新運行