번역에서의 자리 표시자 및 처리 방법

Updated April 12, 2017
Place holders save the day - Smartcat blog
Smartcat covers all your language needs with AI translation, AI content generation and AI human workflows.

처음으로 소프트웨어 현지화 프로젝트에 참여했던 때가 기억납니다. 복잡한 소프트웨어 현지화 도구를 사용해 산업용 컴퓨터 시스템의 사용자 인터페이스를 번역하는 임무를 맡았습니다. 기술적인 부분은 문제없었지만 UI 번역은 처음이었고, 이 작업은 정말 어려운 도전이었습니다.

사실 그 텍스트의 스타일은 나에게 그리 낯설지 않았다. 어느 정도 IT에 익숙한 편이라 소프트웨어에서 흔히 쓰이는 '컴퓨터' 언어를 잘 알고 있었기 때문이다(하지만 챗봇과 음성 인터페이스의 영향으로 이후 내 시각은 크게 바뀌었다). 진짜 당황스러웠던 부분은 {0}, %d, %setup%, $stop$ 같은 이상하게 생긴 조각들이었다. 이게 무엇을 의미하는지, 기호 사이에 갇힌 단어들을 번역해야 하는지 전혀 알 수 없어서 순식간에 실수를 연발했다. \n으로 표시된 줄바꿈 문자는 제 자신감에 마지막 일격을 가했습니다. 전에는 본 적도 없었고, 가장 문제였던 점은 종종 다른 단어와 합쳐져 표시된다는 것이었습니다. 상황이 이미 우스꽝스러운데다 텍스트가 독일어라 \nein이 "nein"인지 "\n" + "ein"인지 구분하기가 정말 어려웠다. 프로젝트 매니저는 질문 폭탄을 맞고 나니 이런 일을 나 같은 바보에게 맡긴 걸 후회했을 것이다. 트위터에 불평을 쏟아냈을지도 모르겠다.

급한 프로젝트의 번역 파일에서 자리 표시자가 마법처럼 사라진 걸 발견했어요. #PM고민 #패닉시작

— Lau Velázquez (@geekylau) 2013년 10월 9일

$DepartureTime$ 자리 표시자를 $HeureDépart$로 번역하는 번역가들은 단순히 일관성 있을 뿐입니다.

— Olivier Oswald (@ooswald) 2011년 7월 27일

자리 표시자 $Departure Time$을 $HeureDépart$로 번역하는 번역가들은 일관성만 있을 뿐입니다.

번역가가 따옴표 형태를 바꾸기로 결정하는 순간, 게임 내 변수 절반이 사라져 버리는 그 순간.

— Vojtěch Schubert (@falagor)2016년 1월 12일

몇 년이 지난 지금도 그 첫 경험이 떠오르면 미소가 지어집니다. 물론 저는 항상 번역가들에게 변수가 어떻게 작동하는지 설명하는 시간을 갖습니다. 그리고 실수를 피하고 자신과 팀의 시간을 절약하는 궁극적인 방법은 정규 표현식을 사용하는 것입니다. 이를 통해 변수를 수정 불가능하고 쉽게 추적 가능한 객체로 변환할 수 있습니다. 소프트웨어마다 이 객체들은 서로 다른 이름으로 불립니다. Smartcat에서는 이를 '자리 표시자(placeholder)'라고 부릅니다. 정규 표현식이 무엇인지 궁금하시다면, 이는 사소한 수다와는 전혀 무관합니다. 문자 조합을 일치시키고 조작하는 데 사용되는 패턴입니다. 정규 표현식을 배우는 데 프로그래밍 기술은 필요하지 않습니다. 야마가타 유럽의 현지화 전문가 토마스 바키에르(Thomas Vackier)가 만든 이 간단한 프레젠테이션을 클릭해 보세요. 정규 표현식(regex, "regular expression"의 약자)이 무엇인지 쉽게 이해할 수 있습니다.

신비로운 상징들

간단한 예시로, 프로클라이머스의 I’m Gonna Be (500 miles)라는 노래의 몇 줄을 살펴보겠습니다:

하지만 난 500마일을 걸을 거야 그리고 또 500마일을 걸을 거야 단지 천 마일을 걸어 네 문 앞에 쓰러질 그 사람이 되기 위해서

이제 이 가사가 듣는 이가 다른 장소로 이동할 때마다 바뀌도록 하려면 변수가 필요합니다:

하지만 난 %$1마일을 걸을 거야 그리고 %$2마일을 더 걸을 거야 단지 {spelled-number}마일을 걸어 네 {location} 앞에 쓰러질 그 사람이 되기 위해서

여기서 어떤 위험이 도사리고 있을까요? 중요한 문자가 삭제되거나 오용될 수 있습니다. %$1s의 숫자는 순차적 패턴을 따라야 하며, "spelled-number"와 "location"은 번역되지 않아야 합니다. 안타깝게도 모두가 이를 알지는 못합니다.

"초보자들의 이런 혼란을 겪느니 차라리 전문 번역가를 고용하면 되지 않나요?"라고 묻는 사람도 있을 것입니다. 실제 이유가 무엇이든 간에, 기억할 가치가 있는 것은: 현지화 전문가는 태어나는 것이 아니라, 첫걸음을 내디디며 고생하고 그 과정에서 귀중한 경험을 쌓은 누구나 될 수 있다는 점입니다.

초보자 방지, 혹은 세상을 구하는 법

그렇다면 재앙을 막고 편집 시간을 절약하려면 어떻게 해야 할까요? 정규 표현식을 사용해 변수를 설명해 보겠습니다:

  • 연속된 숫자가 포함된 변수의 경우: %\$\ds

  • 중괄호로 묶인 변수의 경우: \{.+?\}

정규 표현식 작성을 위해 이 치트 시트가 매우 유용하며, 테스트를 위한 훌륭한 온라인 도구로 regex101.com을 추천합니다. 이제 변수가 포함된 파일을 Smartcat에 업로드해 보겠습니다. 다음과 같은 화면이 표시됩니다:

변수들은 보라색 단위로 표시되며, 이는 명백히 번역이 불가능한 요소로 키보드 단축키를 통해 원본 텍스트에서 대상 언어로 안전하게 전송될 수 있습니다. 이러한 요소들은 다운로드 후 번역된 문서에서도 그대로 유지됩니다. 자리 표시자 사용은 현지화 프로젝트에만 국한되지 않습니다. 수천 개의 항목이 포함된 대형 공기 펌프 사양서를 상상해 보십시오. 각 항목에는 주문 코드가 할당되어 있으며 모두 매우 유사하게 보이기 때문에 실수하기 쉽습니다.

여기서 한 번의 실수도 매우 불행한 결과를 초래할 수 있습니다. 창고에서 주문을 발송할 때 오류가 발생할 수 있으며, 적절한 설치도 문제가 될 수 있습니다. 고객은 손실을 입거나 더 나쁜 결과를 맞을 수 있습니다: 잘못된 데이터는 기술적 문제를 일으켜 결국 환경 재앙으로 이어질 수 있습니다. 자리 표시자는 번역하지 말고 대상 언어로 안전하게 옮겨야 합니다. 그러니 왜 그걸로 시간을 낭비합니까? 이 우아한 정규 표현식 [A-Z]{2}\d{4}\-\d{4}을 사용해 모든 주문 코드를 찾아내어 마법처럼 수정 불가능한 요소로 변환해 봅시다:

번역 과정(그리고 편집 과정도 포함해서)을 더 쉽고 빠르게 만드는 정말 훌륭한 방법입니다!

현재 자리 표시자는 기본적으로 일반적인 현지화 파일 형식에서만 지원됩니다. 다른 문서 유형에서 사용하시려면 알려주세요.

저는 동료들에게 자리 표시자 사용 경험에 대해 물어보았습니다.

표도르 베즈루코프, 로그루스 IT(키예프 사무소) 전무이사

“문서 형식에서 자리 표시자와 태그를 사용하는 것은 저희에게 흔한 업무 시나리오입니다. 고객이 HTML이나 XML 마크업이 포함된 엑셀 파일을 보낼 때 이 기능들은 정말 큰 도움이 됩니다. Smartcat에서 자리 표시자와 정규 표현식을 지원해 주셔서, 이러한 리소스를 처리하는 일이 훨씬 더 쉽고 편리해졌습니다.”

마리나 일리니흐, 북메이트 현지화 매니저

“우리는 앱 UI에서 변수와 서식을 많이 사용합니다. 태그와 변수를 자리 표시자로 대체함으로써 자동 일관성 검사를 실행하고 가격, 구독 날짜, 링크와 같은 중요한 데이터를 보호할 수 있습니다.”

lexiQA의 CEO 야니스 에반젤루는 복잡한 심정을 털어놓았다:

야니스 에반젤루, lexiQA 최고경영자(CEO)

“번역가들이 자리 표시자, 토큰 및 태그 내 텍스트를 번역할 때 흔히 발생하는 문제가 있습니다. 이스케이프 문자도 종종 무시되곤 합니다. 대부분은 이들이 번역 가능한 어휘 단위가 아니라는 사실을 모릅니다. 프로젝트 관리자들도 마찬가지입니다. 그러나 이런 부주의는 치명적인 오류를 초래할 수 있습니다. 한 번역가가 HTML 서식이 포함된 텍스트를 처리해야 했는데, <p style="border: 1px solid red;"></p> 라인을 실제로 <π στυλ="περίγραμμα: 1 πίξελ συμπαγές κόκκινο;"></π>로 번역했다고 합니다. 그는 "이걸 사용할 개발자가 영어를 모를 수도 있다"고 주장했죠. PM은 번역가의 논리가... 합리적이라고 생각했기 때문에 수정하지 않았습니다!"

그러자 게임 현지화 전문가 롤프 클리셰프스키가 말을 이었다:

«게임 번역가들은 종종 이런 것들을 처리해야 합니다:

그리고 물론, 이와 관련된 온갖 문제들이 있습니다.

여기서 문제는 일부 목적지에는 관사가 필요하다는 점입니다. 따라서 "the Bahamas"이지만 "Barbados"입니다. 독일어로는 "Switzerland"가 "die Schweiz"입니다. 이런 경우 우리는 종종 프로젝트를 거절합니다. 일반적으로 저는 고객에게 텍스트 엔진을 변경하라고 조언합니다. 왜냐하면 저는 엉터리 결과물을 제공하고 싶지 않기 때문입니다. 개발자들은 대개 이렇게 묻습니다: "정말 그렇게 큰 문제인가요?" 글쎄요, 아니죠. 게임은 할 수 있으니까요. 그렇다면 이런 문제를 어떻게 처리해야 할까요? 클라이언트에게 설명하고 문제를 알리세요. 그들이 엔진을 고칠 수 없거나 고치려 하지 않는데 돈이 필요하다면 작업을 진행하되, 크레딧에 이름을 올리지 않도록 하세요.»
💌

뉴스레터를 구독하세요

이메일 *