관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] Localization, Localizable, 지역화 테스트 방법 (Programmtically, Storyboard, xib) 본문

iOS 응용 (swift)

[iOS - swift] Localization, Localizable, 지역화 테스트 방법 (Programmtically, Storyboard, xib)

jake-kim 2021. 1. 11. 22:00

현재 지역 확인 - Locale

  • 아래와 같이 작성하여 regionCode를 획득
Locale.current // en_KR (current)
Locale.current.regionCode // Optional("KR")
  • code 리스트
Locale.isoRegionCodes

로컬 = ["AC", "AD", ... 중략 ..., "ZM", "ZW"]
  • 앱 점유율 상 높은 Japnan ~ China까지 코드를 알아보면,

점유율 순위

public enum CountryType: String {
    case korea          = "KO"
    case japan          = "JP"
    case USA            = "USA"
    case UnitedKingdom  = "GB"
    case Germany        = "DE"
    case Chnia          = "CN"
}

// 문자열 -> enum타입으로 매핑 방법
let countryType = CountryType.init(rawValue: country)

테스트를 위해 현재 지역을 다른 나라로 설정 방법

  • 아래 클릭

  • Edit Scheme

  • Run -> Options -> App Region 선택

  • App Region 변경 후 확인

US라고 뜨는 것 확인

코드로 문자열을 입력하는 경우 Localization 설정 방법

* 원리: key-value 쌍으로 미리 문자열에 대해서 각 나라별로 지정 -> 문자열을 입력할 때 NSLocalizedString객체 값으로 입력

  • key - value 쌍으로 만들기: Strings File 추가

  • 이름은 "Localizable.strings"로 설정
  • "Localize ..."버튼 클릭

  • Target -> Localizations에서 "+"버튼 클릭 -> 지역화를 하고싶은 나라 추가

코드에만 적용할것이므로 Main, LaunchScrenn은 제외하여 Finish

  • Localizable파일 확인: Korean파일을 만들어 놓고 공백으로 둘 것 - English에 key-value작성해 두고 Korean파일을 만들어 놓지 않으면 영어로 작성되는점 유의
    base가 영어이므로 아래처럼 english에 해당하는 부분은 따로 추가하지 않아도 가능

 

  • 각각 파일에 해당하는 언어의 key - value형식으로 작성 (작성 후 세미콜론을 끝내 적는 것 잊지 말것)  

  • 문자열을 입력하는 곳에서 String객체가 아닌 NSLocalizedString 객체를 사용하면 지역화 완료
// alertLabel.text = "\(title) 접근 권한이 필요합니다" // 일반적인 String
alertLabel.text = NSLocalizedString("\(title) 접근 권한이 필요합니다", comment: "") // 지역화 객체

지역화 적용 되기 전 모습
지역화 적용 된 모습

  • String의 extension을 이용하여 NSLocalizedString객체 쉽게 사용하는 방법
public extension String {
    func localized(bundle: Bundle = .main, tableName: String = "Localizable") -> String {
        return NSLocalizedString(self, tableName: tableName, value: "\(self)", comment: "")
    }
}

// 사용
alertLabel.text = "\(title) 접근 권한이 필요합니다".localized()

Storyboard, xib 파일에서의 Localization

  • 지역화를 하고싶은 파일 .storyboard 클릭 -> Localize 클릭

  • 코드로 localization하는 부분에서 추가한 지역들의 리스트 노출 확인 -> Localization 하고싶은 지역 클릭

  • Localization 옵션에 체크박스로 표시되는데 원하는 지역 모두 선택

Base: UI가 있는 파일, 나머지는 텍스트형태로만 존재 (Base를 체크하는게 불필요한 UI생성을 막으므로 좋은방법)

  • .storyboard파일 하위에 생겨난 것을 확인

  • 한국 Localization적용: storyboard는 객체의 키 = "값"으로 자동으로 설정되어 있으며, "값"부분에 채워넣으면 완료

  • 파일이 .strings가 아닌 ".storyboard"로 나오는 경우 -> 지역마다 storyboard를 커스텀할 수 있음

시스템팝업을 띄우는 info.plist관련 지역화 방법

  • infoPlist.strings 파일을 만든 후 아래 Localize 클릭 

  • 시스템 팝업에 필요한 "NS-"로 시작하는 접근권한 입력

- 영어버전

/* 
  InfoPlist.strings
  MemoryCam

  Created by 김종권 on 2021/01/12.
  
*/

"NSAppleMusicUsageDescription" = "Uses for music";

"NSCameraUsageDescription" = "Uses the camera for taking profile picture and image detection";

"NSLocationAlwaysAndWhenInUseUsageDescription" = "Uses location for getting user current address";

"NSLocationAlwaysUsageDescription" = "Uses location for getting user current address";

"NSLocationUsageDescription" = "Uses location for getting user current address";

"NSLocationWhenInUseUsageDescription" = "Uses location for getting user current address";

"NSPhotoLibraryUsageDescription" = "Uses photo for taking profile picture and image detection";

- 한글

/* 
  InfoPlist.strings
  MemoryCam

  Created by 김종권 on 2021/01/12.
  
*/

"NSAppleMusicUsageDescription" = "음악 접근 권한이 필요합니다";

"NSCameraUsageDescription" = "카메라 접근 권한이 필요합니다";

... 생략 ...

다른 나라 언어로 한번에 번역하는 팁

  • 국가코드를 아래와 같이 작성 (애플에서 쓰는 국가코드 참고 사이트)
    GOOGLETRANSLATE("번역할 문장", "ko", 첫 번째 셀 클릭하여 선택)

  • 파란색 오른쪽 하단 네모를 아래까지 드래그

  • 응용

  • 복사 후 오른쪽마우스 클릭 -> 값만 붙여넣기 (cmd + shift + V)

 

* 애플 국가코드: www.ibabbleon.com/iOS-Language-Codes-ISO-639.html

* 코드로 Localization 하는 방법 내용 출처: developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html

Comments