AI 및 기술
타임스탬프를 유지하며 SRT 자막을 번역하는 방법자막 번역이 정밀함을 요구하는 이유 SRT 파일은 매우 엄격하게 구조화된 형식입니다. 각 자막 블록에는 순서 번호, 타임스탬프 범위(시작 → 끝), 그리고 한두 줄의 텍스트가 포함됩니다. 타임스탬프를 건드리지 않고…
Amanda Lee
PO, YAML, .properties, RESX, XLIFF, JSON 로케일 파일은 문장 목록처럼 보이지만, 산문인 것은 값뿐입니다. 키는 코드가 조회하는 식별자이고, 플레이스홀더는 런타임에 코드가 채우는 슬롯이며, 이스케이프와 마크업은 파서가 의존하는 구문입니다. 줄 전체를 텍스트로 취급하는 번역가는 읽기에는 훌륭하지만 로드되지 않는 파일, 혹은 로드는 되지만 화면이 처음 숫자를 포맷하는 순간 충돌하는 파일을 만들어 냅니다. 이 오류는 보통 한 언어에서만 나타나기 때문에 리뷰에서 가장 잡아내기 어려운 종류의 버그가 됩니다.
영어에는 복수형이 두 가지이므로 모든 언어가 그렇다고 생각하기 쉽습니다. GNU gettext 매뉴얼은 그것이 왜 틀렸는지 보여 줍니다. 각 언어는 자체 Plural-Forms 규칙을 선언하고, 영어는 nplurals=2를 사용하며, 러시아어는 숫자의 마지막 자릿수에 따라 선택되는 세 가지 형태가 필요합니다. 러시아어로 번역된 PO 파일에 두 가지 형태만 채워져 있으면 컴파일되고 실행도 되지만, 2, 3, 4로 끝나는 모든 수에 대해 잘못된 문법을 출력합니다. 복수형을 올바르게 처리한다는 것은 원본 언어에 우연히 있던 개수가 아니라, 대상 언어가 요구하는 개수만큼 msgstr 항목을 만드는 것입니다.
어순은 언어마다 다르기 때문에, 값이 두 개 들어간 문장은 그 순서를 바꿔야 하는 경우가 많습니다. %1$s와 %2$s 같은 위치 지정 플레이스홀더, 또는 {count}와 {user} 같은 이름 있는 플레이스홀더는 바로 그 때문에 존재합니다. 번역에서 순서를 바꿀 수는 있지만, 각각은 여전히 정확히 한 번씩 나타나야 합니다. 아무 표시 없는 %s 같은 익명 플레이스홀더는 안전하게 순서를 바꿀 수 없으므로, 번역 후가 아니라 번역 전에 원본 문자열에서 고쳐 두는 것이 좋습니다.
형식마다 까다로운 부분이 있습니다. YAML에서는 사양이 리터럴 블록(|)과 접힌 블록(>)에 서로 다른 줄바꿈 동작을 부여하고, 앵커(&)와 별칭(*)은 한 노드가 다른 노드를 재사용하게 해 주므로 둘 다 그대로 통과해야 합니다. XLIFF 2.1은 원래 서식을 <ph>, <pc> 같은 인라인 요소로 감싸며, 번역은 이를 올바른 단어 주변의 제자리에 유지해야 합니다. .NET에서는 RESX 리소스가 런타임에 현재 UI 문화권에 맞춰 이름으로 조회되므로, 이름이 바뀐 data 요소는 조용히 기본 언어로 대체됩니다. 그리고 Java .properties 파일은 처음 나오는 이스케이프되지 않은 =, : 또는 공백을 키 구분자로 취급하므로, 번역된 키에 섞여 든 콜론 하나가 키를 둘로 쪼갭니다.
거의 항상 그 언어에서만 플레이스홀더가 변경되었기 때문입니다. 이름이 바뀌었거나, 빠졌거나, 중복된 경우입니다. 코드는 모든 언어에 같은 인수를 전달하므로, 더 이상 그 인수와 맞지 않는 단 하나의 번역이 해당 화면을 포맷할 때 실패합니다.
복수형 규칙은 소프트웨어가 아니라 언어에 속합니다. gettext는 각 언어가 자체 규칙을 선언할 수 있게 하며, 러시아어는 숫자의 마지막 자릿수에 따라 세 가지 형태 중 하나를 선택하므로, 두 가지 형태만 있는 번역은 많은 수에 대해 잘못된 문법을 출력합니다.
전통적인 Properties.load(InputStream)가 파일을 Latin-1로 읽기 때문입니다. 그 범위를 벗어난 문자는 \uXXXX 이스케이프로 작성하거나, 올바른 인코딩을 사용하는 리더로 파일을 로드해야 합니다.
네, 위치 지정(%1$s, %2$s)이거나 이름 있는({count}, {user}) 플레이스홀더라면 가능합니다. 자연스러운 어순을 위해 순서를 바꿔야 하는 경우도 많습니다. 다만 모든 플레이스홀더는 정확히 한 번씩 나타나야 합니다. 아무 표시 없는 %s 플레이스홀더는 안전하게 순서를 바꿀 수 없습니다.
키는 텍스트가 아니라 식별자입니다. 코드는 키로 문자열을 요청하므로, 키가 번역되면 조회가 실패하고 앱은 원시 키를 표시하거나 기본 언어로 대체됩니다.
PO, YAML, .properties 또는 RESX 파일을 업로드하면 키, 플레이스홀더, 이스케이프, 구조가 원래 자리에 그대로 남은 채로 돌려받습니다.
로케일 파일 무료 번역
AI 및 기술
타임스탬프를 유지하며 SRT 자막을 번역하는 방법자막 번역이 정밀함을 요구하는 이유 SRT 파일은 매우 엄격하게 구조화된 형식입니다. 각 자막 블록에는 순서 번호, 타임스탬프 범위(시작 → 끝), 그리고 한두 줄의 텍스트가 포함됩니다. 타임스탬프를 건드리지 않고…
Amanda Lee
AI 및 기술
온라인에서 PowerPoint 프레젠테이션을 번역하는 방법프레젠테이션 번역의 진짜 어려움 PowerPoint 프레젠테이션은 단순한 텍스트 그 이상입니다. 모든 슬라이드는 정교하게 설계된 캔버스로, 텍스트 상자는 시각적 균형을 위해 배치되고 글꼴 크기는 위계를 만들어냅니다…
Amanda Lee