WordPress 웹사이트를 국제화하는 방법

게시 됨: 2022-03-10
빠른 요약 ↬ WordPress는 현재 65개 이상의 언어로 완전히 현지화되었으며 추가 95개 언어에 대해 부분 번역을 제공합니다. 아직 워드프레스 웹사이트를 국제화하지 않았다면 아마도 그렇게 할 때일 것입니다.

2017년 9월 30일, 국제 WordPress 커뮤니티는 WordPress 생태계를 번역하기 위해 24시간 동안 뭉쳤습니다. 세 번째로 #WPTranslationDay는 "로컬라이제이션"으로 더 잘 알려진 글로벌 사용자를 위한 액세스 가능한 경험을 만드는 가치를 홍보하기 위해 설계된 하루 종일 번역 마라톤과 디지털 및 기고자의 날 이벤트를 결합했습니다.

오픈 소스 커뮤니티로서 우리 모두는 오픈 소스 기여를 현지화하기 위해 노력해야 합니다. 하지만 디지털 자산을 전사하려면 먼저 코드베이스를 국제화해야 합니다.

"국제화"와 "현지화"라는 용어는 기술적으로 번역 프로세스의 두 가지 다른 측면을 나타내지만 종종 같은 의미로 사용됩니다.

  • 국제화(I18N) 는 테마 또는 플러그인을 국제화하거나 조정하여 전 세계의 모든 언어로 번역하는 프로세스입니다.
  • 현지화(L10N) 는 국제화된 도구를 특정 언어로 현지화하거나 번역 하는 후속 프로세스입니다.

WordPress는 현재 65개 이상의 언어로 완전히 현지화되었으며 추가 95개 언어에 대해 부분 번역을 제공합니다. 더 많은 현지화가 도입됨에 따라 국제적 사용이 계속 증가하고 있습니다.

WordPress.org의 통계
WordPress.org의 통계(큰 미리보기)
점프 후 더! 아래에서 계속 읽기 ↓

비영어권 WordPress 사용자는 2014년에 영어 사용자를 능가했으며 #WPTranslateDay와 같은 노력이 증가함에 따라 2017년에도 의도치 않게 영어 사용자의 파이 비율을 계속 희석했습니다.

WordPress가 점점 더 언어적으로 액세스할 수 있게 됨에 따라 플러그인 및 테마 개발자가 글로벌 WordPress 경제에서 번창하려면 I18N 및 L10N에 대한 지식이 필수적입니다. 사업 확장을 위해 이러한 개발 기술은 해외 시장에 문을 열 수 있습니다. 언어 접근성을 포함한 웹 접근성은 비즈니스에도 좋고 사람에게도 더 좋습니다.

#WPTranslationDay 의 연속으로 WordPress 플러그인 및 테마를 국제화하기 위한 업데이트된 가이드가 있습니다.

오늘 살펴볼 프로세스에 대한 간략한 개요는 다음과 같습니다.

  • 발견
    • 번역 파일 알아보기
      • 냄비 파일
      • PO 파일
      • MO 파일
    • GlotPress 및 언어 팩
    • 환경 백업 및 준비
  • 플러그인 I18N
    • 플러그인 헤더
    • 텍스트 도메인 로드
    • 문자열 감사
    • POT 파일 생성
  • 테마 I18N
    • 테마 헤더
    • 텍스트 도메인 로드
    • 문자열 감사
    • POT 파일 생성
  • 자바스크립트 I18N
  • 추가 리소스

발견

번역 파일 알아보기

WordPress는 GNU gettext 라이브러리를 사용하여 I18N을 용이하게 합니다.

먼저 프로세스 전반에 걸쳐 생성되는 gettext 번역 파일에 대해 알아보겠습니다.

이동식 개체 템플릿 파일(POT)

I18N 프로세스 동안 도구를 사용하여 국제화된 문자열을 찾고 플러그인 및 테마에서 번역 가능한 모든 텍스트를 포함하는 POT 파일 을 생성합니다.

휴대용 개체 파일(PO)

외관상으로는 POT 파일과 PO 파일 사이에 큰 차이가 없습니다. 그것들은 구문적으로 동일하며 의도한 목적에 의해서만 구별됩니다.

POT 파일을 생성한 후 텍스트 문자열은 번역가가 원하는 언어로 해석해야 합니다. PO 파일에는 결국 모국어로 된 텍스트 문자열과 적절한 번역이 포함됩니다.

기계 개체 파일(MO)

마지막으로 PO 파일은 기계가 읽을 수 있는 문서 또는 기계 개체 파일로 변환됩니다. 이 파일은 WordPress가 번역된 버전을 제공할 때 호출할 수 있도록 테마 또는 플러그인 디렉토리에 있습니다.

환경 백업 및 준비

마크업을 수정하기 전에 플러그인, 테마 또는 전체 사이트(국제화하는 것이 무엇이든 간에!)를 백업하고 개발 환경을 정리하세요.

웹사이트를 현지화하려는 경우 빠른 플러그인 감사를 수행해야 합니다. 더 이상 활발히 사용하지 않는 플러그인을 삭제하거나 비활성화합니다. 이 빠른 감사를 통해 장기적으로 시간을 절약할 수 있습니다.

플러그인 국제화

플러그인 헤더

먼저 플러그인 헤더를 업데이트합니다. 특히 텍스트 도메인도메인 경로 .

플러그인 헤더 예시

 /* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */

텍스트 도메인

텍스트 도메인은 WordPress가 플러그인에 속한 모든 텍스트를 인식할 수 있는 고유 식별자이며 플러그인의 슬러그와 일치해야 합니다 .

이것은 플러그인이 WordPress.org에서 호스팅되는 경우 특히 중요합니다. GlotPress가 플러그인에 대한 번역을 적절하게 가져오려면 이것들이 일치해야 합니다.

이 예에서 플러그인 파일의 이름은 rad-plugin.php 이고 텍스트 도메인은 rad-plugin 입니다.

이미 텍스트 도메인 집합이 있을 수 있습니다. 그렇지 않은 경우 밑줄이 아닌 하이픈을 사용하는 것을 잊지 마십시오.

도메인 경로

도메인 경로는 최종 번역 파일이 위치할 폴더입니다. 플러그인 디렉토리(예: /languages/ )에 새 폴더를 만들고 도메인 경로를 업데이트해야 WordPress가 번역 파일을 검색할 위치를 정확히 알 수 있습니다.

텍스트 도메인 로드

다음으로 코드에 다음 함수를 추가하여 텍스트 도메인을 로드합니다.

load_plugin_text도메인()

 load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );

번역 파일이 사용자의 언어로 사용 가능한 경우 로드 텍스트 도메인 기능은 WordPress에 이를 전달하도록 지시합니다.

매개변수

  • $domain — 텍스트 도메인 (필수)
  • $abs_rel_path — false (선택 사항, 더 이상 사용되지 않음)
  • $plugin_rel_path — /languages/ (선택 사항, 이것은 번역 파일이 포함된 디렉토리의 상대 경로입니다. 이 예에서는 /languages/입니다. 4.6부터 WordPress는 플러그인의 /languages/ 디렉토리에서 이러한 파일을 검색합니다. 지정되지 않습니다.)

Rad 플러그인 예

텍스트 도메인을 로드하기 위해 'plugins_loaded' 작업에 연결합니다.

 add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }

문자열 감사

다음 단계는 플러그인의 모든 텍스트 문자열을 번역 기능으로 래핑하는 것입니다.

가장 일반적인 번역 함수는 번역된 문자열을 반환하기 위한 __() 및 번역된 문자열을 반향하기 위한 _e() 입니다.

Rad 플러그인 예

 __() $text = __( 'Super Rad!', 'rad-plugin' );

이 기능은 간단한 번역에서 작동합니다. 두 가지 매개변수를 고려합니다. 텍스트 문자열텍스트 도메인 .

 _e( 'Super Rad!', 'rad-plugin' );

이 함수는 단순히 값을 반향합니다. 그렇지 않으면 이전 기능과 동일하게 작동합니다.

적절한 경우에도 사용해야 하는 많은 추가 번역 기능이 있습니다.

기타 기본 기능

 __() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()

날짜 및 숫자 기능

 number_format_i18n() date_i18n()

탈출 기능

다음 이스케이프 기능을 사용하여 출력되는 데이터를 이스케이프하는 것을 잊지 마십시오.

 esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()

Rad 예제에는 다음과 같은 플러그인 코드 줄이 있을 수 있습니다.

 function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }

냄비 파일 만들기

마지막 단계는 POT 파일을 만드는 것입니다. 이 유형의 파일을 생성하는 데 사용할 수 있는 몇 가지 다른 도구가 있지만 이 자습서에서는 WordPress 코덱스의 권장 사항을 따르고 번역 관리를 위해 사용하기 쉬운 GUI인 Poedit를 사용합니다.

참고 : 플러그인 또는 테마가 이미 WordPress.org 저장소에 있는 경우 이 프로세스를 건너뛰고 관리 페이지에서 POT 파일을 생성할 수 있습니다. 이 경우 각 언어에 대해 .po 파일을 생성할 필요가 없습니다. 2015년 GlotPress 및 언어 팩의 도입으로 번역 프로세스가 간소화되었습니다. GlotPress에 필요한 모든 것은 .pot 파일입니다. 이 파일은 WordPress.org에서 가져오고 translate.wordpress.org 대시보드를 통해 번역가에게 제공됩니다. 전 세계의 공동 작업자는 이 대시보드를 사용하여 #WPTranslateDay에 번역을 제공합니다.

포에디트 다운로드

Poedit 구성

번역 속성

파일 > 새로 만들기 로 이동하여 시작합니다. 그런 다음 플러그인의 모국어를 선택하고 확인을 누르 십시오 .

큰 미리보기

그런 다음 카탈로그 > 새로 만들기 를 선택합니다. 프로젝트 이름, 버전, 연락처 및 언어를 입력합니다.

큰 미리보기

경로

다음으로 소스 경로 탭을 선택하십시오. 새 파일인 경우 먼저 파일을 저장해야 합니다.

이 예에 따라 파일 > 다른 이름 으로 저장을 선택하여 rad-plugin 내부의 /languages/ 디렉토리에 .po 파일로 저장합니다. 다시 말하지만, 파일 이름은 플러그인의 슬러그와 일치해야 합니다.

 rad-plugin.po

저장한 후 번역 파일이 위치할 디렉토리의 상대 경로를 입력합니다. 이 시나리오에서는 언어 .

큰 미리보기

키워드

소스 키워드 탭을 선택합니다. + 아이콘 을 클릭하여 적절한 기능 이름을 추가합니다.

큰 미리보기

컨닝 지

 __ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x

그런 다음 확인을 클릭한 다음 파일 > 저장 을 클릭할 수 있습니다.

Poedit는 .mo와 .po 파일을 모두 저장합니다. .po 파일을 복사하고 .pot 확장자를 추가하여 .pot 파일을 생성할 수 있습니다. 국제 사용자는 템플릿 .pot 파일을 사용하여 문자열을 해당 언어로 번역할 수 있습니다.

테마 국제화

테마 국제화 프로세스는 플러그인용 I18N과 실질적으로 동일합니다. 테마 헤더를 확인하는 것으로 시작하고 다른 POT 파일을 생성하여 끝낼 것입니다.

테마 헤더

테마 헤더를 다시 확인하여 텍스트 도메인과 도메인 경로가 설정되어 있는지 확인하십시오.

예제 테마 헤더

 /* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */

텍스트 도메인 로드

다음 단계는 이번에는 테마의 functions.php 파일에 텍스트 도메인을 로드하는 것입니다.

load_theme_text도메인()

 load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );

이러한 파일을 로드하려면 after_setup_theme 작업으로 파일을 등록해야 합니다.

 add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }

문자열 감사

또 다른 문자열 감사를 위한 시간입니다! 이 시점에서 기본 번역 기능에 익숙해야 합니다.

좀 더 까다로운 번역을 살펴보겠습니다.

자리 표시자

아래 예제와 같은 PHP 변수는 자리 표시자를 사용하지 않으면 제대로 번역되지 않습니다.

 echo "We added $count rad points.";

printf() 및 sprintf()

이러한 함수는 %s 또는 정수의 경우 %d 와 같은 자리 표시자를 사용하여 텍스트 문자열을 동적 콘텐츠로 보간합니다.

Rad 테마 예제

 /* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );

복수

_n() 함수는 복수형과 같은 더 복잡한 문자열 번역을 처리할 수 있지만 번역 소프트웨어 내에서의 제한 때문에 권장되지 않습니다. 대신 단수 단어와 복수 단어를 구별하기 위해 간단한 if 문 을 작성할 수 있습니다.

Rad 플러그인 예

 If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }

팟 파일 생성

테마 POT 파일 생성 과정은 플러그인 POT 파일 생성 과정과 동일합니다. 아래에서 몇 가지 방법을 살펴보세요.

명령줄

WordPress Trunk와 gettext GNU 패키지가 설치된 상태에서 명령줄에서 makepot.php 스크립트를 실행하여 이 단계를 쉽게 진행할 수 있습니다.

명령줄을 열고 I18N 도구 디렉터리로 이동합니다.

 cd wpdev/tools/i18n/

스크립트는 다음과 같아야 합니다.

 php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot

스크립트가 제 역할을 하고 완성된 파일인 rad-theme.pot 은 현재 디렉토리에 있게 됩니다.

그런트 작업

POT 파일을 만드는 또 다른 방법은 grunt-wp-i18n 또는 grunt-pot을 사용하여 Grunt 작업을 실행하는 것입니다. Grunt와 같은 작업 실행기는 POT 파일 생성과 같은 지루한 작업을 자동화할 수 있습니다.

POT 파일을 생성하려면 먼저 node.js가 설치되어 있는지 확인하십시오. 그런 다음 명령줄을 통해 언어 디렉토리에 Grunt를 설치하면 됩니다. 이제 이러한 I18N 명령을 빠르게 실행하고 명령줄의 편안함을 벗어나지 않고도 번역 파일을 만들 수 있습니다.

자바스크립트 I18N

최신 테마 또는 플러그인 개발자라면 JavaScript를 사용하여 프로젝트의 일부 구성 요소를 처리할 가능성이 있습니다. wp_localize_script 는 스크립트에 제공할 PHP 데이터를 추출하는 효과적인 함수이며 WordPress 내에서 JavaScript를 번역하는 유일한 방법입니다.

WP_LOCALIZE_SCRIPT()

이 기능을 사용하면 PHP에서 서버 측 문자열을 현지화하고 스크립트에 JavaScript 객체로 텍스트 문자열을 제공할 수 있습니다.

 wp_localize_script( $handle, $name, $data );

매개변수

  • $handle — 데이터를 사용할 수 있어야 하는 스크립트 핸들 (필수 — 이 데이터가 있는 스크립트 핸들과 일치해야 함, 아래 예 참조)
  • $name — 데이터를 포함할 객체의 이름 (필수 — 고유해야 함)
  • $data — 스크립트에 전달할 데이터 배열 (필수) .

RAD 플러그인 예

 add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }

자바스크립트에서 데이터 액세스

아래의 간단한 코드 조각은 JavaScript 파일에서 이 데이터에 액세스하는 방법의 예입니다.

 alert( rad-I18n.message );

추가 리소스

  • 워드프레스 개발자를 위한 I18N
  • WordPress 테마 핸드북: 국제화
  • WordPress 플러그인 핸드북: 국제화
  • WordPress.tv: I18N

마무리

축하합니다! 테마 및/또는 플러그인을 국제화하여 모든 모국어를 사용하는 사람들이 액세스할 수 있도록 했습니다. 프로젝트가 WordPress 리포지토리를 통해 배포되든 조직의 웹사이트를 위해 맞춤 개발되든 상관없이 처음부터 파일을 국제화할 수 있다는 장점이 있습니다.

  • 오픈 소스 기여를 전 세계적으로 액세스할 수 있도록 합니다.
  • 해외 시장에서 새로운 고객과 대화를 만드십시오.
  • 시간을 절약하고 향후 힘든 업데이트를 줄이십시오.

항상 국제화하십시오.