구텐베르크는 React에서 번역을 어떻게 처리합니까?


11

나는 예를 들어, 구텐베르크의 소스 코드를 통해가는 그들이 번역을 처리하는 방법을 이해할 수 없다 ...

그들은 이것을 가져온 import { __ } from '@wordpress/i18n'다음 소스 코드에서 이것을 사용합니다 speak( __( 'Block settings closed' ) );.

누구든지 ReactJS에서 이러한 번역을 관리하여 일반 .po 파일로 수집하는 방법을 말해 줄 수 있습니까?

JS를 포함한 모든 파일을 거치고 수집하는 빌드 프로세스가 있다고 가정하지만 확실하지는 않습니다.

답변:


6

에서 구텐베르크의 GitHub의 저장소 당신이 사용하는 국제화 패키지의 소스를 볼 수 있습니다. 이 소스에서 Jed 가 수입되고 (gutenberg / packages / i18n / src / index.js의 4 행) 수입 된 후 대부분의 번역 작업에 사용됩니다.

Jed 는 "현대 JavaScript 앱을위한 Gettext Style i18n"을 소개합니다.

귀하의 질문은 .po 파일에 대한 것입니다. 제드는 자신의 사이트에서 다음과 같이 설명합니다.

거기에는 꽤 많은 .po-.json 변환기가 있습니다. Gettext .po 파일은 오래된 표준이므로 대부분의 번역 회사에서 제공하는 표준 출력입니다.

나는 현재 사용 : po2json

그러나 향후 버전에서는이 기능을 별도의 Jed 모듈에 추가하고 싶습니다.

그러나 이것은 여기에 적용되지 않는 것 같습니다.

추가 파기는 다음과 같은 방식으로setLocaleData( data: Object, domain: string ) 번역을 전달하는 데 사용됩니다 .

$locale_data = gutenberg_get_jed_locale_data( 'gutenberg' );
wp_add_inline_script(
    'wp-i18n',
    'wp.i18n.setLocaleData( ' . json_encode( $locale_data ) . ' );'
);

( gutenberg_get_jed_locale_data( $domain )에 대한 래퍼입니다 get_translations_for_domain( $domain ))

따라서 WordPress는 PHP를 통해 번역 데이터를 검색 한 다음 Jed로 전달합니다. Jed 자체는 번역 파일을로드하지 않는 것 같습니다.

패키지 추가 정보는 지역화 된 문자열이 포함 된 .pot 파일을 올바르게 생성하는 방법도 설명합니다 .

이 패키지에는 pot-to-php.pot 파일에 나열된 메시지가 포함 된 PHP 파일을 생성하는 데 사용 되는 스크립트 도 포함되어 있습니다. 현재 WordPress.org 번역 문자열 검색을 속이는 데 유용합니다. 현재 WordPress.org는 JavaScript 파일에서 직접 문자열을 구문 분석 할 수 없기 때문입니다.

npx pot-to-php languages/myplugin.pot languages/myplugin-translations.php text-domain

구텐베르크 가 PHP window를 통해로드 된 JSON 으로 일부 속성에 번역을 저장 wp_add_inline_script한 다음 React 측에서 검색하여 Jed로 전달한다는 의미입니까? ... 그리고 제드는 더 마술을합니까?
로거

@Bologer 반드시 window속성 일 필요는 없지만 그렇습니다. PHP는 값을 검색하고이를 통해 JS에 전달합니다wp_add_inline_script
kero

2
주석에 추가 한 정보를 사용하여 답변을 확장해야합니다. 이 의견은 실제로 OP가 찾는 것과 더 일치하는 것 같습니다
Mark Kaplun

2

적어도 지금은 더 나은 자동화 프로세스가 없다면 JS에서 .pot 파일을 전혀 생성하지 않는 것이 좋습니다.

@kero가 그의 대답에서 지금 설명하는 것처럼 GB 변환은 .mo 파일에서 JS로 일종의 블로 브 배열로 전달됩니다. 이 워크 플로는 결과 __및 연결 의 필터링에 의존하는 모든 현지화 변조 플러그인을 중단합니다 . __GB가 아닌 컨텍스트에서 JS 변환을 수행하는 방법과 비슷하게 호출 로 변환되는 문자열에서 Blob 배열을 명시 적으로 생성하는 것이 더 나은 워크 플로입니다 . 이것은 또한 .pot 파일 생성 문제를 해결합니다.

여기서 누락 된 것은 JS 파일을 실행하고 관련 PHP 코드를 생성하는 자동화 된 프로세스이며 poedit와 같은 도구로 분석 할 수 있습니다.



1
좋은 출발점, 남은 부분은 wp_add_inline_script에 대한 호출을 자동으로 생성하는 것입니다. 지금은 아마도 냄비 생성의 이점을 위해 PHP를 생성하지만 실제로는 사용하지 않습니다 (제 추측)
Mark Kaplun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.