문서

글로벌화 검사

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

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

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

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

기본적으로 차단되는 항목

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

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

카탈로그 코드

코드의미기본적으로 차단됨
missing문자열에 번역이 없음예
invalid_syntax번역 결과가 올바르게 파싱되지 않음, 예: 손상된 ICU 형식예
placeholder_mismatch플레이스홀더가 소스와 다름예
plural_categories해당 언어에 필요한 복수형이 누락됨예
stale문자열이 번역된 후 소스가 변경됨아니요

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

코드 코드

코드발견되는 내용기본적으로 차단됨
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마법사의 문화 단계에서 설정되며, 다음을 참조하세요:문화
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의 에이전트국제화 프로젝트에서 작업하는 경우 각 작업에 소스 카탈로그와 번역 함수, 문장당 하나의 메시지, 프로젝트의 서식기, 오른쪽에서 왼쪽으로 쓰이는 언어의 논리적 레이아웃, 그리고 문화에서 지정한 시장 관례가 안내됩니다.
  • 사람과 다른 도구가 제출한 Pull requestCoroid Check를 통해 검사를 거치며 동일한 발견 사항과 주석이 적용됩니다. 다음을 활성화하세요:모든 PR를 리뷰하세요를 사용하여 모든 pull request에서 실행하세요.
  • 검사를 통과하지 않고 병합된 변경 사항병합 후에 포착됩니다. Coroid 외부에서 병합된 문자열 번역는 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머신이 읽을 수 있는 보고서를 위해서입니다.