WPML

atahualpa 스크린샷이 글에서는 WPML을 사용하여 다국어 WordPress 사이트를 구축하기 위해 Bytes For AllAtahualpa를 사용하는 방법을 보여드리겠습니다.

다국어 WordPress 사이트용 테마는 모든 문자열을 gettext 호출로 래핑해야 하지만, 그것만으로는 충분하지 않습니다. 테마에서 gettext를 사용하면 원래 제작된 언어와 다른 (단일) 언어로 표시할 수 있습니다.

다국어로 실행하려면 테마에서 방문자가 표시 언어를 선택할 수 있도록 허용하고 언어별로 올바른 콘텐츠를 전달해야 합니다.

Atahualpa 다국어 버전


결과부터 말씀드리겠습니다. 여기 수정된 버전의 Atahualpa로 구동되는 데모 사이트가 있으며, 다운로드하여 사용할 수 있는 수정된 테마가 있습니다.

Atahualpa를 다국어로 만들기 위해 변경한 사항

1. 테마 디렉토리에 wpml-integration.php 추가


wpml-integration.php는 WPML 디렉토리의 docs/theme-integration 아래에 있습니다. 여기에는 테마를 다국어로 변환하는 데 도움이 되는 함수 모음이 포함되어 있습니다.

이러한 모든 함수는 WPML이 활성화되어 있으면 테마가 이를 사용하고, 없으면 무시하도록 설계되었습니다. 즉, WPML을 사용할 수 있는 경우 테마가 다국어로 실행되고, 그렇지 않은 경우 정상적으로(단일 언어로) 실행됩니다.

functions.php에 다음을 추가했습니다.

include dirname(__FILE__) . '/wpml-integration.php';

이 구문은 wpml-integration.php를 로드하여 테마의 모든 파일에서 사용할 수 있도록 합니다.

2. 언어 선택기 추가


언어 선택기를 사용하면 방문자가 사이트가 표시되는 언어를 선택할 수 있습니다. 여러 유형의 언어 선택기를 추가하는 것이 좋은 경우가 많습니다. 방문자는 사이트를 빠르게 훑어보며 자신의 언어로 된 콘텐츠에 대한 시각적 힌트를 찾습니다. 사람마다 보는 위치가 다르므로, 페이지의 여러 부분에 다양한 유형의 언어 선택기를 추가하면 방문자가 자신의 언어를 찾는 데 도움이 됩니다.

header.php에 다음을 추가하여 사이드바에 WPML의 드롭다운 언어 선택기를 추가했습니다.

<?php wpml_languages_selector() ?>
atahualpa_drop_down_language_selector
드롭다운 언어 선택기

또한 사이트 푸터에 가로 형태의 언어 목록을 추가했습니다. 많은 사용자가 먼저 맨 아래까지 스크롤하여 어떤 내용이 있는지(그리고 페이지가 얼마나 긴지) 확인하므로, 페이지가 다른 언어로 제공된다는 것을 알리기에 좋은 위치입니다. footer.php에 다음 코드를 추가했습니다.

<?php wpml_languages_list() ?>
푸터의 가로 언어 선택기
푸터의 가로 언어 선택기

마지막으로 각 글의 끝에 언어 선택기를 추가했습니다. 이렇게 하면 각 글에 어떤 다른 언어로 제공되는지 알려주는 문장이 추가됩니다. index.php(사용자 정의 버전의 WordPress 표시 루프 포함)에 다음을 추가했습니다.

<?php if(is_singular()) wpml_content_languages(); ?>
번역 언어 목록
번역 언어 목록

방문자가 ‘홈’을 클릭할 때 언어를 전환하지 않고 홈 페이지로 이동할 것으로 기대합니다. 각 언어마다 다른 URL을 가진 ‘홈 페이지’가 있으므로 모든 언어에 단일 값을 사용할 수는 없습니다.

일반적으로 WordPress 테마는 관리 페이지에 설정된 ‘블로그 URL’ 값을 기반으로 ‘홈’ 페이지의 주소를 계산합니다. WPML은 표시 언어에 따라 올바른 홈 주소를 계산하는 함수를 만들었습니다.

get_option('home')wpml_get_home_url()로 교체했습니다. 또한 get_option('home') 함수는 후행 슬래시(/) 없이 사이트의 위치를 반환하므로 테마에서 수동으로 추가합니다. WPML의 함수에는 이 슬래시가 포함되어 있습니다(여기에는 긴 사연이 있습니다).

이 변경을 수행하려면 두 개의 파일을 편집해야 했습니다. functions/bfa_get_options.php를 수정하여 다음 코드를

$bfa_ata['get_option_home'] = get_option('home');

다음과 같이 변경합니다.
$bfa_ata['get_option_home'] = wpml_get_home_url();

또한 functions/bfa_header_config.php를 편집하고 홈 페이지 링크에서 후행 슬래시를 제거했습니다.
'<a href="' . $bfa_ata['get_option_home'] . '">' . $bfa_ata['bloginfo_name'] . '</a>'

4. 고급 - 사용자가 테마 관리 화면에 입력하는 텍스트 번역


Atahualpa를 사용하면 관리 화면을 통해 일부 텍스트를 제어할 수 있습니다. 이는 PHP 파일을 편집하지 않고도 사이트를 관리할 수 있게 해주는 훌륭한 기능입니다. WPML은 문자열 번역 메커니즘을 사용하여 이러한 문자열도 번역할 수 있습니다.

이를 수행하려면 테마에서 번역해야 할 문자열을 WPML에 알려준 다음 번역이 있는 경우 해당 번역을 표시해야 합니다.

사용자가 테마의 관리 화면으로 이동하여 텍스트를 업데이트하고 저장을 클릭하면, functions/bfa_ata_add_admin.phpbfa_ata_add_admin 함수가 실행됩니다. 여기에 다음 섹션을 추가했습니다(11번째 줄부터 시작).

global $wpml_translatable_strings;

 foreach($wpml_translatable_strings as $wpml_str ){

   if(isset($_REQUEST['bfa_ata_'.$wpml_str]) && trim($_REQUEST['bfa_ata_'.$wpml_str])){

    wpml_register_string('atahualpa theme', $wpml_str, stripslashes($_REQUEST['bfa_ata_'.$wpml_str]));

  }

 }

이 코드는 전역 변수 $wpml_translatable_strings에 정의된 문자열 목록을 실행합니다. WPML의 문자열 번역 목록에 각 문자열을 등록합니다.

첫 번째 인수는 문자열의 컨텍스트입니다. 어떤 이름이든 사용할 수 있지만 문자열을 설명하는 이름을 선택해야 합니다. 두 번째 인수는 문자열의 이름입니다(번역되지 않음). 마지막 인수는 문자열의 값입니다(번역됨).

번역(존재하는 경우)을 표시하기 위해 functions/bfa_get_options.phpwpml_t 함수를 추가했습니다(204번째 줄부터 시작).

global $wpml_translatable_strings;

foreach($bfa_ata as $k=>$v){

   if(in_array($k, $wpml_translatable_strings) || $__first){

    $bfa_ata[$k] = wpml_t('atahualpa theme', $k, $v);     

  }

}

이 코드는 사이트가 방문자에게 표시될 때 실행됩니다. 문자열 목록을 반복하고, 번역용으로 등록되었는지 확인한 다음(in_array), 등록되어 있으면 번역을 가져옵니다. wpml_t 함수는 번역이 존재하는 경우 현재 언어로 번역된 문자열을 반환하고, 번역이 없는 경우 원본 문자열을 그대로 반환합니다.

다른 WordPress 테마를 다국어로 변환


이미 iNoveArras에서 비슷한 작업을 수행했으며, 더 많은 테마를 다국어로 변환할 계획입니다.

우리의 목표는 바로 사용할 수 있는 다국어 테마를 제공하고 사용자가 직접 다국어 지원 테마를 구축하도록 돕는 것입니다. 여기에 설명된 기술을 사용하면 WPML을 사용할 수 있을 때는 다국어로 실행되고, WPML이 없을 때는 단일 언어로 실행되는 테마를 구축할 수 있습니다.

테마를 구축 중이며 다국어로 변환하는 데 도움이 필요하다면 언제든지 포럼에 새 스레드를 작성해 주세요.

또한 테마에 다국어 지원을 추가하여 수익(진정한 수동적 소득)을 창출할 수도 있습니다. 다음 글에서는 테마에 제휴 ID를 포함하는 방법에 대해 설명하겠습니다.

이 글이 유용했나요? 이 글을 공유하세요: