Gutenbergは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スタイル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自体は翻訳ファイルをロードしないようです。

パッケージのreadmeには、ローカライズされた文字列を含む.potファイル適切に生成する方法も説明されています。

パッケージにpot-to-phpは、.potファイルにリストされたメッセージを含むphpファイルを生成するために使用されるスクリプトも含まれています。現在のところ、WordPress.orgはJavaScriptファイルから直接文字列を解析することができないため、これはWordPress.orgの翻訳文字列の発見をだますのに役立ちます。

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

Gutenbergが翻訳をいくつかのwindowプロパティにwp_add_inline_scriptPHPによって読み込まれたJSONとして格納し、それをReact側で取得してJedに渡すことを意味しますか?...そしてジェッドはさらに魔法をかけますか?
Bologer

@Bologer windowプロパティとは限りませんが、そうです。PHPは値を取得し、それらをJSに渡しますwp_add_inline_script
kero

2
私のコメントに追加した情報で答えを広げてください。そのコメントは、実際にはOPが求めるものとより一致しているようです
Mark Kaplun

2

少なくとも今のところ、より良い自動化プロセスがない限り、JSから.potファイルを生成しないことをお勧めします。

@keroが彼の回答で説明しているように、GB変換は.moファイルからJSに一種のblob配列として渡されています。このワークフローは、結果__と関連付けのフィルタリングに依存するすべてのローカリゼーション改ざんプラグインを壊します。より良いワークフローは__、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.