코드 변수(%s, HTML)를 깨뜨리지 않고 .po 파일을 번역하는 방법
간단한 작업으로 시작합니다. WordPress 테마를 스페인어로 번역합니다. .mo 파일을 업로드하고 사이트를 새로 고침하면...
치명적인 오류: Uncaught ArgumentCountError: Too few arguments to function sprintf()...
또는 사이트가 로드되지만 닫는 </div> 태그가 </ div>로 번역되었기 때문에 레이아웃이 엉망이 되었을 수 있습니다.
이것은 현지화 작업을 하는 모든 개발자의 가장 큰 두려움입니다. 기술적인 .po 파일에 일반 번역 도구(Google 번역 또는 기본 AI 래퍼와 같은)를 사용할 때 코드를 텍스트와 다르게 취급하지 않습니다. 변수를 "번역"하려고 시도하고 그 과정에서 웹사이트를 망가뜨립니다.
이 가이드에서는 이것이 왜 발생하는지, 그리고 자동 번역에서 100% 코드 안전을 보장하는 방법을 정확히 설명합니다.
재앙의 해부: %s가 사이트를 망가뜨리는 이유
WordPress는 동적 텍스트를 처리하기 위해 Gettext 시스템과 sprintf()와 같은 PHP 함수를 사용합니다.
예를 들어 다음과 같은 문자열이 있을 수 있습니다.
msgid "Search results for %s"
%s는 PHP가 사용자의 검색 쿼리를 삽입할 자리 표시자 변수입니다.
일반 AI가 잘못 이해하는 방식
이 문자열을 표준 대규모 언어 모델(LLM)이나 번역 API에 입력하면, %s를 또 다른 이상한 단어로 봅니다. 그 주변의 문법이나 구두점을 수정하려고 할 수 있습니다.
가장 흔히 볼 수 있는 구문 오류는 다음과 같습니다.
-
추가된 공백:
- 원본:
Hello %s - 나쁜 번역:
Hola % s - 결과: PHP는
%s를 찾지만% s를 봅니다. 변수가 로드되지 않아 종종 치명적인 오류가 발생합니다.
- 원본:
-
HTML 환각:
- 원본:
Click <strong>here</strong> to login. - 나쁜 번역:
Haga clic <strong>aquí</ strong> para iniciar sesión. - 결과: AI가 닫는 태그
</ strong>안에 공백을 추가했습니다. CSS가 깨지고 페이지의 나머지 부분이 굵게 표시됩니다.
- 원본:
-
인수 교환:
- 원본:
Page %1$s of %2$s - 나쁜 번역:
Página %2$s de %1$s - 결과: AI는 숫자를 바꾸면 문장이 더 자연스럽게 들릴 것이라고 결정했습니다. 이제 페이지 매김에 "Page 10 of 1"이라고 표시됩니다.
- 원본:
"수동 수정"의 함정
대부분의 개발자는 파일을 수동으로 검토하여 이 문제를 해결하려고 합니다. 50개의 문자열이 있는 작은 플러그인이 있다면 괜찮습니다. 하지만 5,000개의 문자열이 있는 WooCommerce 스토어를 번역한다면 어떨까요?
빠진 세미콜론 하나나 %s 변수 안의 추가 공백 하나를 찾기 위해 5,000줄의 코드를 스캔하는 것은 불가능합니다. 몇 시간이 걸리고, 사람의 눈은 필연적으로 무언가를 놓칠 것입니다.
Regex(정규 표현식) 스크립트는 존재 여부를 확인하는 데 도움이 될 수 있지만, 문맥에 따른 재정렬 문제나 미묘한 HTML 속성 손상은 거의 잡아내지 못합니다.
해결책: "구문 잠금(Syntax Locking)"
.po 파일을 안전하게 번역하는 유일한 방법은 AI가 코드를 건드리지 못하게 하는 것입니다. 여기에는 구문 잠금이라는 프로세스가 필요합니다.
이것이 SimplePoTranslate의 핵심 기술입니다.
일반 도구와 달리 우리는 단순히 AI에 텍스트를 덤프하지 않습니다. 먼저 Gettext 구조를 파싱합니다. "안전 모드"가 작동하는 방식은 다음과 같습니다.
- 분석:
.po파일을 스캔하여 모든 변수(%s,%d), 모든 위치 인수(%1$s) 및 모든 HTML 태그(<br/>,<span>)를 식별합니다. - 추출 및 잠금: 이 요소를 문자열에서 일시적으로 제거하고 불변 토큰으로 바꿉니다.
- 입력:
Hello <strong>%s</strong> - AI가 보는 것:
Hello [TOKEN_1][TOKEN_2]
- 입력:
- 번역: AI는 "Hello"라는 텍스트를 "Hola"로 번역하지만, 잠겨 있기 때문에
[TOKEN_1]또는[TOKEN_2]를 물리적으로 변경할 수 없습니다. - 재구성: 원본 코드를 번역된 문자열의 정확한 위치에 다시 삽입합니다.
결과: 깨진 사이트 제로
AI가 실제 %s 또는 HTML 문자와 상호 작용하지 않기 때문에 번역 엔진이 변수 안에 공백을 추가하거나 태그를 손상시키는 것은 수학적으로 불가능합니다.
러시아어 또는 폴란드어와 같은 언어에 대한 복잡한 복수형 규칙(msgid_plural)도 처리하여 올바른 카운트에 올바른 변수가 사용되도록 합니다.
코드 도박을 멈추세요
언어 파일을 업로드할 때마다 행운을 빌 필요는 없습니다. 현지화는 PHP 오류를 디버깅하는 것이 아니라 새로운 고객에게 다가가는 것이어야 합니다.
SimplePoTranslate는 코드 무결성을 중시하는 개발자를 위한 가장 안전하고 진보된 클라우드 기반 도구입니다.
- 클라우드 기반: 설치할 플러그인이 없습니다.
- 문맥 인식: 자연스러운 표현을 위해 Gemini/GPT-4급 AI를 사용합니다.
- 구문 잠금: 변수에 대한 확실한 보호.
골치 아픈 일 없이 번역할 준비가 되셨습니까? SimplePoTranslate.com에서 무료로 시작하세요