사용자가 WPML을 사용하여 콘텐츠를 쉽게 번역할 수 있도록 플러그인과 테마의 문자열 패키지를 생성하는 방법을 알아보세요.
문자열 패키지는 특정 컨텍스트에서 함께 “묶인” 문자열 그룹입니다. 이 패키지의 목적은 각 문자열을 개별적으로 번역할 필요를 없애 최종 사용자가 콘텐츠를 더 효율적으로 번역할 수 있도록 돕는 것입니다.
예를 들어, 문자열 패키지가 있을 때와 없을 때 사용자가 사용자 정의 필드를 번역하는 방법은 다음과 같습니다.
문자열 패키지가 없는 경우

사용자는 자동 번역 옵션 없이 문자열을 하나씩 번역해야 합니다.
문자열 패키지가 있는 경우

사용자는 자동 번역 옵션을 사용하여 여러 문자열을 한 번에 번역할 수 있습니다.
보시다시피 문자열 패키지를 사용하면 사용자가 여러 사용자 정의 필드를 한 번에 번역할 수 있어 번역 프로세스가 단순해집니다. 사용자에게 최상의 번역 환경을 제공하려면 아래 단계에 따라 고유한 문자열 패키지를 생성하세요.
아래 단계에서 다루는 전체 문자열 패키지 구현을 확인하려면 사용된 테스트 플러그인이 포함된 이 GitHub 리포지토리를 확인하세요.
1. 번역 가능한 콘텐츠 식별
첫 번째 단계는 제목, 레이블, 사용자 생성 콘텐츠 등 사용자가 번역하고자 하는 콘텐츠를 식별하는 것입니다.
2. 패키지 종류 선언
다음으로 패키지 종류를 선언해야 합니다. 이 단계는 WPML이 활성화된 플러그인에 연결된 문자열 패키지를 감지하고 해당 패키지만 번역하도록 돕습니다.
비교하자면, 이 필터는 register_post_types 필터가 포스트 유형에 작동하는 것과 같은 방식으로 문자열 패키지에 작동합니다.
패키지 종류를 선언하려면 wpml_active_string_package_kinds 필터를 사용하세요.
define( 'FOO_USER_FIELD_PACKAGE_KIND_TITLE', 'OTGS Foo User Fields' );
define( 'FOO_USER_FIELD_PACKAGE_KIND_SLUG', 'otgs-foo-user-fields' );
add_filter( 'wpml_active_string_package_kinds', function( $kinds ) {
$kinds[ FOO_USER_FIELD_PACKAGE_KIND_SLUG ] = [
'title' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
'slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG,
'plural' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
];
return $kinds;
} );
인수 정의
title – 종류의 제목으로, 패키지의 종류와 동일해야 합니다.plural – 제목의 복수형입니다.slug – 종류의 슬러그로, 패키지의 kind_slug와 동일해야 합니다.
3. 패키지 생성 및 문자열 등록
다음으로 패키지를 생성하고 wpml_register_string 훅을 사용하여 그룹화할 문자열을 등록해야 합니다.
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
인수 정의
$kind – 엔터티의 네임스페이스 레이블입니다(예: Gravity Form).$kind_slug – 엔터티의 네임스페이스 슬러그입니다(예: gravity-form). 누락된 경우 “종류(kind)”의 슬러그 버전이 됩니다.$name – 종류 내 엔터티의 고유 식별자로, 문자열(예: 슬러그) 또는 정수(예: ID)일 수 있습니다.$title – 종류 내 엔터티의 제목입니다. 실제 엔터티의 제목을 사용하는 것이 좋습니다.
필수는 아니지만 두 가지 추가 인수를 포함할 수도 있습니다.$edit_link – 객체를 편집할 URL입니다.$view_link – 객체를 볼 URL입니다.
4. 번역 가져오기
마지막으로 프런트엔드에 번역을 표시하려면 wpml_translate_string 훅을 사용해야 합니다.
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
$translatedFieldValues = [];
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
$translatedFieldValues[ $fooUserField ] = apply_filters( 'wpml_translate_string', $fieldValue, sanitize_key( $fooUserField ), $package );
}
문자열 업데이트 및 제거
사용자가 콘텐츠를 업데이트할 때마다 WPML은 제거된 문자열뿐만 아니라 새 문자열도 식별할 수 있어야 합니다. WPML에 이러한 변경 사항을 알리려면 등록 코드를 다음 두 함수로 감싸세요.
$userId = 123;
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
// The 'title' key is not not required in the "translate" context.
];
do_action( 'wpml_start_string_package_registration', $package );
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
do_action( 'wpml_delete_unused_package_strings',$package );
문자열 패키지 삭제
사용자가 콘텐츠를 제거하면 관련 문자열 패키지도 제거해야 합니다. 여기에는 모든 관련 문자열, 번역 및 작업이 포함됩니다. 이 정리를 수행하면 데이터베이스를 어지럽히는 남은 데이터 없이 사이트가 효율적으로 유지됩니다.
문자열 패키지를 제거하려면 플러그인이나 테마 내의 적절한 작업에 훅을 걸고 wpml_delete_package 함수를 호출하세요.
$userId = 123; do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_TITLE );
추가 리소스
- WPML 언어 구성 파일 – WPML이 플러그인과 테마에서 번역해야 할 텍스트를 나타내는 파일인 wpml-config.xml 사용에 대한 가이드입니다.
- 다국어 도구 – 구성 설정을 테스트하고 WPML과의 호환성을 확인하기 위한 도구입니다.