Localization 지역화

Eddy📱·2022년 8월 2일
0

Swift

목록 보기
5/11
post-thumbnail

Localization는 여러 언어와 지역을 지원하는 앱을 만드는 것이다.

이것이 왜 필요할까?

예를 들어 아랍어를 들 수 있다. 아랍어는 다른 언어와 다르게 오른쪽에서 왼쪽으로 읽는다.
그래서 만약 Localization으로 각 언어에 대응하여 지원하지 않는다면 아랍어를 사용하는 사람들은 이해하지 못할 수 있다.

그래서 Localization를 통해 여러나라의 사람들이 앱을 접근하고 사용할 수 있도록 만드는 것이다.

WWDC를 보고 내용을 좀 더 심도있게 보도록 하자.

70%이상이 애플 유저가 미국 밖에 있다. 그래서 영어로만 되어있다면 이해하지 못하는 부분이 많을 수 있다.
그래서 이를 지원하기 위해 애플은 아이폰, 맥북에서 언어를 설정할 수 있게 만들었다.

아이폰에서는 아래와 같이 설정할 수 있다.

맥에서도 동일하게 설정해줄 수 있다.

application를 통해서 내용은 하나의 언어로 구성되어있다.
그래서 아래의 Locale, Bundle API이나 server-side 자원을 통해서 선호 언어를 선택할 수 있다.

Locale APIs 는 선호언어를 아이폰에서 설정하는데 그것을 해줄 수 있다. 이렇게 하면 언어를 바꾸며 설정을 해줘야하는 번거로움이 존재한다.

하지만 Bundle API를 사용하게 되면 현재 실행하는 application 언어에 따라 언어를 얻을 수 있다.

WWDC에서 데모를 보여주고 있는데 영어로 되어있어서 영어를 사용하는 사람외에는 이해하지 못할 수도 있다.

이를 해결하기 위해서 선호언어를 바꾸게되면 일부 적용된 부분만 바꾼 언어로 사용할 수 있어서 문제가된다.

그래서 이를 해결하기 위해서 코드로 아까 말했던 현재 사용하는 언어 얻게 만들 수 있다.

availableServerLocalizations는 이제 가능한 언어를 서버에 요청해서 가져오게 된다.

그다음에 Bundle에 이 언어들을 설정하게 되면 원하는 조건에 따른 언어를 가져오게 만든다음 이를 활용해서 언어를 바꿀 수 있다.

이렇게 설정하게된다면 아래처럼 불어로 바뀌게 된다!

server-side API에서 번들 API를 사용해서 localization를 할 수 있다. 그러면 원하는 부분에 특정지어서 적용할 수 있게 만든다.

2번째 세션에서는 Asset를 활용해서 지역화를 적용하고 export, import하는 것을 알려주고 있다.

번들 Settings를 통해 지역화를 export, import 해줄 수 있다.

Asset를 활용해서 원하는 지역화에 대한 이미지를 넣어서 대응해줄 수 있다.

이렇게 여러 언어에 대응할 수 있게 Asset에 넣어준다음 활용할 수 있다.

이런 방식으로 Asset를 사용하여 대응가능한 기기와 기능을 알려주고있다.

에셋에서 이미지를 아무거나 누른다음 오른쪽 inspector 마지막 아이콘을 누르면 아래처럼 Localization이 있는 것을 볼 수 있다.

여기에서 현재에는 English만 있는데 다른 언어도 추가되어있다면 같이 나오게된다.

SF Symbol는 모두 localization이 되어있으므로 각 언어에 대응되어서 나오게된다.

만약 커스텀한 Symbol이 있다면 모두 localization이 되어있지 않으므로 일일이 해주어야한다.

아까 보았던 부분을 이어서 데모로 보여주고 있다.

이미지에 대해 로컬라이징을 하는법을 알려주고 있는데 위에서 설명한 것처럼 에셋에서 이미지를 누르고 Localization를 눌러서 원하는 언어로 바꾸게 되면 된다.

그러면 만약 Swedish를 누르게되면 이 칸에 새로 생기고 여기에서 Swedish 이미지를 넣게 되면 지원 가능하게 해준다.

이제 실제 실습을 통해 어떻게 지역화를 적용하는지 해보려고 한다.

Localizing Your App에서 어떻게 앱을 지역화하는지 보여준다.

App의 사용자 인터페이스와 코드를 국제화(internationalizing)한 후에는 현지화(localization) 프로세스를 시작하라고 한다.
그리고 사용자 지향 텍스트를 포함하는 모든 개발 언어 문자열 파일을 표준 XML지역화 교환 파일 형식(XLIFF)으로 내보내고 있다.
그다음 XLIFF파일을 여러 언어로 번역하려면 현지화를 관리하는 팀에 제출해야한다. XLIFF변환을 프로젝트로 가져와 추가 한 각 언어로 App을 테스트해서 제대로 되었는지 확인할 수 있다.

프로젝트에서 먼저 localization 할수 있는 부분을 만들어 두었다.

초기 세팅

여기에서 글씨들을 localization를 적용해서 보여주는 작업을 해볼 것이다.

위에서 설명했듯이 문자열 파일이 필요하므로 Strings File 를 검색해서 폴더를 만들어주어야한다.

그리고 네이밍은 Localizable.strings으로 해준다!

이제 프로젝트 파일에서 Pooject - info에 가게되면 Localizations가 있는 것을 볼 수 있다.

이곳에서 +버튼을 누르면 사용하고 싶은 언어를 선택할 수 있다

이렇게 선택할 수 있는데, 현재에는 한국어만 필요해서 Korean를 추가해주면 된다.

추가할 때 Localizable.strings도 눌러서 추가해주면 된다.

그러면 이제 파일이 만들어지는데 이곳에서 localization를 적용해서 사용할 수 있다.

이제 실제로 프로젝트에서 실습을 해볼 것인데 버튼을 누르라는 말과 자신을 누르라는 표현을 영어로 해서 label, button를 만들어준다.

그에 대한 코드는 아래에 있다

// ViewController.swift

    private func addBottomLabel() {
        
    let bottomLabel = UILabel()
    bottomLabel.frame = CGRect(x: 20, y: view.bounds.size.height - 150, width: view.bounds.size.width - 40, height: 50)
    
    bottomLabel.text = "Touch the button below!"
    
    bottomLabel.font = UIFont.systemFont(ofSize: 20)
    
    bottomLabel.textColor = .red
    
    bottomLabel.textAlignment = .center
    
    view.addSubview(bottomLabel)
}

private func addButton() {
    // Do any additional setup after loading the view.
    
    let button = UIButton(type: .system)
    button.frame = CGRect(x: 20, y: view.bounds.size.height - 80, width: view.bounds.size.width - 40, height: 50)
    
    button.setTitle("Touch Me!", for: .normal)
    
    button.titleLabel?.font = UIFont.systemFont(ofSize: 20)
    
    button.setTitleColor(.blue, for: .normal)
    
    view.addSubview(button)
}

간단하게 Label, Button를 만든 다음 여기에 있는 문구를 localization 할 것이다.

이제 Localizable.strings 폴더로 가서 위의 문구를 처리해줘야한다.

한국어 전용을 만들었으니 그곳 파일에서 아래와 같이 추가해주면 된다.

"Touch the button below!" = "아래 버튼 눌러주세요";
"Touch Me!" = "눌러주세요";

끝에 ';' 를 꼭 넣어줘야함을 잊으면 안된다!
이곳에서 원하는 문구로 바꿀 수 있도록 수정해주면 된다.

그러나 단순히 이렇게 해서 바뀌면 편하겠지만 실제로 그렇지 않다.

그래서 extension으로 String를 만들어서 NSLocalizedString를 활용해서 로컬라이징된 메서드를 반환하도록 구현할 것이다.

extension String {
    func localized(comment: String = "") -> String {
        return NSLocalizedString(self, comment: comment)
    }
}

그래서 위의 코드에서 바꾸어야할 부분은 저 메서드를 호출할 곳만 있다

bottomLabel.text = "Touch the button below!".localized()

button.setTitle("Touch Me!".localized(), for: .normal)

이렇게 해주면 원하는 방식으로 바꾸게 된다.

시뮬레이터 내의 설정에서 지역을 대한민국으로 바꾸면 원하는 방식으로 바꿀 수 있다.

영어 버전한국어 버전

그런데, 저는 이곳에서 버튼과 라벨만 처리해주었는데 다른 곳도 되어있자나요?

이는 스토리보드에서 Korean를 만들어서 해주었습니다!

스토리보드에도 아까 파일을 추가할 때 선택해주었기에 동일하게 생겨났을 것이다.

이곳에서 아래의 코드를 통해 지역화를 해줄 수 있다.

"jKZ-YX-Wfs.text" = "3천달러";

"kJK-lo-ifp.text" = "강아지 세계로 오세요!";

"tch-Km-eL3.text" = "2025년 3월 4일";

그리고 현재 시간을 시점으로 DateFormatter를 해주고 싶다면 아래의 코드를 ViewController에 작성하면 원하는 형식으로 만들어 줄 수 있다.

let dateFormatter = DateFormatter()
        let dateStyle: DateFormatter.Style = .medium
        dateFormatter.locale = Locale(identifier: (NSLocale.current.identifier))
        dateFormatter.dateStyle = dateStyle
        dateFormatter.timeStyle = .none
        dateTimeLabel.text = dateFormatter.string(from: Date())

이렇게 모두 해준다면 원하는 형식과 지역화에 맞는 문구가 나오는 것을 확인해볼 수 있다.

Localization는 앱을 단순히 한국사람만을 위해서가 아닌 전세계를 타겟으로할 때 사용하면 좋을 것 같다.

애플은 이런 디테일에 진심인거 같아서 좋다!

참고 사이트

https://developer.apple.com/documentation/xcode/localization

https://developer.apple.com/videos/play/wwdc2019/403/

profile
Make a better world

0개의 댓글