문자열 패키지가 없는 경우

사용자는 자동 번역 옵션 없이 문자열을 하나씩 번역해야 합니다.
사용자가 WPML을 사용하여 콘텐츠를 쉽게 번역할 수 있도록 플러그인 및 테마용 문자열 패키지를 생성하는 방법을 알아보세요.
문자열 패키지는 특정 컨텍스트에서 함께 “묶인” 문자열 그룹입니다. 문자열 패키지의 목적은 각 문자열을 개별적으로 번역할 필요를 없애 최종 사용자가 콘텐츠를 더 효율적으로 번역할 수 있도록 돕는 것입니다.
예를 들어, 문자열 패키지가 있을 때와 없을 때 사용자가 사용자 정의 사용자 필드를 번역하는 방법은 다음과 같습니다.
보시다시피 문자열 패키지는 사용자가 여러 사용자 정의 사용자 필드를 한 번에 번역할 수 있게 하여 번역 프로세스를 간소화합니다. 사용자에게 최상의 번역 환경을 제공하려면 아래 단계에 따라 고유한 문자열 패키지를 생성하세요.
아래 단계에서 다루는 전체 문자열 패키지 구현을 보려면 당사가 사용한 테스트 플러그인이 포함된 이 GitHub 리포지토리 (새 탭에서 열림)를 확인하세요.
첫 번째 단계는 제목, 레이블, 사용자 생성 콘텐츠 등 사용자가 번역하고자 하는 콘텐츠를 식별하는 것입니다.
다음으로 패키지 종류를 선언해야 합니다. 이 단계는 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와 동일해야 합니다.
다음으로 패키지를 생성하고 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입니다.
마지막으로 프런트엔드에 번역을 표시하려면 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_SLUG );