자식 테마의 부모 테마 번역 재정의


12

load_theme_textdomain()번역 된 모든 문자열을 여러 언어로로드 하는 데 올바르게 사용하는 부모 테마가 있습니다.

그런 다음 load_child_theme_textdomain()문자열과 동일한 것을 달성 하는 데 사용되는 자식 테마를 만들었습니다 .

자식 테마에서 바꾸거나 재정의하려는 부모 테마에 특정 언어로 번역 된 특정 문자열이 있습니다.

템플릿 파일에 있는지 알고 있으면 파일을 바꾸고 해당 문자열의 텍스트 도메인을 간단하게 변경할 수 있지만 불행히도 내가 이야기하는 문자열은 많은 장소와 대시 보드 (일부 필터 / 작업 함수 내부)에서 사용됩니다 ).

그래서 내 질문은 : 부모 템플릿 파일이나 함수를 바꾸지 않고 자식 테마 내에서 번역 된 문자열을 바꾸는 방법이 있습니까?

모르겠습니다. 어쩌면 자식 테마의 언어 폴더 안에 parent-theme.mo 파일을 번역 된 문자열 또는 이와 비슷한 것으로 추가하는 것이 좋습니다.

답변:


9

나는 해결책을 찾았지만 조금 전에

전제

load_theme_textdomain()load_child_theme_textdomain()기본적으로 동일, 유일한 차이점은 사용하는 기본 경로는 다음과 같습니다

  • 현재 언어를 사용하여 (을 사용하여 get_locale()) 상대 .mo 파일을 인수로 전달 된 경로에 추가합니다 .
  • 그런 다음 load_textdomain()텍스트 도메인과 .mo 파일의 결과 경로를 모두 인수로 전달하여 호출 합니다.

그런 다음 load_textdomain.mo 파일을 전역 textdomain 변수로로드하지만 소스 에서 읽을 수 있습니다 .

도메인이 이미 존재하면 번역이 병합됩니다.

두 세트의 문자열이 모두 같은 경우 원래 값의 변환이 수행됩니다.

따라서 원하는 테마 부모의 문자열 만 재정의 / 바꾸려면 부모 테마가 .mo 파일을로드 하기 전에 번역 된 문자열 만 포함하는 부모 textdomain에 대한 사용자 지정 .mo 파일을로드해야 합니다.


해결책

결국, 나는 간단하게 부모 테마의 이름을 가진 폴더를 자식 테마 언어 폴더에 만들고 폴더 안에 부모 텍스트 도메인에 대한 사용자 정의 .mo 파일 (언어, xx_XX.mo양식, xx_XX언어 코드는 어디에 있습니까 ?

그런 다음 작업 functions.php중에 after_setup_theme자식 테마 텍스트 도메인의 .mo 파일을로드 하는 줄 근처에 자식 테마 파일에 줄을 추가했습니다 .

add_action( 'after_setup_theme', function () {
    // load custom translation file for the parent theme
    load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' );
    // load translation file for the child theme
    load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
} );

functions.php자식 테마 의 파일이 부모의 파일보다 먼저로드되기 때문에이 문자열 집합은 부모 테마 변환보다 우선합니다 (또는 add_action함수 의 세 번째 매개 변수를 사용하여 우선 순위를 설정할 수 있습니다).


참고 : 전제에서 말했듯 load_child_theme_textdomainload_theme_textdomain, 대신 사용할 수있었습니다 .


4

하위 테마 폴더에있는 언어 파일을 사용할 수 있습니다. 먼저 부모 테마가 사용중인 텍스트 도메인을 알아야합니다. 그런 다음 파일 이름으로 언어 만 사용하는 .po 및 .mo 파일 (예 : de_DE.po / de_DE.mo 또는 nl_NL.po / nl_NL.mo)을 하위 테마 디렉토리 "languages"의 폴더에 넣습니다. 예를 들어.

그런 다음 다음을 사용하여 텍스트 도메인을 초기화 할 수 있습니다 load_child_theme_textdomain().

load_child_theme_textdomain( 'the_text_domain', get_stylesheet_directory() . '/languages/' );

부모 테마 PHP 파일 과 같 __()거나 그 _e()안에서 함수 호출을 찾아서 텍스트 도메인을 찾을 수 있습니다. 두 번째 매개 변수는 텍스트 도메인입니다.__( 'Translated text string', 'text_domain' );


@redelschaap 덕분에 결국 부모 textdomain에 대해 자식 textdomain에 사용하는 폴더와 다른 폴더를 사용하는 한 솔루션이 작동합니다. :)
d79

하위 테마 내에서 여러 텍스트 도메인을로드 할 수 있습니다. 그러나 동일한 텍스트 도메인의 파일을로드 할 때 번역이 병합되므로 모든 번역에 상위 테마 텍스트 도메인을 사용할 수도 있습니다.
redelschaap

0

Wordpress 5.0.1 용 2019 업데이트

  1. 파일에는 부모 또는 자식 슬러그가 없어야합니다. 예를 들어, 스페인어 멕시코 번역을 제공하려면 child-theme-name / languages ​​/ es_MX.po 및 /child-theme-name/languages/es_MX.mo 파일이 있어야합니다.
  2. 자식 테마 functions.php에는 다음 코드가 있어야합니다. 함수 load_child_theme_textdomain () 첫 번째 매개 변수는 자식이 아닌 부모 테마 슬러그입니다.
function child_theme_slug_setup() {
    load_child_theme_textdomain( 'parent-theme-slug', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'child_theme_slug_setup' );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.