이글로벌화품질 관리 단계의 검사는 프로젝트를 전 세계에서 사용 가능하게 만듭니다. 이 검사는 작업 QA와 풀 리퀘스트에서 수행되며, 변경 사항이 영향을 준 부분만 확인합니다:
- 카탈로그.변경으로 추가되거나 수정된 문자열은 모든 언어로 표시됩니다.
- 코드.변경으로 추가된 줄은 특정 언어나 문화를 가정한 텍스트 및 서식입니다.
- 페이지.프로젝트에서 애플리케이션 시작 방법을 정의할 때, 페이지는의사 번역.
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_mapping | toUpperCase()또는toLowerCase()로케일을 고려하지 않고 텍스트에 적용되는 경우 | 아니요 |
physical_direction | 오른쪽에서 왼쪽으로 쓰이는 언어를 사용하는 프로젝트에서 CSS 및 유틸리티 클래스의 좌우 방향 | 아니요 |
postal_code_format | 특정 국가의 패턴으로 유효성 검사를 받는 우편번호 | 아니요 |
phone_number_format | 북미 지역용으로 유효성 검사를 받는 전화번호 | 아니요 |
latin_only_input | a–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 mainsource은 카탈로그를 읽지 않고도 코드를 분석하므로 카탈로그가 아직 설정되지 않은 경우에도 작동합니다.--changed또는--diff없이는 전체 리포지토리를 분석합니다. 이 명령어들은 문제를 발견하면 상태 코드 1로 종료되며,--format json를 추가하여 머신이 읽을 수 있는 보고서를 생성하세요.