블로그
7개 언어: 현지화가 신뢰성 기능인 이유
다국어 지원은 번역된 문자열을 넘어섭니다. 로케일 인식 입력 처리, MDX 콘텐츠 현지화, 그리고 i18n을 신뢰성 문제로 다루는 엔지니어링 철학을 소개합니다.
이 카테고리의 제품 및 엔지니어링 업데이트를 확인하세요.
카테고리 보기Tactic Remote가 7개 언어의 전체 지원을 시작했습니다: 영어, 간체 중국어, 일본어, 한국어, 스페인어, 독일어, 프랑스어. 이것은 "문자열을 번역 API에 돌렸습니다"라는 공지가 아닙니다. 네트워크 구성, 터미널 출력, 시스템 수준 작업을 다루는 개발자 도구에서의 현지화는 소비자 앱 번역과는 다른 기준이 필요합니다.
이 글에서는 기술적 접근 방식, 현지화를 신뢰성 엔지니어링으로 다루게 된 계기가 된 버그, 그리고 국제 사용자 확대에서 관찰한 데이터를 다룹니다.
7개 언어
언어 선택은 비공개 베타 기간의 사용자 데이터와 요청량에 기반합니다:
| 언어 | 지역 신호 | 베타 요청량 |
|---|---|---|
| 영어 | 글로벌 기본값 | 기준선 |
| 간체 중국어 | 강력한 iOS 개발자 커뮤니티 | 요청 수 1위 |
| 일본어 | 높은 Claude Code 채택률 | 요청 수 2위 |
| 한국어 | 활발한 얼리 어답터 커뮤니티 | 요청 수 3위 |
| 스페인어 | 20개국 이상에 걸친 대규모 개발자 인구 | 요청 수 4위 |
| 독일어 | DACH 지역의 높은 macOS 시장 점유율 | 요청 수 5위 |
| 프랑스어 | 프랑스와 캐나다의 중요한 개발자 커뮤니티 | 요청 수 6위 |
사용자 수요가 있고, 기술적 정확성을 검증할 수 있는 원어민 개발자에 접근할 수 있는 언어를 우선시했습니다. 개발자 도구의 현지화에는 도메인 전문 지식이 필요합니다. "session"이나 "tunnel"이나 "hook"을 일본어로 번역하려면 사전적 정의가 아니라 해당 용어의 기술적 의미를 이해해야 합니다.
문자열 번역을 넘어서
iOS 현지화의 표준적인 접근법은 간단합니다: 사용자 대면 문자열을 .strings 또는 .xcstrings 파일로 추출하고, 번역을 제공하고, 시스템이 표시를 처리하게 합니다. 우리도 이렇게 하지만, 흥미로운 엔지니어링은 문자열 대체 아래의 레이어에 있습니다.
로케일 인식 입력 처리
현지화에 대한 우리의 철학을 바꾼 버그: 독일어 로케일 사용자가 설정 중 IP 주소를 입력할 수 없었습니다.
독일어 로케일의 iOS 키보드는 기본적으로 쉼표를 소수점 구분자로 사용합니다. 독일어 로케일 사용자가 숫자 키보드에서 "." 키 영역을 탭하면 쉼표가 입력됩니다. 192.168.1.100과 같은 IPv4 주소가 192,168,1,100으로 입력되어 검증에서 잘못된 형식으로 거부되었습니다.
이것은 번역 버그가 아닙니다. 로케일 동작 버그입니다. UI 문자열은 올바르게 번역되었지만, 키보드 레이아웃 가정으로 인해 입력 메커니즘이 깨졌습니다. IP 주소 입력 필드에서 쉼표를 마침표로 정규화하고, 네트워크 주소 입력에 항상 마침표 키를 표시하는 사용자 정의 키보드 구성을 제시하여 수정했습니다.
수정 전, 이 단일 버그가 독일어 로케일 사용자의 설정 실패의 약 23%를 차지했습니다. 배포 후, 독일어 로케일의 첫 실행 완료율은 한 릴리스 주기 내에 영어 기준선과 일치했습니다.
복수형과 문법적 일치
숫자가 포함된 문자열 보간은 현지화의 전형적인 함정입니다. 영어는 간단합니다: "1 session" 대 "2 sessions". 다른 언어에는 더 복잡한 복수형 규칙이 있습니다:
- 일본어와 한국어에는 문법적 복수형이 없으며, 숫자에 관계없이 동일한 형태를 사용합니다.
- 프랑스어는 2 이상에서 대부분의 명사를 복수형으로 만들지만, 일부 표현은 다르게 동작합니다.
- 독일어의 합성어는 문법격과 복수성에 따라 형태가 변할 수 있습니다.
우리는 iOS의 stringsdict 복수형 규칙 시스템을 사용하며, CLDR 복수형 카테고리(zero, one, two, few, many, other)를 지원합니다. 숫자를 포함하는 모든 사용자 대면 문자열은 단순한 문자열 연결 대신 복수형 인식 포매팅을 통해 처리됩니다.
오른쪽에서 왼쪽 레이아웃 대비
현재 7개 언어 중 RTL 레이아웃이 필요한 언어는 없지만, UI 아키텍처는 이를 고려하고 있습니다. 모든 레이아웃 제약 조건은 left/right 대신 leading/trailing 앵커를 사용합니다. 텍스트 정렬은 .natural로 설정됩니다. 이는 아랍어나 히브리어 지원을 추가할 때(둘 다 활발한 개발자 커뮤니티가 있는 언어) 레이아웃 작업이 최소화됨을 의미합니다.
MDX 콘텐츠 현지화
Tactic Remote 웹사이트와 문서는 MDX로 구축되어 있습니다. 문서 콘텐츠의 현지화는 앱 문자열 현지화와는 다른 전략이 필요했습니다.
각 MDX 문서는 파일명 접미사 규칙을 사용하여 로케일별 변형을 가질 수 있습니다: product-update.mdx(영어 기본값), product-update.zh-CN.mdx(중국어), product-update.ja.mdx(일본어) 등. 콘텐츠 라우터가 사용자의 선호 언어를 감지하고 적절한 변형을 제공하며, 현지화 버전이 없으면 영어로 폴백합니다.
이 접근 방식에는 의도적인 트레이드오프가 있습니다: 모든 문서 페이지를 모든 언어로 번역하지는 않습니다. 기술 설정 가이드와 API 레퍼런스는 영어로 유지합니다. 코드 샘플, 명령줄 지침, 구성 값이 포함되어 있어 언어에 독립적이기 때문입니다. 현지화 노력은 언어 장벽이 실제로 이해를 방해하는 콘텐츠에 집중합니다: 제품 공지, 개념 개요, 온보딩 플로우.
현재 MDX 콘텐츠의 34%가 최소 하나의 비영어 변형을 보유하고 있습니다. 페이지 트래픽과 지원 티켓 상관관계에 기반하여 우선순위를 정합니다. 특정 언어 그룹에서 불균형적으로 많은 지원 질문을 발생시키는 페이지가 다음 현지화 대상이 됩니다.
신뢰성 논거
현지화를 신뢰성 기능으로 다루는 데는 구체적인 이유가 있습니다: 로케일 관련 입력 버그로 설정을 완료할 수 없는 개발자는 네트워크 오류로 연결할 수 없는 개발자와 동일한 상태에 있습니다. 제품이 그들에게는 고장 난 것입니다. 근본 원인이 "영어 키보드 레이아웃을 가정했다"든 "TCP 버그가 있다"든 사용자 경험은 변하지 않습니다.
이 프레임워크는 엔지니어링 프로세스에 실질적인 영향을 미칩니다:
로케일별 테스트 매트릭스. CI는 6개의 비영어 로케일 구성에서 크리티컬 패스 테스트(설정 플로우, 연결 수립, 승인 플로우)를 실행합니다. 독일어 로케일 IP 입력의 회귀는 병합 전에 감지됩니다.
현지화 버그는 핵심 기능을 차단할 때 심각도 1로 트리아지됩니다. 잘못 번역된 레이블은 외관 문제입니다. 로케일 의존적 입력 실패는 프로덕션 인시던트입니다.
릴리스 전 문자열 동결. 각 릴리스 72시간 전에 영어 문자열을 동결하여 번역자에게 안정적인 타겟을 제공합니다. 번역은 언어학자뿐 아니라 팀 내 원어민 개발자가 검증합니다.
국제 채택 현황
다국어 지원 출시 이후 사용자 기반에 측정 가능한 변화가 나타났습니다:
- 비영어 로케일 사용자 가 6주 동안 주간 활성 사용자의 18%에서 41%로 증가했습니다.
- 간체 중국어 사용자 가 현재 두 번째로 큰 언어 그룹으로 주간 활성 사용자의 15%를 차지합니다.
- 일본어 사용자 가 모든 언어 그룹 중 가장 높은 평균 세션 시간을 기록합니다 — 전체 47분 대비 52분.
- 설정 완료율 이 모든 로케일에서 영어 기준선과 2 퍼센트포인트 이내로 수렴했습니다. 현지화 작업 전에는 일부 로케일의 완료율이 영어보다 15-20% 낮았습니다.
설정 완료율의 수렴이 가장 중요한 지표입니다. 현지화가 단순히 번역된 레이블을 추가하는 것이 아니라 신뢰성 격차를 해소하고 있음을 검증합니다.
향후 계획
동일한 기준에 따라 언어 지원을 확대하고 있습니다: 사용자 수요와 원어민 기술 리뷰어 접근성.
- 사용자 수요와 원어민 기술 리뷰어의 가용성에 따라 추가 언어를 평가하고 있습니다.
- 번역의 커뮤니티 기여 워크플로를 구축하고 있으며, 병합 전 기술적 정확성을 보장하는 리뷰 프로세스를 갖추고 있습니다.
언어 감지와 폴백 작동 방식에 대한 자세한 내용은 현지화 아키텍처를 참조하세요. 미지원 언어의 번역에 기여하고 싶다면 지원 페이지를 통해 문의해 주세요.