문서

글로벌화 검사

누락되거나 손상된 번역, 특정 언어나 문화권에만 적용되는 텍스트 및 서식이 새로 작성된 코드에 포함되어 있는지, 설정 시 다른 언어로 렌더링될 때 깨지는 페이지가 있는지 모든 변경 사항을 확인하세요.

이글로벌화품질 관리 단계의 검사는 프로젝트를 전 세계에서 사용 가능하게 만듭니다. 이 검사는 작업 QA와 풀 리퀘스트에서 수행되며, 변경 사항이 영향을 준 부분만 확인합니다:

  1. 카탈로그.변경으로 추가되거나 수정된 문자열은 모든 언어로 표시됩니다.
  2. 코드.변경으로 추가된 줄은 특정 언어나 문화를 가정한 텍스트 및 서식입니다.
  3. 페이지.프로젝트에서 애플리케이션 시작 방법을 정의할 때, 페이지는의사 번역.

pull request가 병합되면 마법사는 기본적으로 이 검사를 활성화합니다. 설정은품질 관리 → 글로벌화에 있으며, 워크벤치의설정이 활성화 여부를 표시합니다.

기본적으로 차단되는 항목

문자열이 누락되거나 손상되었거나, 추가된 코드가 읽는 사람의 텍스트를 직접 코드에 삽입하거나 여러 부분을 조합해 문장을 만들 경우 변경 사항은 수정을 위해 반려됩니다. 그 외 모든 항목은 발견 사항으로 보고되며, 사용자가 직접 차단하도록 선택하지 않는 한 아무것도 차단하지 않습니다. 서식, 정렬 및 레이아웃 관련 발견 사항은 프로젝트 자체 코드에서 해당 문제를 확인할 때까지 계속 보고됩니다.

어떤 항목을 차단할지품질 관리 → 글로벌화에서 지정하세요: 카탈로그 코드,코드 내의 어떤 요소가 변경 사항을 반려시키는가, 그리고수정을 위해 변경 사항을 반려시키는 페이지 문제. 소스 코드 확인및페이지 렌더링코드 및 페이지 단계를 비활성화합니다.

카탈로그 코드

코드의미기본적으로 차단되는 항목
missing문자열에 번역이 없습니다.예
invalid_syntax번역 결과가 파싱되지 않거나, 예를 들어 ICU 형식이 깨지거나 모델 오류가 나타나는 경우: 문장이 잘려 있거나, 뒤에 불필요한 구두점이 남거나, 따옴표가 닫히지 않거나 단어가 중복된 상태예
placeholder_mismatch플레이스홀더나 보호된 용어가 원본과 다르게 표기된 경우, 예를 들어 제품명이 중복으로 적힌 상황예
plural_categories해당 언어에 필요한 복수형이 누락된 경우예
stale문자열 번역 이후에 원본이 변경된 경우아니요
obsolete원본에 해당 문자열이나 문서가 더 이상 존재하지 않는 경우아니요

용어집, 길이 및 금지어 규칙은 설정 파일에 지정된 경우 각각의 코드를 보고합니다.

번역 과정에서 사용되지 않는 문자열은 모든 언어에서 제거되며, 원본이 사라진 페이지의 번역도 삭제됩니다. 단, Coroid로 번역된 파일만 삭제되며, 하나의 언어로만 존재하는 페이지는 절대 삭제되지 않습니다.

코드 코드

코드발견되는 내용기본적으로 차단되는 항목
hardcoded_text카탈로그가 아닌 코드에 직접 쓰인 사람이 읽는 텍스트: JSX 및 템플릿 텍스트, 다음과 같은 가시적 속성들placeholder, title, alt및aria-label, 토스트 및 알림예
concatenated_text여러 부분을 조합해 만든 문장: 번역문에 텍스트나 값이+, 템플릿 리터럴 또는 인접 요소를 통해 결합된 경우예
locale_number읽는 사람의 로케일에 맞지 않게 포맷된 숫자, 예를 들어toFixedUI 코드 내의toLocaleString()로케일 없이 표기된아니요
locale_date읽는 사람의 로케일에 맞지 않게 포맷된 날짜나 시간, 또는MM/dd/yyyy아니요
hardcoded_currency금액 옆에 쓰인 통화 기호나 코드아니요
ordinal_sort문자 코드로 정렬되거나 비교되는 텍스트, 또는localeCompare로케일 없이 처리되는 경우아니요
case_mappingtoUpperCase()또는toLowerCase()로케일을 고려하지 않고 텍스트에 적용되는 경우아니요
physical_direction오른쪽에서 왼쪽으로 쓰이는 언어를 사용하는 프로젝트에서 CSS 및 유틸리티 클래스의 좌우 방향아니요
postal_code_format특정 국가의 패턴으로 유효성 검사를 받는 우편번호아니요
phone_number_format북미 지역용으로 유효성 검사를 받는 전화번호아니요
latin_only_inputa–z로만 제한된 이름, 도시, 거리 또는 주소아니요
joined_list사람들이 읽는 목록에 쉼표나 "and"로 연결된 경우아니요
calendar_names코드에 직접 쓰인 요일 또는 월 이름, 또는 고정된 주 시작일아니요
paper_size인쇄물이나 PDF 설정에 고정된 글꼴, A4 등의 규격아니요
fixed_unit표시되는 숫자 옆에 쓰인 mi, lb 또는 °F와 같은 단위아니요
locale_parsing사람이 입력한 숫자가parseFloat또는Number아니요
ime_composition중국어, 일본어 또는 한국어 단어가 아직 입력 중임을 확인하지 않고 텍스트 입력란에서 Enter 키를 처리하는 경우아니요

모든 시장을 위한 디자인각 항목에 대한 수정 방법을 표시합니다.

검사 결과의 내용

이 코드 단계는 JavaScript와 TypeScript, JSX를 파싱하며, Vue, Svelte, Astro, HTML, ERB, Handlebars 템플릿 및 CSS를 텍스트 형태로 읽습니다. 특정 규칙은 해당 컨텍스트에서만 적용됩니다. 예를 들어 우편번호 패턴은 우편번호 필드 옆에서만 보고되며, 나열된 목록은 사람들이 읽을 수 있는 곳에서만 인식됩니다.

  • 정의에 따라 번역됨.프로젝트 내 번역 호출 및 컴포넌트에 포함된 텍스트(t(), formatMessage, <Trans>, <FormattedMessage>, $t())와 설정 파일에 명시된 함수들.
  • 절대 안 함 텍스트.보호된 용어와 설정 파일에서 허용된 단어들.
  • 의도적으로 제외됨.‘'가 포함된 줄i18n-ignore주석과 그 다음 줄. 그 이유를 입력하세요:// i18n-ignore: product name.

선택적world섹션의.coroid/i18n.json나머지를 설정합니다:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
필드의미
exclude규칙에서 제외할 파일 패턴
translate프레임워크 자체 외의 번역 함수들
allow보호된 용어 외에 절대 번역되지 않는 단어들
formatter, currencies마법사의 Culture 단계에서 설정되며,문화
render의사 현지화 페이지를 위한 앱 실행 방법은의사 현지화

발견 사항 및 수정 내용

모든 발견 사항은 검사 실행 시 저장되어 작업의발견된 문제: 카탈로그별, 키 및 언어별로 발견 사항을 분류하고, 파일·줄·발견된 텍스트별로 코드 관련 사항을 정리하며, 페이지·요소·텍스트별로 페이지 관련 사항을 기록합니다. 동일한 작업에 대한 최신 검사에서 해당 사항이 더 이상 나타나지 않으면 발견 사항은 수정된 것으로 간주됩니다.

결제 페이지 텍스트 번역하기작업
발견된 문제점
  • 열기ui · checkout.total · fr: missing글로벌화 · 번역되지 않음
  • 수정 중src/pricing.tsx:7 · “간단한 요금제”글로벌화 · 코드에 직접 작성된 텍스트
  • 열기/{locale}/ · p#promo · “모든 주문에 무료 배송 혜택 제공” · runtime_text (de-DE, ar-SA)글로벌화 · 카탈로그에 포함되지 않은 텍스트
  • 수정 중ui · cart.items · ja: placeholder_mismatch글로벌화 · 플레이스홀더가 소스와 일치하지 않음
  • 수정 완료ui · cart.count · ar: plural_categories글로벌화 · 해당 로케일에 대한 복수형 처리가 누락됨

글로벌라이제이션 검사에서 발견된 품질 관련 내용: 카탈로그 문자열, 코드에 추가된 변경 사항 및 의사-현지화된 페이지, 각 발견 항목마다 하나의 문제 코드가 할당됩니다. 설명용 데이터입니다.

Pull Request에서는 코드 관련 발견 사항이 변경된 줄에 주석으로 표시됩니다. 차단하는 경우에는 오류로, 단순히 보고되는 경우에는 경고로 나타납니다.

검사에서 작업이 차단될 경우 개발자 에이전트는 각 차단 발견 사항을 전달받으며, 예:src/pricing.tsx:7 hardcoded_text: “Simple pricing”, 수정 방법도 함께 안내됩니다. 이 에이전트는 작업을 위한 번역 세션을 통해 번역을 수정하며, 다른 언어의 카탈로그를 직접 편집하지는 않습니다. 텍스트를 소스 카탈로그로 옮기고, 조합된 문장을 플레이스홀더가 포함된 하나의 메시지로 재작성한 뒤, 작업을 넘기기 전에 자체 변경 사항에 대해 코드 규칙을 다시 적용합니다.

모든 출처의 기여 내용

누가 작성했든 모든 변경 사항은 동일한 기준으로 검사됩니다:

  • Coroid의 에이전트국제화된 프로젝트에서 작업하는 경우 각 작업마다 소스 카탈로그와 번역 함수, 문장당 하나의 메시지, 프로젝트의 포매터, 오른쪽에서 왼쪽으로 쓰이는 언어의 논리적 레이아웃, 그리고 Culture에서 지정한 시장 관습이 안내됩니다.
  • 사람 및 기타 도구가 제출한 Pull Request은 Coroid Check를 통해 검사를 받으며 동일한 발견 사항과 주석이 적용됩니다. Coroid GitHub App가 리포지토리에 설치되고 프로젝트 정책이 Pull Request 시 적용되면 모든 pull request에서 이 검사가 실행됩니다.
  • 검사를 통과하지 않고 병합된 변경 사항은 병합 후에 포착됩니다. Coroid 외부에서 병합된 문자열 번역하기해당 항목은 pull request에서 실행된 검사 결과를 읽어들입니다. 그 다음, pull request에서 누락되었거나 오래된 문자열에 대한 번역 작업을 생성합니다. 만약 검사 과정에서 코드상의 문제가 발견된 경우, 관련 작업도 함께 생성됩니다. 병합된 코드 국제화하기pull request에서 확인할 위치를 안내하며, 각 병합 시 각 유형의 작업은 최대 하나씩 생성됩니다.

기존 코드는 절대 차단되지 않습니다:글로벌 대응 준비이를 목록으로 보여주며 사용자가 선택할 때 시작할 수 있는 수정 작업을 생성합니다.

직접 실행하기

엔진은 명령줄 도구coroid-i18n이며, 설정 파일에 지정된 버전입니다:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

source은 카탈로그를 읽지 않고도 코드를 분석하므로 카탈로그가 아직 설정되지 않은 경우에도 작동합니다.--changed또는--diff없이는 전체 리포지토리를 분석합니다. 이 명령어들은 문제를 발견하면 상태 코드 1로 종료되며,--format json를 추가하여 머신이 읽을 수 있는 보고서를 생성하세요.