글로벌 앱을 위한 Localization: 번역은 시작일뿐
by chanju · 76 things on NewTwos
- 사전 지식
- 앱을 특정 언어/문화에 맞게 조정하는 작업
- 텍스트 번역은 빙산의 일각
- Localization은 왜 필요할까?
- 글로벌 시장으로 확장
- 접근성 및 UX 향상
- 경쟁력 강화
- 관련 개념
- Locale
- Date Formatting
- LanguageCode_RegionCode
- 앱이 미지원하는 언어인 경우
- 기본값(en)이 나오기 때문에 조심
- TimeZone
- TimeZone은 Region과 별개
- Calendar
- 그레고리안 이외에도 많음
- 날짜 비교 개념이 중요함
- 일상 생활의 기준은 그레고리안
- 캘린더 앱은 그외에도 고려해야 함
- Region을 바꾸게 되면 온도 단위나 화폐 단위에 영향
- 단순히 Region/Language 만으로는 대체 불가
- WWDC 22/23 Recap
- String(localized:)를 권장
- 컴파일러가 문자열 자동 추출
- Build setting에서 설정 가능
- SwiftUI에서는 LocalizedStringKey 타입 사용
- SwiftUI에서는 프리뷰에서 로컬라이즈 설정 가능해서 테스트 편리
- String Catalog
- 문자열을 자동으로 추출하고
- 변경되었을 때 자동으로 반영
- WWDC23 세션 참고
- Dynamic lineHeight
- 언어별로 적절한 lineHeight이 다름
- lineHeight에 고정값을 넣으면 안됨
- 언어별 고려사항
- Localization 지원 기능이 많음
- 그만큼 다룰 게 많고 어렵다?
- 같은 단어가 여러 의미를 가질 때
- 키를 분리하고
- 코멘트를 활용
- Number Format 차이
- 숫자를 다룰 때
- NumberFormatter를 사용
- 문법적으로 단어를 수나 성별을 고려해야 함
- Automatic Grammer Agreement API 사용
- Term of Address로 아이폰 사용자의 언어 성별을 선택할 수 있고,
- 앱에서 이를 사용해서 문법을 맞게 처리할 수 있음
- Right to Left (RTL)
- 텍스트 방향, UI 배치 달라짐
- 이미지는 SF Symbol 참고하면 됨
- 글로벌 앱 사례
- 아이디어스는 국내 앱에서 올해 초에 글로벌 앱으로 확장
- 영어 버전부터 작업
- 전체 Locale에 적용 가능한 것부터
- 임팩트가 크기 때문에
- Region 데이터 관리
- 앱에서 서버로 API 호출시 region 값을 보냄
- 서버에서는 region에 맞는 데이터 전달
- Server-driven List & Attributed Text 사용
- 자주 변경되는 값은 서버에서 받아서 처리
- 텍스트, 스타일 포함
- 앱 업데이트 없이 적용 가능
- 채팅 실시간 번역 기능 제공
- Date Formatter를 적극 사용함
- .formatted(date:time:) 사용
- AirBnb
- Right to Left 잘 지원
- 하지만 숫자 체계는 생략
- Facebook
- Pluralization 지원
- Right to Left
- 숫자 체계는 일부 지원
- 네이버밴드/카카오톡
- 우선순위에 따라 번역
- 번역 기능을 따로 제공