ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Localization
    iOS 2021. 3. 25. 16:57

    안녕하세요. 그린입니다!

    이번 포스팅에서는 Localization, 지역화에 대해 알아보겠습니다.😃

    지역화란?

     : 지역화는 현지화한다는 뜻을 가졌습니다. 즉, 해당 언어와 나라 지역에 맞게 앱을 설정해주는걸 뜻합니다.

    ++ 국제화(internationalization)를 I18N or i18n으로, 지역화(localization)를 L10N이나 l10n으로 표기합니다!

    지역화의 전제조건

     : 해당 앱이 지역화가 되려면 여러 국가에 배포되어 국제화 되어있는 앱이라는 조건이 있어야됩니다.

     해당 앱이 한국에서만 사용되는 앱이라면 지역화가 의미 없을겁니다.

    지역화 가능한 요소

     : RTL, LTR (문화권에 따른 읽기/쓰기 방식), 언어, 시간, 날짜, 주소, 화폐단위 및 통화, 이미지 등등...

    지역화와 접근성의 관계

     : 지역화를 함으로 여러 국가와 지역에서 해당 앱에 대한 접근성(accessibility)가 우수해집니다.

     접근성은 애플의 가장 강점인 부분으로 꼭 이부분을 잘 활용하여 구현해놓으면 좋습니다.

    ++ 접근성(accessibility)을 설정하려면 accessibility inspector를 활용하여 여러가지를 구현할 수 있습니다.

    언어 지역화

     1) 지역화 하려는 언어를 프로젝트에 추가

     2) 타겟 선택 (다국어화)

     3) 스토리보드 다국어 처리

     : 스토리보드 그룹에 만들어진 해당 언어 파일에 대해 다국어 처리를 해줌

     -> 스토리보드에서 얹어준 label, button 등등.. 요소에 대한 설정

     -> LaunchScreen은 다국 지역화가 불가능

     -> 이후 추가되는 요소에 대해서는 object ID 값을 확인하여 위의 포맷과 같이 설정해줌

     4) 코드로 다국어 처리

     : 스토리보드에서 다국어화 하지 않고 코드에서 추가한 요소들에 대한 다국어를 처리

     

     -> Strings 파일 신규 생성

     : Localizable.strings 네이밍 생성

     -> Strings 파일 inspector에서 Localization 부분에서 다국어화 할 언어 클릭

     -> 다국어 처리를 지원해줌 (세미콜론은 필수!!!)

     : key-value 형태

     : 파라미터 변수 포함 시 위의 형태처럼 String 문자열은 %@, 숫자는 %d로 표기 (순서대로)

     

     5) ViewController에서 다국화 진행

    test.text = String(format: NSLocalizedString("Test", comment: ""))
    
    // String Extension for Localization
    extension String {
        var localized: String {
        	return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
        }
    }
    text.text = "Test".localized

     -> 위의 코드처럼 문자열을 확장하여 편리하게 사용도 가능!

     

     6) 기기 지역화 설정 및 테스트

    1. App -> Product -> Scheme에서 App Language를 바꿔 빌드 확인

    2. 인앱에서 general(설정) -> language 변경을 통한 확인

    다국어 한번에 번역할 수 있는 꿀팁!

     1) 구글 드라이브 > 스프레드 시트 생성

     2) 수식으로 GOOGLETRANSLATE("번역할 문장", "국가코드", 국가코드 셀 클릭 선택)

     : 국가코드 확인 방법 (https://www.ibabbleon.com/iOS-Language-Codes-ISO-639.html)

     3) 수식 적용 후 활용

     

    --> 출력화면

     

    여기서 든 의문점!!

     : App Language를 지역화하면 해당 언어로 번역하는건 알겠는데 그럼 App Region을 지역화하면 어떤 요소들의 설정이 바뀌는가!?

     -> 해당 의문에 대한 탐구는 아래에서 이어집니다..!

     화폐단위 지역화

    func currency() {
        let locale = Locale.current
        let price = 3000.33 as NSNumber
        let formatter = NumberFormatter()
        
        formatter.numberStyle = .currency
        formatter.currencyCode = locale.currencyCode
        formatter.locale = locale
        
        currencyLabel.text = formatter.string(from: price)
    }

     1) 먼저 Locale을 통해 해당 앱 기기의 지역 정보 GET!!

     2) NumberFormatter의 메서드를 통해 해당 지역의 화폐단위로 변환

     ++ currencyCode: 해당 지역 화폐통화 표기 ($, US 등등..)

    숫자 지역화

    func numbers() {
        let quantity = NumberFormatter.localizedString(from: 5000, number: .decimal)
        
        numberLabel.text = String.localizedStringWithFormat(quantity)
     }

     -> 해당 숫자 NumberFormatter 메서드를 통해 지역화 변환 

    날짜 지역화

    func date() {
        let date = DateFormatter.localizedString(from: Date(), dateStyle: .medium, timeStyle: .short)
        
        dateLabel.text = date
    }

     -> DateFormatter 메서드를 통한 해당 날짜 지역화 변환

     

    --> 출력화면

     

    RTL, LTR 지역화

     1) 뷰 오토레이아웃에서 leading과 trailing을 뷰에 적용

     2) 기기 설정에서 지역 변환 or ...

    view.semanticContentAttribute = .forceRightToLeft

     

     

    [느낀점]

    지역화를 해보니까 너무너무 재밌다...! 알면 알수록 다양하게 매우 많은것들을 지역화를 사용할 수 있다.

    아랍권에서는 RTL 표기방식을 사용하는데 아랍언어가 아닌 다른 언어들을 RTL로 표기해도 Hello가

    olleH이 되진 않는다. 이건 코드 구현의 문제가 아니라 해당 문화에서도 그렇게 사용한다는걸 처음 알았다.

    앱만 뚝딱 개발하는것이 아니라 다양한 사용자의 환경을 생각하고 커스터마이징을 해주는것이 절대적으로 중요하다고 느꼈다.

    좋은 앱이란 나의 관점이 아닌 모든 사용자의 관점에서 편리한 접근성이 되야 한다는걸 배웠다😃

     

    [참고자료]

    야곰 iOS-Startcamp 활동학습

    https://min-i0212.tistory.com/1

    https://zeddios.tistory.com/368

    https://hcn1519.github.io/articles/2017-03/iOS_LanguageSupport

    https://ios-development.tistory.com/294

    https://milyo-codingstories.tistory.com/53

    https://medium.com/swlh/app-localization-in-swift-ios-swift-guide-baa2c2e4298e

    'iOS' 카테고리의 다른 글

    Homebrew & Vapor Toolbox  (0) 2021.03.30
    Core Graphics  (0) 2021.03.29
    User Notification (2)  (0) 2021.03.23
    OAuth  (0) 2021.03.22
    User Notifications  (0) 2021.03.18
Designed by Tistory.