2025년 9월 18일·6분 읽기

웹과 네이티브 UI를 지탱하는 현지화 워크플로우

실용적인 현지화 워크플로우: 번역 키 정리, 명확한 소유권 지정, 복수형 처리, QA 실행으로 웹·네이티브 UI가 망가지지 않게 하세요.

웹과 네이티브 UI를 지탱하는 현지화 워크플로우

관리되지 않는 현지화에서 무엇이 잘못되는가

관리되지 않는 현지화는 처음에는 작고 짜증나는 문제로 시작해 나중에는 비용이 큰 문제로 발전합니다. 어제 딱 맞던 라벨이 오늘은 넘칩니다. 누락된 키가 원시 식별자로 보입니다. 영어에서는 괜찮았던 복수형이 다른 언어에서는 어색하거나 무례하게 들릴 수 있습니다.

대부분의 팀은 결국 압박 속에서 같은 문제를 고치게 됩니다:

  • 잘린 버튼, 잘못 보이는 헤더, 아이콘과 텍스트가 겹침
  • 영어로 폴백되거나 키 이름이 그대로 보이는 누락 키
  • 잘못된 복수형(예: "1 items")과 성별이 반영된 언어에서의 문법 오류
  • 같은 개념에 대해 화면마다 다른 표현 사용
  • 번역 없이 화면이 배포되어 막판 수정이 필요한 상황

웹과 네이티브 화면은 자주 다른 방식으로 실패합니다. 웹에서는 유연한 레이아웃 때문에 특정 뷰포트나 브라우저에서야 문제가 드러납니다. 텍스트가 예기치 않게 줄 바꿈되어 버튼을 아래로 밀거나 그리드가 깨질 수 있습니다. 네이티브 앱에서는 여백이 더 엄격합니다. 긴 번역은 중요한 요소를 화면 밖으로 밀거나, 접근성 폰트 크기와 충돌하거나, 자동 크기 조정이 없는 컴포넌트 때문에 잘릴 수 있습니다.

견고한 현지화 워크플로우는 키를 안정적으로 만들고 번역을 검토 가능하게 하며 UI 점검을 일상화함으로써 대부분의 문제를 예방합니다. 그 덕분에 업데이트를 더 예측 가능하게 배포할 수 있습니다. 다만 원문이 불명확하면 해결할 수 없습니다. 원문이 "Open"이나 "Apply"처럼 맥락이 없으면 번역은 추측에 불과합니다.

성공의 단순한 정의는 "모든 것이 번역되었다"가 아닙니다. 성공은:

  • 웹과 네이티브 화면에서 UI가 읽기 쉬운 상태로 유지되는 것
  • 키가 계속 바뀌지 않아 업데이트가 빠른 것
  • QA가 사용자보다 먼저 문제를 찾아내는 것

예: 장바구니 화면에 "{count} item(s)"가 표시되면 관리되지 않은 문자열은 어색한 복수형과 깨진 간격을 불러옵니다. 관리되는 접근법은 올바른 복수 규칙을 강제하고, 독일어에서 버튼이 30% 커지는 것을 출시 전에 잡아낼 수 있습니다.

소유권과 단일 진실의 출처 결정하기

로컬라이제이션 워크플로우는 "어떤 텍스트가 진짜인가?"라는 질문에 아무도 답하지 못할 때 가장 빨리 무너집니다. 문자열의 단일 출처를 정하고 그 사실을 지루할 정도로 분명히 하세요. 그 출처는 리포지토리 파일일 수도 있고 번역 플랫폼이나 내부 테이블일 수도 있지만, 분쟁이 생기면 항상 그곳이 우선해야 합니다.

역할은 직함이 아니라 결정으로 정의하세요. 의미와 톤을 승인할 사람이 필요합니다(보통 Product나 Marketing). 코드에서 사용하기 쉬운 안정적인 키를 관리할 사람이 필요합니다(보통 Engineering). 웹과 네이티브의 UI 제약을 보호할 사람이 필요합니다(보통 Design).

충돌을 피하는 한 가지 분업 예시는:

  • 키 생성자: 화면을 배포하는 사람이 UI에 필요한 새 키를 생성한다.
  • 문구 승인자: PM이나 카피 담당자가 기본 언어를 승인한다.
  • 번역 편집자: 번역가는 번역만 수정할 수 있고 키 이름은 바꾸지 못한다.
  • 키 변경: 키를 폐기하거나 병합하는 권한은 키 소유자에게만 있고, 그 이유를 적는다.

릴리스가 지연되지 않도록 응답 시간 기대치를 설정하세요. 예: 새 키 요청은 영업일 1일 내 확인, 원문 승인 2일 내, 치명적 수정(깨진 UI, 잘못된 법적 문구)은 몇 시간 내 처리 등.

구체적 예: 팀이 웹과 네이티브 화면을 가진 새 "비밀번호 재설정(Reset password)" 플로우를 만들면 개발자는 키를 추가하고 PM이 최종 영어 문구를 승인하며, 번역가는 다른 언어를 채웁니다. 번역자가 "Reset"을 "Change"로 바꾸어야 한다고 생각하면 번역은 수정하지만 키는 그대로 둡니다. PM이 화면 간 문구를 재사용하려 하면 구조적 변경은 키 소유자만 수행해 아무 것도 조용히 깨지지 않게 합니다.

키 전략: 재사용, 안정성, 화면 경계

좋은 현지화 워크플로우는 한 가지 규칙으로 시작합니다: 키는 식별자이지 영어 문장이 아닙니다. 부품 번호처럼 다루세요. 나중에 문구를 바꾸면 보통 키는 유지되어야 합니다.

의미가 다르면 새 키를 만드세요. 의미가 같으면 화면이 달라도 키를 재사용하세요. 프로필 화면의 "Save"와 설정 화면의 "Save"가 둘 다 "변경 저장"을 뜻하면 같은 키를 공유할 수 있습니다. 그러나 "Save"가 "북마크"를 뜻하면 다른 키가 필요합니다(번역자가 다른 동사를 써야 할 수 있음).

짧은 UI 레이블과 긴 콘텐츠는 분리하세요. 버튼 레이블, 도움말 힌트, 오류 메시지는 번역 방식과 길이 제한이 다르므로 별도 키로 유지하면 톤과 구두점을 조정하기 쉽습니다.

플랫폼마다 같은 문구를 강제하지 않는 화면 경계

웹과 네이티브에서 재사용을 목표로 하되, 플랫폼별로 다른 표현이 필요하면 강제하지 마세요. 네이티브 권한 허용 프롬프트는 웹 도구 설명보다 더 명확하고 형식적이어야 할 수 있습니다. 그런 경우 핵심 개념은 같게 유지하되 플랫폼별 키를 두어 각 UI가 자연스럽게 읽히도록 하세요.

실용적 패턴은 기능과 UI 유형별로 키를 그룹화한 뒤 그 경계 내에서 재사용하는 것입니다:

  • 의미가 동일하면 같은 기능 내에서 재사용
  • UI 유형별로(레이블 vs 도움말 vs 오류 vs 시스템 프롬프트) 키 분리
  • 문구가 달라야 할 때만 플랫폼 변형 사용
  • 키는 안정적으로 유지하고 표시 텍스트만 변경
  • 어디에 표시되는지나 문자수 제한 같은 컨텍스트 노트 추가

예: 웹 관리자 패널과 네이티브 현장 앱에 같은 "Delete customer" 동작이 있을 때 핵심 액션 레이블은 재사용하되, 네이티브 확인 문구는 더 강한 경고나 짧은 줄을 위해 별도 키로 유지할 수 있습니다.

번역 키 이름 규칙과 정리

읽기 쉬운 규칙은 현지화를 가장 평범하게 만들어 줍니다. 사람들이 문자열을 빠르게 찾고 번역자는 컨텍스트를 얻으며 키는 문구가 바뀌어도 안정적으로 남습니다.

다음 네 가지 질문에 답하는 읽기 쉬운 규칙을 사용하세요: 어디에 있는가, 무엇인가, 용도는 무엇인가, 변형인가? 웹과 네이티브에 모두 통용되는 단순한 패턴은:

<product_or_domain>.<screen_or_flow>.<component>.<purpose>[.<variant>]

예: 고객 포털에서는 portal.login.button.submit 또는 portal.orders.empty_state.title처럼 사용합니다. 이렇게 하면 화면이나 흐름별로 그룹화되면서 컴포넌트로도 검색하기 쉽습니다.

나쁜 키는 너무 모호하거나 현재 영어 문장에 종속적입니다:

  • 좋은 예: portal.profile.field.email.label
  • 나쁜 예: emailText (범위와 용도가 없음)
  • 나쁜 예: please_enter_your_email (카피가 바뀌면 깨짐)
  • 좋은 예: portal.checkout.error.payment_failed
  • 나쁜 예: error_12

변형은 구두점이나 혼합된 대소문자로 얼버무리지 말고 명시적으로 만드세요. 모바일 헤더용 짧은 레이블이 필요하면 접미사로 ...title.short vs ...title.long을 추가하세요. 대소문자 차이가 필요하면 플랫폼에서 안전하게 변환할 수 없는 경우에만 별도 키를 만드세요(예: ...button.save...button.save_titlecase).

플레이스홀더에도 규칙을 두어 번역자가 추측하지 않게 하세요.

  • 이름 붙은 플레이스홀더 사용: {user_name}, {count}, {date}
  • 결합 금지: "Hello " + name 같은 방식 금지
  • 단위는 언어에 따라 달라지니 문장 안에 포함: {count} items가 아니라 {count} + " items"
  • 허용 형식 정의: ISO 날짜, 통화 또는 플랫폼별 날짜 포맷
  • 까다로운 문자열에는 짧은 노트 추가(예: {count}가 0일 수 있는지 여부)

복수형과 문법 규칙으로 재작업 방지하기

Build once for web and mobile
Build web and native screens from one place and keep UI text consistent across platforms.
Try AppMaster

복수형은 워크플로우가 처음 깨지는 곳입니다. 많은 팀이 모든 언어에 단수와 복수만 있다고 가정했다가 UI가 어색해지거나 막판 수정을 하게 됩니다.

언어마다 여러 복수 카테고리가 있을 수 있습니다. 영어는 주로 one/other를 쓰지만 러시아어, 폴란드어, 아랍어, 체코어 등은 few, many, zero 같은 형태가 필요합니다. 초기에 단일 패턴을 하드코딩하면 나중에 웹과 네이티브에서 문자열을 대대적으로 다시 써야 합니다.

복수형 문자열은 한 표준을 정하고(웹, iOS, Android, 백엔드 렌더링 등) 어디서나 일관되게 적용하세요. 실용적 접근법은 폼별로 분리된 키 대신 복수형 폼을 포함하는 하나의 키를 저장하는 것입니다. CLDR 카테고리를 기준으로 폼을 정하면 실제 언어 규칙과 맞습니다.

UI 문장을 조각내서 만들지 마세요. 예: "You have " + count + " messages" 같은 방식은 언어마다 단어 순서와 어미가 달라 문제를 만들 수 있습니다.

실용적 키 패턴

메시지 카운터 같은 경우 개념당 하나의 안정된 키를 정의하고 숫자는 파라미터로 넣습니다. 그런 다음 각 언어에 필요한 형태를 번역자가 제공하게 하세요.

  • 개념당 하나의 키 사용(예: inbox.message_count)
  • CLDR 폼 지원( zero, one, two, few, many, other )
  • 전체 문장 안에 플레이스홀더 {count} 사용
  • 의미가 불명확하면 번역자 노트 추가(예: "messages"인지 "unread messages"인지)

성별과 격

때로는 복수형만으로 부족합니다. 사용자에게 직접 말할 때("Welcome, Alex")나 역할을 지칭할 때("assigned to him/her") 어떤 언어는 성에 따라 다른 단어를 써야 하고, 다른 언어는 전치사 등에 따라 격이 달라집니다.

그럴 때는 스타일 차이가 아니라 문법적으로 다른 경우에만 문자열을 분리하세요. 목표는 키를 줄이는 것이지만, 문맥상 맞지 않은 "정확한" 번역이 QA에서 문제를 일으키지 않도록 하는 것입니다.

플랫폼별 포맷팅과 레이아웃 제약

번역이 정확해도 UI를 망가뜨릴 수 있습니다. 웹과 네이티브는 텍스트를 다르게 렌더링하므로 워크플로우에 포맷팅 규칙과 레이아웃 검사가 포함되어야 합니다.

숫자, 통화, 날짜를 어떻게 표시할지 표준화하세요. "$" + amount처럼 결합하지 말고 로케일에 맞는 포맷을 사용하세요(1,000.50 vs 1 000,50; 일-월-연 vs 월-일-연). 시간대도 흔한 함정입니다: 타임스탬프는 UTC로 저장하고 사용자의 로컬 존으로 포맷하며, 특정 존의 시간이라면 명확히 표기하세요(예: 매장 픽업 시간).

텍스트 방향도 조용한 파괴 요인입니다. RTL(오른쪽에서 왼쪽) 언어를 지원하면 레이아웃 미러링과 문장 부호의 위치 변화를 계획하세요. 방향을 암시하는 아이콘(화살표, 뒤로가기 버튼, 진행 단계)은 뒤집어야 할 수도 있습니다. RTL 검토를 빠르게라도 포함하세요.

모바일에서는 폰트와 여백이 웹보다 더 많이 변합니다. 웹에서 들어맞는 문자열이 SwiftUI나 Kotlin에서는 어색하게 줄 바뀜이 발생할 수 있습니다. 안전한 최소 폰트 크기를 정하고, 적절한 곳에서 레이블을 줄 바꿈 가능하게 하며, 기본 폰트가 지원하지 않는 스크립트에는 대체 폰트를 정의하세요.

접근성도 로컬라이즈된 검사가 필요합니다. 화면 낭독기는 숫자, 약어, 혼합 언어 텍스트를 예상치 못한 방식으로 읽을 수 있습니다.

레이아웃 가드레일:

  • 텍스트 확장을 고려해 설계(30–50% 길이 증가)하고 고정 폭 버튼을 피함
  • 동적 값(카운트, 가격, 날짜)은 별도의 포맷된 토큰으로 유지
  • 플랫폼 네이티브 날짜/숫자 포매터 사용
  • 릴리스 전 하나의 RTL 로케일과 하나의 "긴 텍스트" 로케일 테스트
  • 핵심 흐름(login, checkout, settings)에 대해 화면 낭독기 점검

예: "Total: $1,234.50" 라벨은 기호가 값 뒤에 오고 공백이 달라지며 화면 낭독기에서는 "Total"과 금액 사이에 쉬는 소리가 필요할 수 있습니다.

새 화면에서 릴리스까지 단계별 워크플로우

Reduce last minute copy fixes
Use visual tools to build logic and UI while keeping wording changes easy to manage.
Try AppMaster

현지화 워크플로우는 대부분의 팀이 기대하는 것보다 더 일찍 시작해야 합니다: 화면이 디자인되는 단계에서 시작하세요. UI가 "완료"될 때까지 기다리면 번역을 서둘러야 하고 텍스트가 잘리거나 임시로 문자열을 하드코딩하는 일이 생깁니다.

디자인할 때 각 레이블, 버튼, 메시지마다 번역 키를 추가하세요. 기본 언어로 원문을 적고 어느 위치에 나오고 어떤 동작을 하는지 짧은 컨텍스트를 붙이세요. checkout.pay_button 같은 키는 번역자가 그것이 동사(지불하기)인지 명사(결제)인지 알 수 있어야 유용합니다.

UI는 플레이스홀더와 기본 언어 폴백을 사용해 구현하세요. 변수는 명시적으로 유지하고(예: {name}, {count}) 문장을 이어붙이지 마세요. 이것이 여러 언어에서 문법을 망가뜨리는 가장 빠른 방법 중 하나입니다.

번역을 보낼 때 번역자가 정확히 작업할 수 있도록 스크린샷(또는 텍스트가 바뀌는 경우 짧은 영상), 버튼 등 좁은 공간의 문자수 제한, 톤과 용어에 대한 노트, 동적 플레이스홀더 목록과 그 의미를 포함하세요.

번역이 돌아오면 조기에 병합하고 웹과 네이티브 버전을 빌드하세요. 로그인, 온보딩, 체크아웃, 설정 같은 고위험 화면에서 빠른 UI 검사를 실행하세요. 잘린 텍스트, 겹침, 누락 키, 잘못된 복수형을 확인합니다.

마지막으로 릴리스 후 모니터링하세요. 누락 키, 기본 언어로 폴백된 이벤트, 자주 넘치는 화면을 추적하세요.

번역자가 정확히 작업하도록 도와주기

Test localization early
Prototype a localized login or checkout flow and see where long strings break.
Start Building

정확한 번역은 단어 하나가 번역되기 전에 시작됩니다. 번역자가 키와 영어 문구만 보면 추측합니다. 그렇게 하면 올바른 단어가 잘못된 위치에 들어가거나 UI가 어색하거나 무례하게 느껴질 수 있습니다.

간단한 "컨텍스트 팩"이 대부분의 추측을 없앱니다. 각 문자열에 대해 어느 화면의 어느 컴포넌트인지, 사용자가 무엇을 하려 하는지, 톤(친근한, 형식적, 긴급)을 적어주세요. 또한 버튼 레이블인지 오류 메시지인지 메뉴 항목인지 도움말 텍스트인지도 표기하세요. 이 범주들은 번역 방식이 다릅니다.

공간이 좁으면 미리 명시하세요. 웹과 네이티브는 다르게 깨지니 중요한 곳에는 제한을 정의하세요: 버튼, 탭 제목, 토스트, 고정 카드 내부 등. 한 줄로 유지해야 하면 그렇게 표기하고, 줄바꿈이 허용된다면 어디에서 가능한지 알려주세요.

"번역하지 마세요" 항목을 명확히 표시하세요. 제품명, 요금제명, 쿠폰 코드, API 필드, {name} 같은 플레이스홀더는 번역하면 안 됩니다. 안내가 없으면 번역자가 현지화해 앱이 이상하게 보일 수 있습니다.

실용적 문자열 패키지 구성:

  • 스크린샷 또는 화면 이름(예: "Checkout - Payment method")
  • 유형과 의도(결제를 확정하는 버튼)
  • 톤 노트(차분하고 안심시키는 톤)
  • 제약(최대 18자, 한 줄 유지)
  • 보호 토큰(제품명, 통합명, {amount})

법적 텍스트와 지원 콘텐츠는 별도 흐름으로 관리하세요. 법적 카피는 승인 절차가 필요하고 업데이트가 느리므로 제품 UI 문자열과 분리해 버전 관리를 하세요. 지원 문서와 도움말은 장문 번역이 필요하니 다른 시스템이나 파일셋에 두는 것이 좋습니다.

예: 모바일의 "Continue" 버튼은 웹보다 더 엄격한 제한이 필요할 수 있습니다. 번역자가 그 사실을 알면 확장하는 언어에서 더 짧은 동사를 선택할 수 있어 막판 UI 재설계를 피할 수 있습니다.

깨진 UI를 막는 QA 및 검토 루프

현지화로 인한 UI 깨짐은 처음에는 "버그"처럼 보이지 않습니다. 누락된 레이블, 두 줄로 감싸진 버튼, 잘못된 플레이스홀더가 보통의 징후입니다. 좋은 워크플로우는 이런 문제를 사용자보다 먼저 드러내는 QA 단계를 포함합니다.

개발 빌드에서 의사-현지화를 사용하세요. 실제 문자열을 더 길고 악센트가 있는 버전(예: "[!!! Šéttïñĝš !!!]")으로 바꿔 30–50% 길이를 늘리면 잘림, 겹침, 하드코딩된 문자열을 빠르게 드러낼 수 있습니다.

모든 빌드에 자동 검사를 추가하세요. 사람이 수백 줄을 검토할 때 놓치는 지루한 실수를 잡아줍니다:

  • 모든 로케일에서 누락된 키(폴백이 문제를 숨길 수 있음)
  • 사용되지 않는 키(죽은 텍스트의 흔적)
  • 플레이스홀더 불일치("Hello, {name}" vs "Hello, {username}")
  • 로케일에 맞지 않는 복수형 폼( zero, one, few, many )
  • 모바일 문자열에 포함된 원치 않는 HTML 같은 금지 패턴

그다음 명확한 수동 승인 루프를 만드세요. Product는 의미와 톤을, QA는 레이아웃과 상호작용을 확인합니다.

테스트 매트릭스를 작게 유지하되 엄격하게 만드세요. 모든 것을 테스트할 필요는 없습니다. 먼저 깨지는 것만 테스트하세요: 로그인/가입, 비밀번호 재설정, 체크아웃/결제 확인, 설정 및 프로필 편집, 알림 및 빈 상태, 테이블·배지·작은 버튼이 있는 화면 등.

이슈를 보고할 때는 수정을 쉽게 하세요. 로케일, 기기 및 OS 버전(또는 브라우저와 너비), 기대 텍스트, 실제 텍스트, 잘린 부분을 보여주는 스크린샷을 포함하세요. 복수형이나 플레이스홀더 관련이면 키와 렌더된 문자열을 그대로 붙여넣으세요.

흔한 실수와 회피 방법

Build a portal with clear strings
Create an internal tool where labels, errors, and hints stay organized and reviewable.
Start Building

대부분의 현지화 버그는 "번역 문제"가 아니라 워크플로우 문제로, 깨진 UI나 누락된 텍스트, 혼란스러운 메시지로 나타납니다.

흔한 함정은 문구만 바꾸려다 키 이름을 바꾸는 것입니다. 키는 안정적인 ID여야 합니다. checkout.button.paycheckout.button.pay_now로 바꾸면 이전 번역이 모두 누락으로 취급됩니다. 키를 유지하고 기본 언어 문자열을 업데이트하며 의미가 바뀌면 컨텍스트를 추가하세요.

또 다른 문제는 한 플랫폼에서 문자열을 하드코딩하는 것입니다. 웹 팀은 키를 쓰는데 모바일 팀이 임시로 리터럴 텍스트를 넣으면 한 달 뒤 iOS에서 영어 경고만 보이는 상황이 생길 수 있습니다. "사용자에게 보이는 문자열을 하드코딩하지 않는다"는 규칙을 웹과 네이티브가 공유하게 하세요.

플레이스홀더는 어순을 가정하면 미묘한 실수를 만듭니다. 영어는 "{count} items"가 통하지만 다른 언어는 다른 어순이나 추가 단어가 필요할 수 있습니다. 위치 기반 대신 이름 붙은 플레이스홀더를 사용하고 플랫폼 전반에 일관되게 유지하세요.

초기에 잡아야 할 실수들:

  • 키를 카피처럼 다뤄 기존 번역을 깨는 것. 키는 안정적으로 유지
  • 한 키를 두 의미에 재사용하는 것. 의도가 다르면 분리
  • 플레이스홀더 스타일 혼용(일부는 이름, 일부는 번호). 하나로 표준화
  • 영어로만 테스트하는 것. 항상 하나의 긴 텍스트 로케일과 하나의 짧은 로케일을 확인
  • 폴백 계획 없이 배포하는 것. 누락 시 어떻게 할지 정의

긴 언어 하나만 테스트하는 것은 충분하지 않습니다. 독일어는 UI가 늘어나고 중국어는 여백 문제를 숨길 수 있습니다. 둘 다 빠르게 확인하고 복수형 엣지 케이스(0, 1, 2)도 테스트하세요.

릴리스 전에 폴백 동작에 합의하세요. 예: 프랑스어가 누락되면 영어로 폴백하고 누락 키를 로깅하며, 중요한 화면에 공백이 있으면 릴리스를 차단하는 정책 등.

빠른 체크리스트와 실용적 다음 단계

건강한 현지화 워크플로우는 작고 반복 가능한 검사로 유지됩니다. 목표는 단순합니다: 놀라운 문자열 감소, 깨진 레이아웃 감소, 막판 번역 서두르기 감소.

UI 변경을 머지하기 전에 빠르게 확인할 항목:

  • 새 키가 네이밍 규칙을 따르고 올바른 네임스페이스(화면 또는 기능)에 있는가
  • 플레이스홀더가 모든 언어에서 정확히 일치하는가(같은 변수, 같은 의미)
  • 복수형 폼이 지원하는 언어에 대해 완전한가(영어의 단수/복수만으로 끝나지 않음)
  • UI에 하드코딩된 텍스트가 남아있지 않은가(오류 상태와 빈 상태 포함)
  • 새로 추가되거나 변경된 텍스트에 기본 컨텍스트가 캡처되어 있는가(스크린샷이나 명확한 노트)

배포 전에 짧은 릴리스 QA를 실행하세요. 현지화가 먼저 깨지는 곳에 초점을 맞추되 시간은 제한하세요: 각 플랫폼의 주요 사용자 흐름, 하나의 RTL 점검, 긴 텍스트 화면(settings, legal, onboarding, tables, 좁은 버튼), 그리고 몇몇 로케일에서의 날짜/숫자/통화 포맷 확인.

팀에 맞는 주기를 정하세요. 많은 팀이 번역을 주 1회 업데이트하고 릴리스 1–2일 전 문자열을 동결합니다. 목적은 막판 카피 편집과 최종 QA가 섞이지 않게 하는 것입니다.

빠른 투자 대비 효과가 큰 다음 단계: 규칙(키 네이밍, 플레이스홀더, 복수 규칙, 소유권)을 문서화하고, 파일로 남긴 뒤 단일 파일에서 파일 끝까지 한 화면을 파일럿으로 진행해 어디가 깨지는지 조정하세요.

백엔드, 웹 UI, 네이티브 모바일을 하나의 플랫폼(AppMaster 같은)에서 개발하면 키와 플레이스홀더를 일관되게 유지하기가 더 쉽습니다. 같은 화면과 로직을 공유할 수 있기 때문에 규칙을 유지하는 것이 현지화를 취약한 대신 루틴처럼 느끼게 만듭니다.

자주 묻는 질문

What’s the simplest way to stop localization from breaking my UI?

하나의 안정된 문자열 저장소, 합의된 키 네이밍 규칙, 그리고 영어 문구가 바뀐다고 키를 바꾸지 않는 규칙으로 시작하세요. 그 다음 누락된 키, 텍스트 잘림, 복수형 문제를 릴리스 전에 잡아내는 작은 QA 루틴을 추가하면 됩니다.

What does “single source of truth” mean for translations?

충돌이 생길 때 항상 우선하는 한 시스템을 정하세요. 예를 들어 리포지토리 내 번역 파일이나 번역 플랫폼의 내보내기 파일처럼 한 곳을 ‘진실의 출처’로 정하고, 모든 사람이 그곳에서만 내용을 수정하도록 하세요. 코드에서는 그 소스만 사용합니다.

Who should own keys, wording, and translations?

역할을 직함이 아니라 책임으로 나누세요: 한 사람이 기본 언어의 의미와 톤을 승인하고, 또 다른 사람이 키 구조와 폐기 관리를 책임지며, 번역가는 번역 값만 수정하도록 합니다. 이렇게 하면 키가 조용히 바뀌어 빌드가 깨지는 일을 막을 수 있습니다.

When should I reuse a translation key vs create a new one?

의미가 달라지면 새 키를 만드세요. 영어 문구가 비슷해 보여도 실제 의미가 다르면 키를 분리해야 합니다. 반대로 의미가 동일하다면 키를 재사용하면 번역 일관성과 유지보수 비용이 줄어듭니다.

How should I name and organize translation keys so they stay stable?

키를 식별자로 사용하고 영어 문장처럼 다루지 마세요. 기능, 화면/흐름, 컴포넌트, 용도를 포함해 범위를 명확히 하세요. 예: portal.checkout.button.pay 같은 키는 버튼 문구가 바뀌어도 유용합니다.

What’s the right way to handle plurals across languages?

많은 언어가 단수와 복수만 있지 않습니다. 개념당 하나의 키를 두고 CLDR 기반 복수형 카테고리(zero, one, two, few, many, other)를 지원하며 문장 안에 {count}를 포함하세요. 이렇게 하면 번역자가 단어 순서를 자유롭게 바꿀 수 있습니다.

How do I avoid placeholder bugs like wrong names or broken grammar?

문장을 조합해 만들지 마세요(예: "Hello " + name). 언어마다 단어 순서와 어미가 달라집니다. {user_name} 같은 이름 붙은 플레이스홀더를 일관되게 쓰고, 각 플레이스홀더가 무엇을 의미하는지 문서화하세요.

How do I prevent truncated buttons and overlapping text on web and mobile?

텍스트가 30–50% 더 길어질 수 있다고 가정하고 컴포넌트를 설계하세요. 웹과 네이티브 모두에서 ‘긴 텍스트’ 로케일과 접근성 폰트 크기로 테스트해 잘림과 겹침을 초기에 잡으세요.

What QA steps catch localization issues before users do?

개발 빌드에서 의사(가짜)현지화를 사용해 하드코딩된 문자열과 레이아웃 실패를 노출시키고, 빌드에서는 누락 키, 미사용 키, 플레이스홀더 불일치, 잘못된 복수형 등을 검사하도록 자동화하세요. 수동 검토는 로그인, 체크아웃 등 깨지기 쉬운 흐름에 집중하세요.

What should we do when a translation key is missing right before release?

기본 언어로 폴백하도록 하되 누락 키는 기록해서 빠르게 보완하세요. 중요한 화면이나 법적 문구는 누락 시 릴리스를 차단하는 정책을 둘 수 있습니다.

쉬운 시작
멋진만들기

무료 요금제로 AppMaster를 사용해 보세요.
준비가 되면 적절한 구독을 선택할 수 있습니다.

시작하다