로드 시 WordPress 플러그인 변환 파일 재정의
이벤트 캘린더 플러그인과 함께 WordPress를 프랑스어로 사용하고 있습니다.
이 플러그인은 번들된 프랑스어 번역과 함께 제공되지만 오류가 있습니다.수정하고 싶지만 다음 업데이트로 대체될 예정이기 때문에 원본 파일을 교체하는 것은 좋지 않습니다.수정안을 제출하기 위해 개발자에게 연락했지만 시간이 걸릴 수 있습니다.
그동안 템플릿 디렉토리에서 복사한 것을 로드하고 싶습니다.저는 이미 다음과 같은 여러 가지 시도를 했습니다.
load_plugin_textdomain( 'tribe-events-calendar', get_template_directory() . '/languages' );
또는 를 사용하여
add_filter('override_load_textdomain', …)
할 수 있어요.php는 동작하지 않는 것 같습니다.제가 할 수 있었던 것은 번역 파일의 로드를 무효로 하는 것 뿐이었습니다.
로드 시 플러그인 번역 파일을 교체할 수 있는 방법이 있습니까?저도 WPML을 사용하고 있습니다만, "Translate with WPML"이 아닌 "Translate with .mo files" 모드로 되어 있기 때문에 플러그인 번역을 즉시 변경할 수 없습니다.WPML은 이벤트 캘린더의 내 번역본을 로드할 수 있지 않을까?
이 몇 줄을 함수에 추가할 수 있습니다.php 테마 파일
$text_domain = 'the-events-calendar';
$original_language_file = ABSPATH . DIRECTORY_SEPARATOR . 'wp-content' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'the-events-calendar' . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'the-events-calendar-fr_FR.mo';
$override_language_file = ABSPATH . DIRECTORY_SEPARATOR . 'wp-content' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . 'your-own-theme' . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'the-events-calendar-fr_FR.override.mo';
// Unload the translation for the text domain of the plugin
unload_textdomain($text_domain);
// Load first the override file
load_textdomain($text_domain, $override_language_file );
// Then load the original translation file
load_textdomain($text_domain, $original_language_file );
두 개의 파일 변수를 실제 언어 파일로 교체해야 합니다.
그러나 프랑스어 파일은 플러그인 언어 폴더에 있고 덮어쓰기 언어 파일은 언어 테마 폴더에 있다고 가정합니다.
목적은 다음과 같습니다.
- WP에 의해 자동으로 로드된 언어 로드 해제
- 우선 덮어쓰기 파일을 로드합니다.이 텍스트 도메인의 다른 언어 파일을 로드할 때 이미 정의된 번역은 건너뛸 수 있으므로 먼저 로드하는 것이 중요합니다(WP 코어 참조).
- 원래 변환 파일을 로드합니다.그러면 실제로는 오버라이드 파일의 번역되지 않은 문자열이 모두 로드됩니다.
이것은 컴파일된 mo 파일에서만 동작합니다.
재정의 파일에 재정의할 문자열 몇 개만 추가할 수 있습니다.
전 트랜스포시 플러그인의 저자에요
실제로는, 다음의 4개의 필터에 회답이 있습니다.
add_filter('gettext', ......, 3);
add_filter('gettext_with_context', ......, 3);
add_filter('ngettext', ......, 4);
add_filter('ngettext_with_context', ....., 4);
(당연히 ..... 대신 기능과 priority를 추가해야 합니다.)
이러한 함수는 문자열과 도메인을 가져옵니다.이러한 함수를 사용하여 다음과 같은 기능을 수행할 수 있습니다.
function gettext_filter($translation, $orig, $domain) {
if ($domain == 'plugin_domain') {
if ($orig == 'some text') {
return "some translation";
}
}
return $translation;
}
이 솔루션은 워드프레스의 자동 로더를 사용하여 플러그인을 재정의하며 추가 프로그래밍 로직이 필요하지 않습니다. 대신 CMS가 재정의하도록 합니다.
해 보겠습니다.my-plugin
은 2개의 「」에wp-content/languages/plugins/
라고 하는my-plugin-fr_FR.po
★★★★★★★★★★★★★★★★★」my-plugin-fr_FR.mo
(일). ('로케일.fr_FR
프랑스어 번역의 예에 불과합니다.을 이용하다
플러그인이 이 구조를 가지고 있는 경우는, 다음의 순서에 의해서 변환이 덧쓰기됩니다.그렇지 않은 경우는, 다른 방법으로 참조할 수 있습니다.
- 및 을 .po .mo 합니다.
wp-content/languages/my-plugin
디렉토리가 존재하지 않는 경우는, 작성합니다. - 원하는 대로 번역 파일을 편집하여 저장합니다.
언급URL : https://stackoverflow.com/questions/18826977/override-a-wordpress-plugin-translation-file-on-load
'programing' 카테고리의 다른 글
반응 선택 비활성화 옵션 (0) | 2023.03.28 |
---|---|
컴포넌트를 반응시키기 위한 전달 (0) | 2023.03.28 |
AngularJS: 공장 출하시 $http.JSON 파일 가져오기 (0) | 2023.03.28 |
워드프레스로 삭제하지만 html은 유지합니다. (0) | 2023.03.23 |
MAMP 설치에서 작업하는 WordPress permalinks 가져오기 (0) | 2023.03.23 |