이글로벌화품질 관리에서의 검사는 국제화된 프로젝트를 전 세계에서 사용 가능하게 유지합니다. 이 검사는 작업 QA와 풀 리퀘스트 단계에서 수행되며, 변경 사항이 영향을 미친 부분만을 확인합니다:
- 카탈로그.변경으로 추가되거나 수정된 문자열로, 모든 언어로 제공됩니다.
- 코드.특정 언어나 문화권을 가정한 텍스트 및 서식이 포함된 변경으로 추가된 줄입니다.
- 페이지.프로젝트에서 애플리케이션 실행 방법을 정의할 때, 해당 페이지는의사 번역.
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_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 | 마법사의 문화 단계에서 설정되며, 다음을 참조하세요:문화 |
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 mainsource는 카탈로그를 읽지 않고도 코드를 분석하므로 카탈로그가 아직 설정되지 않은 경우에도 작동합니다.--changed또는--diff을 사용하면 전체 저장소를 분석합니다. 무언가 발견되면 두 명령어 모두 종료 코드 1을 반환하며, 다음을 추가하세요:--format json머신이 읽을 수 있는 보고서를 위해서입니다.