본문 바로가기

WWDC

WWDC17 Localizing with Xcode 9 (1)

WWDC17 Localizing with Xcode 9

본 세션에서 다루는 주제는 크게 3가지

  • 코드를 어떻게 로컬라이징 프로세스를 통해서 세계화에 준비되게 작성할 수 있는지에 대해 알아봅니다.
  • Xcode 9에 추가된 새로운 기능 소개
  • 모든 언어에서 어떻게 앱이 작동하고 보여지는지에 대한 사례들과 테스트에 대해서 이야기

internationalization

국제화는 새 언어를 추가할 때마다 코드를 변경하지 않고도 다양한 언어, 지역에 적용할 수 있도록 소프트웨어를 설계하는 프로세스입니다.

 

요점은 앱이 실행되는 언어는 중요하지 않고, 짧은 텍스트나 긴 텍스트가 있거나 읽는 방향이 다른 경우, 앱은 이를 동적으로 적응할 수 있어야 합니다.

- Strings Management

국제화의 첫 단계는 문자열을 관리하는 것입니다.


 스토리보드나 zip파일의 string들은 기본적으로 현지화가 가능하기 때문에 이를 사용자에게 어떻게 보여줘야 할까에 대한 고민을 하지 않아도 됩니다. 하지만 코드에 선언되어 있는 에러 메시지나 알림 들을 현지화를 통해 사용자에게 보여줘야 하는 경우가 있습니다.
 이때는 NSLocalizedString으로 해당 문자열을 래핑 해주거나 LocalizedStringWithFormat을 사용하여 현지화된 형식의 문자열을 가져올 수 있습니다.

 


예제 코드를 보면 Label의 text 값이 하드코딩 되어 있으며 지역화가 가능하지 않습니다. 따라서 우리는 지역화를 하기 위해서 NSLocalizedString을 2개의 인자 값을 통해 사용했습니다. 2개의 인자 값은 String값과 주석입니다. 주석을 통해서 번역가들이 그들의 언어로 번역을 하기 때문에 여기서 주석은 정말 중요하다고 할 수 있습니다.

대부분의 경우는 NSLocalizedString 만으로도 사용 가능하지만, 프레임워크나 공유된 컴포넌트에서 작업할 때에는 table이름을 지정하여 어떤 table에서 어떤 string값을 가져올지 지정해 줄 수 있습니다.

또한 앞서 언급 했듯이 NSLocalizedString을 localizedStringWithFormat과 함께 combine 할 수 있습니다.

 

 

위 코드는 불어의 현지화 프로젝트에서 가져온 현지화 가능한 문자열 파일의 예시중 하나이며 이 파일에는 현지화 가능한 문자열이 모두 포함되어 있습니다. 여기 주석은 번역가에게 제공되는 중요한 정보입니다 .

 

그리고 Objective Senior App을 사용한다면 정적 분석기를 실행하여 현지화에 대한 문제를 코드에서 찾을 수 있습니다. 문자열을 현지화하는 것을 까먹었거나, 현지화 가능한 문자열에 주석을 추가하는 것을 잊은 경우가 여기에 해당합니다.

 

위처럼 문제가 무엇인지 알려주는 경고를 확인할 수 있고 이를 통해서 바로 수정 또한 가능합니다. 이 부분에 더 자세히 알고 싶다면 Thread Sanitizer and Static Analysis를 참고하면 되겠습니다. (해당 영상은 현재 내려간 상태입니다.)

- Formatter

Localization과 관련하여 앱이 잘 처리해야 하는 또 다른 사항은 날짜, 시간, 숫자 등이 있습니다.
예를 들어 미국의 경우 12시간의 표시 형식을 기준으로 하고 있지만, 프랑스의 경우는 24시간의 표시 형식을 기준으로 하고 있습니다.

또한 데이터 포맷과 영역(region) 복잡성을 해결할 수 있는 다양한 포맷터를 제공하고 있습니다. 하지만 포맷터의 작동 방식에 대한 예를 들어 날짜 포맷터를 살펴보겠습니다.

예시를 보기 전 우리는 앱에 전체 날짜 형식을 표시하고 싶다고 가정하겠습니다.

 

이 포맷터에는 다양한 스타일이 있지만 전체 날짜 형식으로 표시하기로 하였기 때문에 포맷터의 날짜 스타일을 .full 로 설정해주면 됩니다. 이렇게 특정 지역이나 국가의 특정한 날짜 형식을 문자열로 설정하는 대신 날짜 스타일을 사용할 수 있습니다. 이를 통해서 전 세계 날짜 형식이 제대로 적용되었는지 확인해보겠습니다.

 

예를 들면 위 사진처럼 미국과 프랑스의 날짜 형식에는 차이가 있습니다. 프랑스 날짜에는 쉼표가 없고 월은 대문자로 표시되지 않으며 날짜는 월의 앞에 옵니다.

 

날짜 포맷터 외에도 Foundation에서 사용할 수 있는 여러 가지 포맷터들이 있습니다. 포맷터들의 목록은 아래와 같으며, 더 자세한 사항은 두 가지 WWDC 영상을 확인하면 되겠습니다.

- User Interface

 

마지막으로, 모든 언어가 UI에 유연하고 아름답게 보여지는지 확인해봅니다. base Internationalization과 Auto Layout을 사용하면 간단하게 확인할 수 있습니다.

 

base Internationalization에 대해서 잠깐 이야기를 해봅시다. 프로젝트에서 활성화함으로써 Xcode가 Destructor(소멸자)에 대한 프로젝트를 수정하고 UI와 String들을 구분합니다. 즉, zip 파일이나 스토리보드 파일과 같은 UI와 관련된 모든 파일이 base에 저장됩니다. 스토리 보드로부터 String값을 가져오거나 String값을 NSLocalizedString을 통해 래핑 하는 동안, 앱에서 새로운 언어로 생성할 때마다 UI를 복제하는 대신 UI를 하나만 가지도록 특정 언어 폴더에 저장합니다. 이 base Internationalization은 Xcode 5 이후 기본적으로 활성화되어있습니다.

 

AutoLayout은 다양한 화면 크기를 지원하는데 이미 사용하고 있지만, Locailzation을 위해 사용하는 중요한 기술이기도 합니다. Xcode 9에서는 새로운 인터페이스 빌더 Localization warning을 도입하여 Localization에 대한 제약 조건을 검증합니다. 즉, UI 및 스토리보드 파일 또는 zip에서 작업할 때 Locailazation에 대한 제역 조건을 설정하였을 때 Localization에 적합하지 않은 경우 위 사진처럼 경고와 수정 방법에 대한 제안을 받게 됩니다.

 

Xcode 9에는 라틴문자열에 대한 악센트, 고정 문자열, 오른쪽부터 왼쪽으로 읽는 언어에 대한 새로운 옵션이 있습니다.

Demo

prepare your app for localization

Localizing with Xcode 9 - WWDC17 - Videos - Apple Developer

 

Localizing with Xcode 9 - WWDC17 - Videos - Apple Developer

Build world-ready apps using Xcode by following some simple steps to manage strings and assets, and display your user interface. Take...

developer.apple.com

참고자료

  1. WWDC 2017 Localizing with Xcode 9
 

Localizing with Xcode 9 - WWDC17 - Videos - Apple Developer

Build world-ready apps using Xcode by following some simple steps to manage strings and assets, and display your user interface. Take...

developer.apple.com

 

'WWDC' 카테고리의 다른 글

WWDC17 Localizing with Xcode 9 (2)  (0) 2022.02.26