フロントエンドの言語としてロシア語と英語の両方を使用できるWebサイトを開発しています。テーマは両方の言語で文字列を翻訳しました。
今私の問題は、私がログインしているときにフックを使用するときはいつでも(たとえば、パブリッシュを投稿するためにフックする)、文字列はWebサイトではなくユーザーのロケールに基づいて翻訳されます。これらの文字列はメタデータとして保存されるので、保存後に変更することはできません。
これは誰かがadmin-ajax
を使ってリクエストを送信したときにも起こります。応答はフロントエンドではなくユーザーのロケールを使用します。だから私はそれを制御することはできません。
例:
add_action('wp_ajax_my_ajax', 'my_ajax_function');
function my_ajax_function(){
_e('Hello!','text-domain');
}
Hello!
文字列は、ユーザーの言語ではなくWebサイトの言語にする必要があります。
例2:
add_action( 'publish_post', 'example_hook' );
function example_hook($post_id){
$data = __('Hello!','text-domain');
add_post_meta($post_id, 'my_metadata', $data);
}
これにより、投稿を公開したユーザーの言語に基づいたHello!
の翻訳が節約されます。これはクールではないため、Webサイトの言語に基づく必要があります。
Webサイトのロケールを使用するようにテーマで行われていることすべて(functions.phpのajaxハンドラーを含む)を設定することは可能ですか?
(この種の問題は、私の標準的な推奨が2つの言語のフロントエンドを持たないことである理由の一部です)
問題の主な理由はあなたのajaxがテキストを返すことです。 AJAXはフロントエンドがヒューマンテキストに変換する機械レベルの値を提供するAPIのように扱われるべきです。あなたのコードがそのように構築されているとき、あなたはまたあなたのビジネスロジックがプレゼンテーションのものから切り離されているので、あなたはより良くそしてより柔軟なコードになるでしょう。
そのため、AJAXを処理するJSにテキスト変換の値を含める必要があります(開発時間が短い場合は、整数型の値ではなく、プレーンテキストの代わりに英語のテキストを「値」として使用します)。テキスト。
これは明らかにJSを肥大化させるため、コンテキストに基づいて必要なものだけをエンキューするためにwp_localize_script
を使用することをお勧めしますが、それをJS自体に含めるだけでは終わりません。 (これが通常のwordpressの.moファイルに含まれている場合、実際の翻訳をどのように取得するかに大きく左右されます。その場合、最初の選択肢が唯一の選択肢です)。
(あなたのサイトが英語であってもwtf?を考える人々のために、あなたはたぶん日付時間ローカライズをする必要があります、そしてそれはブラウザ側でのみ行うことができます。現在のところWPではあまり一般的ではありませんが、実際にはその方法でしか解決できない問題がいくつかあります。そのため、JSでのローカライズの拡張は当然のことです)