WPML 사이트에서 텍스트 음성 변환 제대로 사용하기
WPML 사이트를 운영하면서 각 번역본마다 알맞은 목소리로 음성을 제공하려면, 선택하는 플러그인이 세 가지를 정확히 처리해야 합니다. 번역된 포스트 읽기, 언어별 오디오 파일 생성, AJAX 호출 내에서 현재 언어 감지입니다. 대부분의 TTS 플러그인은 이 중 하나에서 실패합니다. 텍스트 음성 변환 - TTSWP는 이 세 가지를 모두 처리하도록 설계되었습니다.
이 글은 Weglot 가이드의 실용적인 대응편입니다. 기술적 접근 방식이 정반대이므로, 그 이유부터 설명하겠습니다.
WPML은 번역본을 실제 포스트로 저장합니다. Weglot은 그렇지 않습니다.
WPML과 Weglot은 WordPress 다국어를 매우 다른 방식으로 구현합니다. 이 차이가 TTS 플러그인의 동작 방식을 결정합니다.
WPML은 각 번역본마다 별도의 포스트 레코드를 생성합니다. 영어 글은 wp_posts에 하나의 ID로 저장되고, 스페인어 번역본은 같은 테이블에 다른 ID로 저장됩니다. WPML은 icl_translations 테이블을 통해 이들을 연결합니다. 번역된 텍스트는 사람이 직접 편집하거나 WPML의 기계 번역 파이프라인을 통해 생성된 실제 데이터베이스 텍스트입니다.
Weglot은 반대입니다. 데이터베이스에는 원본만 저장됩니다. 번역은 런타임에 생성되어 브라우저에 도달하기 전에 출력 HTML에 삽입됩니다. Weglot 사이트에서 get_post()로 포스트 콘텐츠를 읽으면 항상 원본 언어만 반환됩니다.
TTS 관점에서 이 차이는 결정적입니다. WPML에서는 데이터베이스의 포스트 콘텐츠를 읽는 것이 올바른 방식입니다. 번역된 텍스트가 이미 존재하기 때문입니다. 문제는 플러그인이 어떤 포스트를 읽는지, 어떤 언어로 인식하는지, 오디오 파일을 하나만 저장하는지 여러 개 저장하는지에서 발생합니다.

WPML TTS 플러그인이 겪는 4가지 오류 유형
다국어 WPML 스테이징 사이트에서 여러 설정을 테스트한 결과, 동일한 네 가지 문제가 반복적으로 나타났습니다. 현재 사용 중인 플러그인에 이 문제가 있다면, 방문자가 듣는 오디오는 실제로 게시한 오디오와 다를 수 있습니다.
1. AJAX 언어 감지 오류로 인한 잘못된 언어 오디오
이것이 가장 치명적인 문제입니다. 대부분의 TTS 플레이어는 페이지 로드 후 admin-ajax나 REST 요청을 통해 오디오 파일 또는 스트림 URL을 가져옵니다. 이 요청 안에서 WordPress는 프론트엔드 URL 컨텍스트를 잃어버립니다. 플러그인이 WPML에 현재 언어를 물어보면 잘못된 답을 받습니다.
주된 원인은 오래된 ICL_LANGUAGE_CODE 상수입니다. 이 상수는 요청 초기에 한 번 정의되며 WPML이 부트스트랩 시점에 감지한 언어를 반영합니다. 스페인어 페이지에서 AJAX 호출이 실행될 때 이 상수는 스페인어가 아닌 기본 언어를 반환하는 경우가 많습니다. 그러면 TTS 플러그인은 스페인어 글에서 영어 오디오를 생성하거나, 캐시된 영어 파일을 가져와 스페인어 플레이어에서 재생합니다.
올바른 방법은 WPML의 런타임 필터를 사용하는 것입니다. wpml_current_language 필터는 호출 시점의 활성 언어를 반환합니다. wpml_post_language_details 훅은 특정 포스트가 속한 언어를 반환하는데, 오디오를 요청 상태가 아닌 포스트 ID에 연결하므로 더 안전합니다.
사용자 입장에서 확인하는 방법: 번역된 글을 열고 재생 버튼을 누른 후 오디오 첫 1초를 들어보세요. 영어가 아닌 페이지에서 영어 목소리가 들린다면 플러그인이 잘못된 언어 감지 경로를 사용하고 있는 것입니다.
2. 모든 번역본이 동일한 오디오 파일을 공유
일부 플러그인은 원본 포스트가 게시될 때 오디오를 생성하고 동일한 파일을 모든 번역본에 연결합니다. 빠르고 저렴하지만 잘못된 방식입니다. 스페인어 독자가 영어 음성을 듣거나, 읽고 있는 페이지와 맞지 않는 억양의 합성 음성을 듣게 됩니다.
WPML 번역본은 별도의 ID를 가진 별도의 포스트이므로, 번역된 포스트마다 새 오디오 파일을 생성하는 것이 올바른 동작입니다. 각 파일은 자신의 포스트 ID에 저장되고 해당 번역본에만 제공됩니다. TTSWP는 원본 ID가 아닌 포스트 ID를 캐시 키로 사용하는 이 방식을 따릅니다.
3. 모든 언어를 동일한 목소리로 읽기
영어 학습 목소리가 프랑스어 글을 읽으면 단어가 맞더라도 어색하게 들립니다. ElevenLabs 목소리는 학습 데이터에서 억양과 운율을 가져옵니다. 미국 영어로 학습된 목소리는 해당 언어에 맞는 목소리를 지정하지 않으면 프랑스어를 미국식 억양으로 읽습니다.
TTSWP를 사용하면 각 WPML 언어에 ElevenLabs 목소리를 하나씩 매핑할 수 있습니다. 스페인어 번역본은 스페인어 목소리로, 독일어 번역본은 독일어 목소리로 읽힙니다. 정확한 설정 방법은 언어별 목소리 매핑 문서를 참고하세요.
4. 오디오 언어를 선언하지 않는 스키마
대부분의 플러그인이 놓치는 AEO 세부 사항입니다. AudioObject 구조화 데이터에는 inLanguage 속성이 있어야 합니다. 값은 페이지의 hreflang과 일치하는 IETF BCP 47 태그(es, de, nb-NO)여야 합니다.
일치하는 inLanguage 값은 검색 엔진과 AI 도구에 오디오 언어에 대한 명확하고 기계가 읽을 수 있는 신호를 제공합니다. 이미 페이지에 있는 hreflang 신호를 강화합니다. 스키마가 없거나 모든 번역본이 동일한 영어 값을 공유하면 이 신호가 사라지고 언어 인식 시스템은 버전을 구별할 수 없습니다. AI 엔진이 오디오를 처리하는 방식은 AEO 및 오디오 가이드에서 다룹니다.
WPML 지원에 적합한 ElevenLabs 모델 선택
ElevenLabs는 여러 모델을 제공하며, 모든 모델이 동일한 언어를 지원하지는 않습니다. WPML에서 선택한 모델이 지원하지 않는 언어를 사용한다면 해당 번역본의 음성을 제대로 생성할 수 없습니다.
2026년 기준 현재 지원 범위:
- Multilingual v2는 영어, 스페인어, 프랑스어, 독일어, 이탈리아어, 포르투갈어, 네덜란드어, 폴란드어, 스웨덴어, 덴마크어, 핀란드어, 터키어, 아랍어, 힌디어, 일본어, 한국어, 중국어 등 29개 언어를 지원합니다.
- Flash v2.5는 v2의 모든 언어에 헝가리어, 노르웨이어, 베트남어를 추가해 32개 언어를 지원하며, 약 75ms의 모델 지연 시간을 제공합니다.
- Eleven v3는 74개 언어를 지원하며 가장 넓은 커버리지를 제공합니다. 단 한 가지 중요한 제약이 있습니다. 실시간 사용을 위해 설계되지 않았다는 점입니다. ElevenLabs가 직접 명시한 내용입니다. 모델이 더 크고 고품질 음성 코덱을 사용하므로 생성 시간이 더 깁니다. 실시간 또는 대화형 사용 사례에는 ElevenLabs가 Flash v2.5를 권장합니다.
노르웨이어 번역본이 있는 WPML 사이트라면 Multilingual v2로는 처리할 수 없고 Flash v2.5가 필요합니다. v3만 지원하는 언어가 필요한 사이트는 더 넓은 커버리지를 얻는 대신 더 긴 생성 지연 시간을 감수해야 합니다. TTSWP는 각 언어를 원하는 목소리로 라우팅하므로 필요에 따라 모델을 혼합해서 사용할 수 있습니다.
TTS 플러그인이 WPML을 제대로 처리하는지 확인하는 방법
코드를 읽지 않아도 됩니다. 브라우저에서 5분이면 확인할 수 있습니다.
- 언어를 전환합니다. 원본 글을 열고 WPML 언어 전환기를 사용해 번역본으로 이동합니다. URL이 변경되었는지(예:
/es/로) 그리고 포스트 슬러그가 번역된 슬러그인지 확인합니다. - 재생 버튼을 누르고 들어봅니다. 목소리가 페이지 언어와 일치해야 합니다. 스페인어 페이지에서 영어 목소리가 들리면 첫 번째 단계에서 플러그인이 실패한 것입니다.
- 오디오 URL을 확인합니다. 플레이어를 마우스 오른쪽 버튼으로 클릭해 오디오 소스를 복사합니다. 원본 글의 오디오 URL과 비교합니다. 언어가 달라도 두 URL이 동일하다면 플러그인이 파일 하나를 공유하고 있는 것입니다.
- 페이지 소스를 열고
AudioObject를 검색합니다.inLanguage필드를 찾습니다. 페이지 언어 코드와 일치해야 합니다. 필드가 없거나 항상en이라면 스키마가 잘못된 것입니다. - hreflang을 확인합니다. 오디오의
inLanguage는 페이지의hreflang과 일치해야 합니다. 불일치는 AI 검색을 혼란스럽게 하고 언어별 인용을 방해합니다.
구매 전에 이 체크리스트를 실행해 보세요. TTSWP뿐 아니라 모든 TTS 플러그인에 적용됩니다.
올바른 WPML TTS 설정의 기준
프로덕션 WPML 사이트에서 권장하는 설정입니다. 각 항목은 위의 오류 유형에 대응합니다.
| 항목 | 잘못된 방식 | 올바른 방식 |
|---|---|---|
| AJAX 언어 감지 | ICL_LANGUAGE_CODE 상수 | 포스트 ID에 연결된 wpml_current_language 필터 또는 wpml_post_language_details |
| 오디오 저장 | 모든 번역본이 파일 하나 공유 | 번역된 포스트 ID별로 파일 하나씩, CDN에서 제공 |
| 목소리 선택 | 모든 언어에 동일한 목소리 | WPML 언어별로 ElevenLabs 목소리 하나씩 매핑 |
| 모델 선택 | 모든 언어에 고정 모델 사용 | 언어별로 Multilingual v2, Flash v2.5, Eleven v3 중 선택 |
| 스키마 | 없거나 영어만 있는 AudioObject | 페이지 hreflang과 일치하는 inLanguage가 있는 AudioObject |
TTSWP는 기본값으로 오른쪽 열을 따릅니다. 플러그인은 번역된 포스트를 직접 읽고, 포스트 ID별로 새 오디오 파일을 생성하며, CloudFront를 통해 제공하고, 언어별 AudioObject 스키마를 출력합니다. 설정 과정은 WPML 연동 문서에서 단계별로 안내합니다.
솔직한 한계
언어별 오디오는 파일 하나를 공유할 때보다 더 많은 문자 크레딧을 소비합니다. 1,500단어 글을 5개 언어로 번역하면 한 번이 아니라 다섯 번의 생성 비용이 발생합니다. 정확성의 대가입니다. 파일 하나를 공유하면 더 저렴하지만 오디오가 페이지와 맞지 않습니다. 크레딧 절약을 위해 독자 경험을 희생하는 것은 권장하지 않으며, 크레딧 문서에도 이 내용을 명시해 두었습니다.
예산이 부족하다면 실제 트래픽이 발생하는 언어에만 오디오를 생성하세요. WPML의 언어 통계와 분석 도구를 통해 어떤 번역본에 음성이 필요한지 파악할 수 있습니다.
자주 묻는 질문
TTSWP는 WPML을 기본으로 지원하나요?
네. 두 플러그인을 모두 활성화하면 TTSWP가 WPML을 감지하고, 각 언어의 번역된 포스트 콘텐츠를 읽어 번역본마다 별도의 오디오 파일을 저장합니다. TTSWP 설정에서 언어별로 목소리를 지정한 후 평소대로 번역본을 게시하면 됩니다. 번역본이 업데이트되면 오디오가 자동으로 다시 생성됩니다. 설정 단계는 WPML 연동 페이지에서 확인하세요.
번역된 페이지에서 현재 TTS 플러그인이 모든 것을 영어로 읽는 이유가 무엇인가요?
가장 가능성 높은 원인은 AJAX 호출 내에서 사용되는 더 이상 권장되지 않는 ICL_LANGUAGE_CODE 상수입니다. AJAX 실행 중 이 상수는 활성 언어 대신 사이트의 기본 언어를 반환하는 경우가 많아, 영어가 아닌 페이지에서도 영어 오디오를 생성하거나 제공합니다. 해결책은 wpml_current_language 필터로 전환하거나 포스트 ID에서 직접 언어를 읽는 것입니다.
WPML 언어별로 다른 ElevenLabs 목소리를 사용할 수 있나요?
네. TTSWP는 각 WPML 언어에 ElevenLabs 목소리를 하나씩 매핑합니다. 스페인어 번역본은 스페인어 목소리로, 독일어 번역본은 독일어 목소리로 읽힙니다. 언어별로 다른 모델을 선택할 수도 있습니다. 대상 언어가 Multilingual v2는 지원하지 않고 Flash v2.5나 Eleven v3만 지원하는 경우에 유용합니다.
ElevenLabs가 WPML 사이트에서 지원하는 언어는 무엇인가요?
Multilingual v2는 29개 언어, Flash v2.5는 노르웨이어, 헝가리어, 베트남어를 추가해 32개 언어, Eleven v3는 74개 언어를 지원합니다. 지연 시간 예산 내에서 가장 넓은 커버리지를 제공하는 모델을 선택하세요. 대부분의 WPML 사이트는 Multilingual v2나 Flash v2.5로 충분합니다. 드문 언어가 필요한 사이트는 해당 번역본을 Eleven v3로 처리합니다.
TTSWP는 AI 검색을 위한 언어별 스키마를 출력하나요?
네. TTSWP는 번역된 포스트마다 페이지의 hreflang과 일치하는 inLanguage 값이 포함된 AudioObject를 출력합니다. 이를 통해 검색 엔진과 AI 도구는 어떤 오디오가 글의 어떤 언어 버전에 속하는지 명확히 파악할 수 있습니다. 모든 번역본이 동일하게 태그되는 상황을 방지합니다.
다음 단계
현재 사용 중인 TTS 플러그인으로 위의 5단계 브라우저 테스트를 실행해 보세요. 어느 단계에서든 실패한다면, 번역본을 더 추가하기 전에 해당 문제를 먼저 해결해야 합니다. 다섯 가지를 모두 기본으로 처리하는 설정을 원한다면 WordPress.org에서 텍스트 음성 변환 - TTSWP를 설치하고, TTSWP 백엔드에 연결한 후 WPML 언어별로 목소리를 지정하세요. 나머지는 플러그인이 처리합니다.
관련 기사
워드프레스 텍스트 음성 변환 플러그인 추천 (2026)
2026년 최고의 워드프레스 텍스트 음성 변환 플러그인 7가지를 중립적으로 비교합니다. 각 플러그인의 강점과 단점, 전체 기능 비교표를 포함합니다.
Weglot 워드프레스 사이트에서 텍스트 음성 변환 사용하기
대부분의 TTS 플러그인은 Weglot 지원을 내세우지만 실제로는 번역된 텍스트가 아닌 데이터베이스에서 텍스트를 읽습니다. 진정한 Weglot 호환성이 무엇을 의미하는지 알아보세요.
텍스트 음성 변환이란? 쉽게 이해하는 완벽 가이드
텍스트 음성 변환은 글을 오디오로 바꿔주는 기술입니다. 작동 원리, 활용 이유, 그리고 WordPress 사이트에 적용하는 방법을 알아보세요.