← 개념

성별 일치

일부 언어는 문장의 대상이 되는 사람의 성별에 따라 동사와 형용사가 변합니다. 영어는 대부분 그렇지 않기 때문에 {username} has been invited처럼 작성한 문구는 영어에서는 한 문장이지만 스페인어, 프랑스어, 러시아어에서는 두세 문장이 됩니다. Langsys는 복수형을 생성할 때와 같은 방식으로 번역 과정에서 이를 처리하므로, 사용자는 인수 하나만 전달하면 됩니다.

시청 · 0:39 성별 일치

파이프라인이 만들어내는 결과

대상 언어에서 일치(agreement) 처리가 필요하면 Langsys가 해당 로케일의 문자열을 필요한 분기로 다시 작성합니다. 바로 ICU select입니다. 원문 문구는 절대 바뀌지 않으며, 분기를 직접 작성할 필요도 없습니다.

직접 작성할 필요 없이 파이프라인이 처리합니다
// Your source phrase, unchanged:
"{username} has been invited"

// What the Spanish translation becomes — note invitado / invitada:
"{username_gender, select, male {{username} ha sido invitado} \
female {{username} ha sido invitada} \
other {{username} ha sido invitado/a}}"

꼭 기억해 둘 두 가지가 있습니다. 인수의 이름은 활용 대상 변수 이름 뒤에 _gender를 붙인 형태이며(예: {username}는 username_gender가 됩니다), 분기는 항상 male, female, other입니다. 또한 이 인수는 필요한 로케일에서만 나타납니다. 그래서 누군가 성별 구분이 있는 언어로 앱을 불러오기 전까지는 눈에 띄지 않습니다.

전달하기

알고 있는 인수는 항상 전달하세요. 그러면 독자에게 올바르게 활용된 문장이 표시됩니다.

// The argument is named after the variable it inflects, + _gender.
// Branches are always male / female / other.
t('{username} has been invited', 'Team', {
  username: user.name,
  username_gender: user.gender ?? 'other',
});

성별을 모르시나요? 'other'를 명시적으로 전달하세요. 중립 분기에 해당합니다. 인수가 누락되었을 때 표시되는 결과는 SDK마다 다르며, 각 SDK 페이지에 설명되어 있습니다. 또한 모든 SDK 페이지에서 해당 SDK 고유의 방식으로 작성된 호출 예시를 확인할 수 있습니다.

어떤 문구에 필요할까요?

직접 작성한 코드만으로는 알 수 없으며, 이는 구조상 당연합니다. 이 인수는 대상 로캘별로 번역 과정에서 추가되므로, 원본 문구나 코드베이스에는 이를 암시하는 단서가 전혀 없습니다. 확인하는 방법은 세 가지입니다.

카탈로그를 읽어 보세요. 앱이 가져오는 번역은 승격된 문자열이므로, 답은 이미 클라이언트에 있습니다. 지원하는 로케일의 카탈로그를 가져온 다음(모든 SDK에서 제공합니다) , select,가 포함된 항목을 찾아보세요. 그러면 정확한 문구와 인수 이름을 알 수 있고, 배포하는 각 로케일에 대해 CI에서 실행해도 부담이 없을 만큼 가볍습니다.

// The catalog your app fetches IS the promoted strings — grep it.
const wanting = Object.entries(catalog)
  .filter(([, translation]) => translation.includes(', select,'))
  .map(([phrase]) => phrase);
// → every phrase (and, from the string, every argument) this locale needs

디버그를 켜세요(JavaScript SDK). 초기화 설정에 debug: true를 전달하고 성별이 구분되는 로케일로 앱을 둘러보세요. 제공하지 않은 인수를 번역에서 요구하는 문구마다 SDK가 해당 인수를 명시한 Langsys Warning을 한 번씩 기록합니다. 문구당 로케일별로 한 번만 기록되며, 프로덕션에서는 출력되지 않습니다. 한 가지 주의할 점이 있습니다. 콘텐츠 블록 및 문구 컴포넌트 안에서는 방어적으로 전달한 _gender도 일치하지 않는 매개변수로 보고되는데, 이는 select가 나타나지 않는 소스 텍스트를 기준으로 검사하기 때문입니다.

확실하지 않다면 전달하세요. 문자열에 없는 인수 값은 렌더링 시 무시되므로, 사람을 나타내는 모든 변수에 _gender를 보내도 안전하며 아직 살펴보지 않은 로케일까지 대응할 수 있습니다.

문구당 변수는 하나만 사용할 수 있습니다. 일치를 결정하는 변수는 하나뿐입니다. 개수 와 성별처럼 두 개가 함께 쓰인 문자열은 중첩 ICU로 변환되지 않고 그대로 유지되므로 하나의 플랫 문장으로 번역됩니다.

문서 및 학습 센터 검색