기본 WordPress 핵심 번역 재정의


11

워드 프레스가 네덜란드어로 설정되어 있습니다. get_the_archive_title()테마를 사용 하면 카테고리 아카이브 페이지에 "Categorie : Category-name"이 올바르게 출력됩니다. 그러나 "Sectie : Category-name"을 읽고 싶습니다.

wp-content / languages ​​폴더에서 네덜란드어 파일을 변경하고 싶지 않습니다. WordPress 업데이트로 업데이트되기 때문입니다.

번역 파일을 복사하고 "카테고리"번역을 변경하고 새로운 nl_NL.mo 파일을 my-theme / languages에 넣었습니다. 이것은 효과가 없었습니다.

핵심 번역 파일을 변경하지 않고 어떻게 일부 문자열에 대해 다른 번역을 수행 할 수 있습니까?

답변:


15

gettext 필터를 사용할 수 있습니다 .

add_filter( 'gettext', 'cyb_filter_gettext', 10, 3 );
function cyb_filter_gettext( $translated, $original, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

당신이 컨텍스트 번역을 필터링해야하는 경우, 사용 gettext_with_context필터 :

add_filter( 'gettext_with_context', 'cyb_filter_gettext_with_context', 10, 4 );
function cyb_filter_gettext_with_context( $translated, $original, $context, $domain ) {

    // Use the text string exactly as it is in the translation file
    if ( $translated == "Categorie: %s" ) {
        $translated = "Sectie: %s";
    }

    return $translated;
}

컨텍스트를 사용한 변환은 문자열을 변환하는 데 사용되는 gettext 함수에 컨텍스트가 제공됨을 의미합니다. 예를 들어, 이것은 컨텍스트가 없습니다.

$translated = __( 'Search', 'textdomain' );

그리고 이것은 맥락과 관련이 있습니다.

$translated = _x( 'Search', 'form placeholder', 'textdomain' );

복수 번역 ( [_n()][2][_nx()][2]) : ngettext및에 유사한 필터를 사용할 수 있습니다 ngettext_with_context.


1
작동했습니다! 텍스트가 번역 파일에서와 정확히 일치해야하므로 "Categorie : % s"및 "Sectie : % s"를 수행해야했습니다.
Florian

네, 맞습니다. 번역 할 정확한 텍스트를 몰랐습니다.
cybmeta

1
훌륭한 코드 – gettext필터가 "컨텍스트"문자열을 사용하는 번역을 포착하지 못한다는 점에 유의하십시오 . gettext_with_context 가 필요합니다 .
Manu

이 훌륭한 솔루션에 감사드립니다. 자식 테마를 만들고 부모 테마의 번역 중 일부를 무시하려고 할 때 제안 된 함수 본문을 다음 줄로 대체했습니다 return $domain != 'child-domain' && ( $new = __( $original, 'child-domain' ) ) != $original ? $new : $translated;. 이런 식으로, 기능 코드에 케이블로 연결하지 않고 하위 테마의 PO 파일에서 우선하는 번역을 관리 할 수 ​​있습니다.
프랑코

고마워 cybmeta! 이 기술을 사용하여 repo에 게시 한 플러그인으로 핵심 텍스트를 변경했습니다. 나는이 게시물을 코드에 담았다. wordpress.org/plugins/…
John Dee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.