WordPress 언어 파일을 올바르게 로드하기

개발자와 사용자 모두를 위한 2017년 가이드.
wordpress language files

WordPress 현지화 기능을 사용하면 WordPress 언어 파일(po/mo 파일)을 통해 플러그인과 테마를 손쉽게 번역 가능하도록 만들 수 있습니다.

이는 특히 WordPress 3.7 이후 더욱 그러하며, WordPress 4.6.

WordPress의 전체 번역 시스템에 많은 개선이 이루어졌기 때문에, 새로운 포스트가 꼭 필요하다고 느꼈습니다.

WordPress 언어 파일 – 혼란 ( 개발자 편 )

개발자의 경우, 핵심은 번역 파일이 있음을 WordPress에 올바른 방법으로 알리는 것입니다.

개발자로서 우리는 "load_plugin_textdomain()"을 사용하여 플러그인 폴더 내의 언어 파일을 가리키도록 안내받았습니다.

그러나 과거에는 WordPress가 해당 위치만 확인했기 때문에 사용자가 직접 언어 파일을 추가해도, 다음 업데이트 시 파일이 사라져 버렸습니다!

예전에 웹에서 두 번째 호출 방법을 소개하는 글이 있었는데, 이번에는 "load_textdomain()" 함수를 사용하여 WP 언어 폴더의 파일을 가리키는 방식이었고, 많은 사람들이(저희 포함) 그 방법을 사용했습니다.

이를 통해 사용자는 WP 언어 폴더의 지정된 위치에 언어 파일을 저장하면, 플러그인 업데이트 시에도 번역이 사라지지 않았습니다.

WordPress 언어 파일 – 혼란 ( 사용자 편 )

사용자는 플러그인/테마의 커스텀 번역 파일을 어디에 저장해야 하는지 알아야 하는데, 과거에는 여러 위치가 존재할 수 있었다는 것이 문제였습니다.

WP 문서에서는 개발자에게 플러그인 폴더 내 "languages"라는 폴더를 연결하도록 안내하지만, 개발자가 "lang" 폴더를 사용할 수도 있으며 어느 경우든 플러그인/테마가 업데이트되면 해당 파일은 삭제됩니다.

일부 개발자는 개발자가 임의로 선택한 위치, 주로 WP 언어 폴더 내 커스텀 이름의 폴더에 두 번째 확인 경로를 추가하기도 했습니다.

이로 인해 사용자가 커스텀 번역 파일을 안전하게 저장할 위치를 일관되게 파악할 방법이 없었습니다.

올바른 방법으로 언어 파일 불러오기 (2017)

WP 4.6 이후, 사용자와 개발자 모두에게 훨씬 쉬워졌습니다!

개발자라면 이제 아래 WP 문서에 따라 언어 파일을 올바르게 로드하고 있는지만 확인하면 됩니다:

<br />
// for plugins<br />
add_action( 'init', 'myplugin_load_textdomain' );<br />
function myplugin_load_textdomain() {<br />
  load_plugin_textdomain( 'my-plugin', false, basename( dirname( __FILE__ ) ) . '/languages' );<br />
}<br />

<br />
// for themes<br />
add_action( 'after_setup_theme', 'my_theme_setup' );<br />
function my_theme_setup(){<br />
    load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );<br />
}<br />

이 훅들은 'init' 및 'after_setup_theme' 훅에서 실행된다는 점에 주목하세요. 이렇게 하면 모든 것이 원활하게 로드됩니다.

직접 실행하거나 각 훅보다 먼저 실행하면 일부 문자열이 번역되지 않는 문제가 발생할 수 있으며, WPML과 같이 번역을 조작하거나 다국어 웹사이트를 만드는 플러그인이 전혀 작동하지 않을 수도 있습니다.

사용자 입장에서는 이제 언어 파일을 배치할 수 있는 편리하고 일관된 이름의 위치가 생겼습니다.

  • 플러그인의 경우: /wp-content/languages/plugins/my-plugin-en_US.mo
  • 테마의 경우: /wp-content/languages/themes/my-theme-en_US.mo

'my-plugin'과 'my-theme'은 플러그인/테마의 텍스트도메인입니다 (보통 플러그인의 readme.txt 또는 테마의 style.css 상단에서 확인할 수 있습니다).

이는 기존 방식에 비해 크게 개선된 것으로, 대부분의 경우 업데이트 시 번역이 손실되는 것을 방지해 줍니다.

경우에 따라 플러그인/테마에 wp.org에 저장된 해당 언어의 새 번역이 이미 있을 수 있으며, 이 경우 .mo 파일을 덮어쓸 수도 있지만 대부분의 경우 이는 의도된 동작입니다.

플러그인이 wp.org에 호스팅되어 있다면 번역에 기여할 수 있으며, 프리미엄 플러그인의 경우 덮어쓰일 가능성이 거의 없습니다.

추가 정보

WordPress는 여러 위치에서 WordPress 언어 파일을 찾으려 시도합니다. 텍스트도메인이 'my-plugin'인 플러그인의 경우 먼저 여기를 확인합니다:

/wp-content/languages/plugins/my-plugin-en_US.mo

해당 위치에서 번역을 찾지 못하고 플러그인이 로컬에서 찾을 위치를 지정한 경우, 다음 위치를 확인합니다:

/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo

플러그인이 경로를 지정하지 않은 경우 WordPress는 대신 여기를 확인합니다:

/wp-content/languages/my-plugin-en_US.mo

WordPress 문서를 따르는 것이 원칙이지만, 실제로는 WP 4.6부터 로컬 파일을 포함하지 않는 경우(파일이 wp.org 저장소에 저장된 경우) 로컬 파일 경로를 지정하지 않아도 됩니다. 따라서 다음과 같이만 추가하면 됩니다:

<br />
// for plugins<br />
add_action( 'init', 'myplugin_load_textdomain' );<br />
function myplugin_load_textdomain() {<br />
  load_plugin_textdomain( 'my-plugin');<br />
}<br />
<br />
// for themes<br />
add_action( 'after_setup_theme', 'my_theme_setup' );<br />
function my_theme_setup(){<br />
    load_theme_textdomain( 'my-theme');<br />
}<br />

이 글이 번역에 대한 이해를 높이는 데 도움이 되었으면 합니다. 궁금한 점이 있거나 추가하고 싶은 내용이 있다면 아래에 댓글을 남겨 주세요.

GeoDirectory의 강력한 기능을 활용하세요!

지금 바로 온라인 비즈니스를 시작하세요

오늘 가입하세요!

뉴스레터 - 최신 소식을 받아보세요!

최신 뉴스, 팁, 독점 콘텐츠를 받은 편지함으로 직접 받아보세요.

Stiofan O'Connor 작성

Stiofan O'Connor는 다음의 공동 창업자이자 CEO입니다 AyeCode LTD. 그는 비즈니스 파트너인 Paolo와 함께 WordPress용 GeoDirectory, UsersWP 및 Invoicing 플러그인을 만들었습니다. 그는 WordPress 개발을 전문으로 하는 풀스택 개발자입니다. Stiofan은 2000년대 초반 취미로 PHP를 이용해 웹사이트를 만들기 시작했습니다. 이후 WordPress를 발견하기 전까지 잠시 CodeIgniter 웹 프레임워크를 사용했으며, 그 이후로 한 번도 뒤돌아보지 않았습니다. 현재 그의 WordPress 테마와 플러그인은 10만 개 이상의 활성 웹사이트에서 성공적으로 사용되고 있습니다.

로딩 중...
20% 할인 혜택
서두르세요! 만료되기 전에 20% 할인을 받으세요. 20% 할인 받기