어떻게 앱이 여러 언어에 대응할 수 있을까?
어떤 외계인이 앱을 만든다.
이 외계인이 쓰는 언어로 🐍은 △▭O😛이다.
한국인과 영국인이 이 앱을 잘 쓸 수 있도록 언어를 제공하려고 한다.
그래서 외계어 ↔ 한국어, 외계어 ↔ 영어 이런식으로 짝을 지어서 번역을 해주려고 한다. 컴퓨터는 일머리가 없기 때문에 내가 굳이 파일로 만들어서 짝을 알려주어야 한다.
자! 이렇게 파일을 두 개 만들었다. A 파일에는 외계어 ↔ 한국어가 짝지어져 있고, B 파일에는 외계어 ↔ 영어가 짝지어져있다.
이제 앞으로 외계인이 만든 앱을 사용하는 사용자의 기기언어를 받아서 A파일에 있는 언어를 쓸 지, B 파일에 있는 언어를 쓸 지만 결정하면 되는 것이다.
파일을 만들고 적용하는 방법은 다른 블로그에도 많으니 해당 글을 참고하시길!
파일을 잘 만들어 두었다면 이제 어떤 라벨이나, 버튼이나, 좌우간 텍스트가 들어가는 모든 곳에 내가 원하는 번역을 넣을 수 있게 된다.
예를 들어, 어떤 화면에 글씨를 띄울 수 있는 칸이 있다. 거기에 외계인은 🙋🏻♂️💖🍑 라는 의미를 가진 영어, 한국어를 보여주고자 한다. 그러면 A파일에는 🙋🏻♂️💖🍑="난 궁둥이가 좋아!" B파일에는 🙋🏻♂️💖🍑 = "I Like Butt" 을 미리 넣어 둔다.
앱을 불러올 때, 🙋🏻♂️💖🍑이 어떤 텍스트로 보여져야 할 지는 다음과 같은 코드로 작성해 둘 수 있다.
import UIKit
class HomeViewController: UIViewController {
@IBOutlet var buttTestLabel: UILabel! //🙋🏻♂️💖🍑를 띄울 칸
override func viewDidLoad() {
super.viewDidLoad()
buttTestLabel.text = string(format: NSLocalizedString("🙋🏻♂️💖🍑", comment: "인간을 위한 해석이 들어감")) //NSLocalizedString은 미리 만들어 둔 파일 A, B 사이를 자유자재로 돌아다니면서 기기언어에 맞는 파일에서 "🙋🏻♂️💖🍑"에 맞는 짝을 찾아서 알려줄 것이다. 코멘트는 걍 코멘트다. 없어도 그만이다.
)
}
그런데 이게 편하지가 않다. string(format: NSLocalizedString("🙋🏻♂️💖🍑", comment: "인간을 위한 해석이 들어감")) 이게 총 몇자인지는 모르겠지만.. 길고 불편하고.. 그렇다.
그래서 보통은 String Extension으로 조금 더 쉽게 만든다. 원래 String 이라는 녀석이 가지고 있는 능력치에 하나를 더 더해주자.
import Foundation
extension String {
var localized: String {
return NSLocalizedString(self, comment: "")
}
}
위 extension으로 말할 것 같으면 앞으로 모든 "String 형태로 된 무언가".localized()를 해 주면 혹시 이 String 형태로 된 무언가에 짝 지어진 번역된 값이 있는지 없는지 봐주는 것이다. 위에서 언급한 NSLocalizedString을 다 쓰는게 불편해서 만드는 것이다. 그러니 기능도 동일하다. 원래 파라미터에 찾고싶은 스트링을 꼭 넣어줬어야 했는데, 그냥 "String 형태로 된 무언가"가 자동으로 파라미터로 들어가게 끔 만든 것에 불과하다.
import UIKit
class HomeViewController: UIViewController {
@IBOutlet var buttTestLabel: UILabel! //🙋🏻♂️💖🍑를 띄울 칸
override func viewDidLoad() {
super.viewDidLoad()
buttTestLabel.text = "🙋🏻♂️💖🍑".localized()
)
}
익스텐션을 만들어 주고 나니 이렇게 간단하게 표현이 된다. 깔끔하고 쓰기도 편해졌다.
언어설정을 바꿀때마다 잘 적용이 된다면 성공이다! 외계인은 앱을 성공적으로 출시했다! 야호~~~
1. 배운 내용을 정리한 TIL 레포지토리
2. RxSwift 해외 자료를 번역, 학습하는 RxSwift 레포지토리
앞으로 꾸준히 업데이트 할 예정이니 많은 star 바랍니다! ㅎㅎ
[Swift] 스위프트의 집단 자료형에 대해서 알아보자! - 배열과 집합 (0) | 2022.05.31 |
---|---|
[Swift] 고차함수 map, filter, reduce를 완전 쉽게 알아보자 (2) | 2022.05.17 |
[Swift] Dependency Injection 의존성 주입 비유로 쉽게 이해하기 (3) | 2022.05.11 |
[Swift] sort ()와 sorted()의 차이점은 무엇일까? (2) | 2022.05.09 |
[iOS/Swift] Protocol 프로토콜을 재미있게 이해해보자 (2) | 2022.02.19 |