web-dev-qa-db-ja.com

GutenbergはReactでの翻訳をどのように処理しますか?

私はグーテンベルクのソースコードを調べていました。 これ そして彼らがどのように翻訳を処理するのか理解できない...

彼らはこのimport { __ } from '@wordpress/i18n'をインポートし、それからソースコードの中で彼らはこのspeak( __( 'Block settings closed' ) );を使います。

ReactJS内でこれらの翻訳をどのように管理して通常の.poファイルに収集するかを教えてもらえますか?

私は彼らがJSを含むすべてのファイルを通り抜けてそれらを集める何らかの構築プロセスを持っていると思いますが、確かではありません。

10
Bologer

GutenbergのGitHubレポジトリ では、使われている国際化パッケージのソースを見ることができます。このソースでは、 Jed がインポートされている{ (g​​utenberg/packages/i18n/src/index.jsの4行目 } _と表示されていますフード.

Jed は「モダンなJavaScriptアプリのためのGettextスタイルの国際化」を紹介しています(あるいは少なくともそう彼らのサイトで述べているように)。

あなたの質問は.poファイルに対するものです。 Jedは自分のサイトで次のように説明しています。

そこにかなりの数の利用可能な.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ファイルにリストされているメッセージを含むphpファイルを生成するために使用されるpot-to-phpスクリプトも含まれています。現時点では、WordPress.orgはJavaScriptファイルから直接文字列を解析することができないので、これはWordPress.orgの翻訳文字列の発見をだますのに役立ちます。

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

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

@ keroが彼の答えで今説明しているように、GBの翻訳は.moファイルからJSへの一種のBLOB配列として渡されています。このワークフローは、__と仲間の結果をフィルタリングすることに依存しているすべてのローカライゼーション改ざんプラグインを壊します。より良いワークフローは、__呼び出しで翻訳されている文字列から明示的にBLOB配列を生成することです。これは、非GBコンテキストでJS翻訳を行う方法と同じです。これは.potファイルを生成する問題も解決します。

ここで欠けているのは、JSファイル上で実行され、関連するPHPコードを生成する自動化されたプロセスです。これは、poeditのようなツールによって分析されます。

2
Mark Kaplun