source

__() 및 sprintf()로 WP 변환

manysource 2023. 10. 22. 20:11

__() 및 sprintf()로 WP 변환

WP 테마를 번역하려고 합니다.내가 가지고 있는 코드는 다음과.

$translation = __( get_color(), 'textdomain' );

효과가 있고, get_color() 함수에서 역동적으로 색을 얻으며, 번역도 잘 됩니다.그러나 테마 체크 플러그인을 사용하면 이 코드에 대한 오류가 발생합니다.

대신 이걸 사용해야 합니다.

$translation = sprintf( __( '%s', 'textdomain' ), get_color() );

그러나 이 경우 자리 표시자 %s이(가) 번역되지 않고 원래 색상 이름(번역되지 않음)을 얻게 됩니다.

내가 뭘 잘못하는 거지?감사해요.

echo sprintf(__("text %s", 'your__text_domain'), $data);

번역자에게 번역자의 각 변수가 무엇인지 알려주는 "번역자" 댓글에 대해 아무도 언급하지 않았다는 것이 놀랍습니다.sprintfis. 예:

sprintf(
    /* translators: %s: Name of a city */
    esc_html__( 'Your city is %s.', 'my-plugin' ),
    esc_html( $city )
);

sprintf(
     /* translators: 1: Name of a city 2: ZIP code */
    esc_html__( 'Your city is %1$s, and your zip code is %2$s.', 'my-plugin' ),
    esc_html( $city ),
    esc_html( $zipcode )
);

우리는 번역을 탈출합니다.esc_html__커뮤니티 번역 문자열에서 XSS가 오는 것을 방지하고 동적 출력을 다음과 같이 탈출합니다.esc_html변수에서 XSS로부터 보호$city.

참조: https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ #

a.,

코드:

$translation = sprintf( __( '%s', 'textdomain' ), get_color() );

__()functions는 '%s' 문자열의 번역을 확인한 다음 '%s' 문자열의 번역을 '%s'의 결과로 바꿉니다.get_color(). 그래서 그 가치는.get_color()번역 함수를 통과하지 않습니다.

올바른 솔루션이 무엇인지 잘 모르겠습니다. 이 경우 테마 체크는 잊어버리십시오.

번역 가능한 문자열을 추출하는 많은 번역 도구는 다음과 같은 문자열 리터럴을 찾습니다.

$translation = __( 'red', 'textdomain' );

테마 체크 플러그인이 동적 문자열이 이러한 도구에 의해 추출되지 않는다는 사실을 알려주는 것은 안전한 선택입니다.이는 코드가 추출되는 동안 실행되지 않기 때문에 표현식이get_color()번역 가능한 문자열로 평가되지 않습니다.

문자열 추출 도구와의 호환성에 관심이 없는 경우 첫 번째 예에 따라 코드를 그대로 둡니다(두 번째 예는 이미 지적된 대로 잘못된 것입니다).

당신의 코드가 번역 도구와 함께 작동하기를 원한다면, 가능한 모든 색상 값을 포함하는 더미 PHP 파일을 만들 것을 제안합니다.(목록이 유한한 assuming).파일의 모양은 다음과 같습니다.

<?php
__('red', 'textdomain' );
__('blue', 'textdomain' );
// and so on..

그런 다음 "테마 체크" 오류가 발생하는 실제 번역 호출을 중지하려면 해당 번역 호출을 다시 선택할 수 없는 것으로 재분류해야 합니다.대부분의 추출기에서는 이와 같은 것을 놓칠 수 있습니다.

$translation = call_user_func( '__', get_color(), 'textdomain' );

* Theme Check의 저자는 WordPress의 핵심 기여자이며 WordPress i18n을 올바르게 수행하는 것에 대해 상당히 큰 목소리를 내고 있다는 점에 주목할 필요가 있습니다.

답은 이미 처음 2번의 답변에 주어져 있습니다.그것을 따르되 거기에 탈출 기능도 추가하는 것을 잊지 마세요.

이것은 하나의 값 또는 함수로 텍스트를 번역하는 방법입니다.

sprintf(
    esc_html__( 'Your translatable text goes here and value is %s.', 'textdomain' ),
    $value_or_function
);

그리고 다음과 같은 방법으로 번역 가능한 텍스트에 여러 값/함수를 추가할 수 있습니다.

sprintf(
    esc_html__( 'this is how you can add multiple values. value1: %1$s, and value2: %2$s.', 'textdomain' ),
    $value_or_function1,
    $value_or_function2
);

다음은 이 sprintf 기능에 대한 간략한 내용입니다.

arg1, arg2, ++ 파라미터는 메인 문자열에 백분율(%) 기호로 삽입됩니다.이 기능은 "단계적으로" 작동합니다.첫 번째 % 기호에는 arg1, 두 번째 % 기호에는 arg2 등이 삽입됩니다.

구문:sprintf(format,arg1,arg2,arg++)

가능한 형식 값:

%% - Returns a percent sign
%b - Binary number
%c - The character according to the ASCII value
%d - Signed decimal number (negative, zero or positive)
%e - Scientific notation using a lowercase (e.g. 1.2e+2)
%E - Scientific notation using a uppercase (e.g. 1.2E+2)
%u - Unsigned decimal number (equal to or greater than zero)
%f - Floating-point number (local settings aware)
%F - Floating-point number (not local settings aware)
%g - shorter of %e and %f
%G - shorter of %E and %f
%o - Octal number
%s - String
%x - Hexadecimal number (lowercase letters)
%X - Hexadecimal number (uppercase letters)

그러나 일반적으로 %s을(를) 사용하고 인수 값이 문자열이 된다고 가정합니다.

언급URL : https://stackoverflow.com/questions/36956558/translating-wp-with-and-sprintf