안녕하세요 후르륵짭짭 입니다!
이번에는 앱을 다국어 하는 방법을 알려드리겠습니다.
다국어를 사용하는 방법은 스토리보드를 사용 하는 방법과 String 파일을 만들어서 하는 방법
총 두 가지가 있습니다.
** 기본적인 셋팅 **
일단 InfoPlist 와 Localized 두가지에 대해서
다국어 처리를 할 예정이기 때문에
New File -> string -> Localizable.strings 이랑 InfoPlist.strings 두가지를 만들어 줍니다. (반드시 파일 명을 저렇게 해야합니다!!!)
그리고 나서
이렇게 해서 원하는 언어를 해주고 다 체크를 해줍니다.
그러면 기본적인 셋팅은 끝납니다.
** 스토리 보드를 활용한 다국어 처리 **
이제 가장 기본적인 스토리 보드를 활용해서 다국어 처리 하는 방법을 설명하겠습니다.
스토리 보드에서의 다국어 처리는 기본적으로 셋팅 된 UI 요소에 한해서만 언어처리가 되는 겁니다.
Main.storyboard를 예를 들면 Base가 있습니다. 이는 기본적인 것이죠. 아마도 영어로 되어 있을 겁니다.
따라서 영어 권일 때는 Base의 Main 스토리 보드로 나옵니다.
그리고 그 밑에 설정한 언어의 .String 파일이 있습니다.
그것을 누르면
이렇게 되어 있는데 이 부분을
이렇게 수정해주면
요렇게 바뀐 것을 확인 할 수 있습니다. (원본은 hururuek-chapchap.tistory.com/59 여기서 확인 할 수 있습니다.)
간단하죠??? ㅎㅎㅎ
** String 파일로 다국어 처리 하기 **
우리가 만든 Localizable.strings 으로 들어가서 Insepector에 show the file insepector를 누르면
localizaion 이라는게 있는데 그거 누르고 아무 언어나 설정해주세요!!! (어차피 추후 수정 해줄 겁니다!!)
그러면 파일이 나오는데 두가지 모두 선택해주세요!!!
이렇게 선택을 해주셨으면 코드로 가서 봅니다!
아무것도 안 적혀 있지만 이 코드는 "Key" = "Value" 로 구성 되어 있습니다.
따라서 영어에
//Localizable.strings (English)
"Hururuek" = "Hururuek";
"ChapChap" = "ChapChap";
그리고 한국어에 이렇게 적어주세요!!!
//Localizable.strings (Korea)
"Hururuek" = "후르륵";
"ChapChap" = "짭짭";
그리고 나서 코드로 돌아가서
if value % 2 == 0 {
info = InfoToSave(userName: "Hururuek", switchValue: true)
self.nameLabel.text = NSLocalizedString("Hururuek", comment: "")
self.defaultswitch.isOn = true
}
else{
info = InfoToSave(userName: "ChapChap", switchValue: false)
self.nameLabel.text = NSLocalizedString("ChapChap", comment: "")
self.defaultswitch.isOn = false
}
NSLocalizedString을 사용해서 다국어 처리가 될 겁니다!! (관련 코드는 hururuek-chapchap.tistory.com/59 )
그런데!!!
이렇게 매번 NSLocalizedString("Key", comment : "")를 해주면 귀찮기 때문에
extension String {
var localized : String {
return NSLocalizedString(self, comment: "")
}
}
이런식으로 extension으로 해주시면
if value % 2 == 0 {
info = InfoToSave(userName: "Hururuek", switchValue: true)
self.nameLabel.text = "Hururuek".localized //NSLocalizedString("Hururuek", comment: "")
self.defaultswitch.isOn = true
}
else{
info = InfoToSave(userName: "ChapChap", switchValue: false)
self.nameLabel.text = "ChapChap".localized //NSLocalizedString("ChapChap", comment: "")
self.defaultswitch.isOn = false
}
이렇게 간단하게 해결 할 수 있습니다!!!
만약에!!!
변수를 사용해서 다국어를 사용하고 싶을 경우에는 %@ 를 사용해주시면 됩니다!!
//Localizable.strings (Korea)
"Hururuek" = "후르륵";
"ChapChap" = "짭짭";
"sliderValue" = "숫자는 %@";
//Localizable.strings (English)
"Hururuek" = "Hururuek";
"ChapChap" = "ChapChap";
"sliderValue" = "Number is %@";
이렇게 해주고 나서 코드에서 String(format : 문자열 , 변수)를 해주시면 됩니다.
let value = Int(ceil( sender.value ))
amountLabel.text = String(format: "sliderValue".localized, String(value))
UserDefaults.standard.set(sender.value, forKey: targetSliderValue)
이렇게 하면 한국어 / 영어 보두 설정 값에 맞게 바뀌는 것을 확인 할 수 있습니다.
** InfoPlist를 다국어 해보자 **
이렇게 반드시 Bundle display name을 InfoPlist에 추가 해준다.
그런 다음 "Source Code 모드"로 보기 해서
<key>CFBundleDisplayName</key>
<string>TestApp</string>
이렇게 되어 있는 것을 찾자 ㅎㅎㅎㅎ
그리고 나서 InfoPlist.string 파일로 들어가서 위에서 했던 거 처럼 수정 해준다.
//InfoPlist.string (English)
"CFBundleDisplayName" = "TestApp";
//InfoPlist.string (Korea)
"CFBundleDisplayName" = "테스트 앱";
그러면 결과가!!!
이렇게 잘 나오는 것을 확인 할 수 있다!!!
** 시뮬레이터 언어 기본 설정 하기 **
이렇게 Product -> Scheme -> Edit Scheme -> Application Language 를 변경해주면 됩니다!!
많은 내용을 담는다고 길어졌네요 ㅎㅎㅎㅎㅎ
나중에 더욱 배워가면 추가 해보도록 하겠습니다!!!
감사합니다
모두 즐코코 하세요!!
min-i0212.tistory.com/1?category=759175
'Xcode > IOS' 카테고리의 다른 글
IOS) PageViewController로 화면전환을 만들어보자! (1) | 2020.08.16 |
---|---|
IOS) UIImagePickerController에 대해서 알아보자 (0) | 2020.08.13 |
IOS) UserDefault로 간단한 내용을 저장하자! (0) | 2020.08.11 |
IOS) TextField를 꾸며보자 (@IBDesignable) (0) | 2020.08.09 |
IOS) TableView의 Swipe를 배워보자! (0) | 2020.07.30 |
댓글