본문 링크 (Original Link)

[절대 반복하지 마세요] 인터페이스 빌더로 하는 현지화

2017.08.29

# • # • #

by Victor Pavlychko, translated by pilgwon

image1

위대한 어플리케이션에는 위대한 현지화가 있어야 합니다. 그리고 사용자들은 가장 사랑하는 앱이 그들에게 그들의 언어로 사용 할 수 있는 옵션이 있는 것을 반깁니다. 심지어 개발 초기 단계 일지라도 인터페이스 현지화를 지원하는데 있어서 개발자들은 변명의 여지가 없습니다. 특히 그것이 하기 쉽다면 더더욱 해야하는 작업입니다.

저는 디자인을 인터페이스 빌더로 하는 것을 선호합니다. 이 게시물에서는 현지화을 하기 위해 어떤 접근법을 사용했는지 공유할 것입니다.

보통, XIB 파일이나 스토리보드를 현지화하려고 시도할 때, Xcode는 기분 좋게 리소스를 복사할 것이고, 당신은 중복된 뷰 레이아웃들에 막힐 것입니다. 웩… 당신이 DRY 방법론을 시도하려고 한다면 그것은 좋은 선택이라고 볼 순 없습니다. 😕

그렇게 하는 것 대신에 저는 인터페이스 빌더의 현지화 용어들에 “@”-접두사를 붙여두고 viewDidLoadawakeFromNib과 같은 메소드에서 각자에 맞는 현지화된 값으로 바꿔주는 것을 제안합니다. 아래가 인터페이스 빌더에서 봤을 때 어떻게 보여질 지에 대한 예제입니다:

image2

저는 현지화 용어에 @ 접두사를 사용하여 필요하다면 다른 실제 값들과 섞일 수 있도록 합니다. 추가적으로, @@ 접두사는 현지화 하지 않아도 되는 문구에 @가 포함되어 있을 경우에 @대신에 사용합니다.

Swift에 자주 있는 일처럼, 먼저 프로토콜부터 시작해봅시다:

다음은 문자열을 현지화하고 속성에 현지화된 값을 적용하는데에 도움을 주는 헬퍼들을 포함하고 있는 익스텐션입니다:

참고: 두번째 현지화 헬퍼는 Swift 4에서는 KeyPath 싱택스 업그레이드가 필요합니다.

지금까지 좋습니다. 이제 몇가지 현지화를 구현해보도록 합시다. 그 과정 자체는 컨테이너가 그들 자식에게 자신을 현지화하라고 하는 작업이기 때문에 명백하게 재귀적입니다:

이를 구현하여 대부분의 어플리케이션에서 필요로 하는 공통 컨트롤에 대한 현지화 지원을 추가해 보겠습니다. 구현 방법은 복잡하지 않습니다:

UIButton의 타이틀을 설정하는 일은 가능한 모든 컨트롤 상태에 대해 현지화를 적용하는 다른 헬퍼를 사용한다는 사실을 알아두세요.

View만이 우리가 인터페이스 빌더에서 설정할 수 있는 오브젝트가 아닙니다. 다음에 나오는 오브젝트들도 설정이 가능하기 때문에 알아두셔야 합니다:

마지막으로, 우리는 현지화 플로우를 어디선가 시작해야 합니다. 저는 주로 다음 이벤트들에 의존합니다:

컨텐츠, 네비게이션 그리고 탭바를 현지화 할 때 쓰는 UIViewController를 위한 헬퍼는 아래와 같습니다:

읽어주셔서 감사합니다! 이젠 당신의 프로젝트에 적용해 볼 시간입니다 😉. 글 내용이 좋았거나 직접 프로젝트에 적용해보셨다면 👏 눌러주는 걸 잊지마세요. (원본 글에 있습니다.)