web-dev-qa-db-ja.com

プラグインの外側から来る文字列をローカライズする?

プラグインはリモートAPIを照会し、特定の状況下(主にエラー)でAPI応答からのテキストメッセージを表示します。 APIレスポンス内のメッセージはすべて英語ですが、プラグインにほぼ統合されているため、プラグインのインターフェースに合わせて異なる言語でローカライズして表示可能にすることをお勧めします。

理論的な質問 - そのようなメッセージはまったくローカライズされるべきですか、それともローカライズの範囲外ですか?

コーディングに関する質問 - どのようにしてそのようなものをローカライズし、関連ツールとの互換性を維持するのですか? __( $message );のようなものでも意味がありますか?

以前は、文字列の抽出にスキャンプラグインのソースを使用する Codestyling Localization を使用していました。体。

3
Rarst

そのようなメッセージはまったくローカライズされるべきですか、それともローカライズの範囲外ですか?

はい、それらはローカライズされるべきです...しかしAPIによって返されるテキストに依存しないでください。

__( $message );のようなものでも意味がありますか?

あんまり。まず第一に、あなたはローカライズで使用する文字列のためのテキストドメインを提供していません。それは本当に__( $message, 'my-text-domain' );であるべきです。それでも、$message静的値のリストがない場合は、ローカライズが重要なポイントです。

代わりにできること

堅牢性の原則 は、外部APIのコンテンツを統合するときには常に心に留めておくべき素晴らしいことです。あなたは完全にAPIがあなたに与えるものを完全に信頼することはできません...元の所有者はあなたに通知することなく事を変えるかもしれません、あるいは彼らのシステムは壊れて間違った情報を提供するかもしれません。だからあなたは常にしなければなりません:

あなたが送るものに保守的になりなさい。あなたが受け入れるものには寛大になりなさい。

APIが返すコンテンツ(つまり、静的な文字列のリスト)を既に知っている場合は、それをプラグインに入れます。次に、サニテーションメソッドを使用して、APIから返されたものをローカライズされた文字列にマッピングします。

例えば:

$map = array( 
    'This is one return' => __( 'This is one return', 'my-text-domain' ),
    'This is another' => __( 'This is another', 'my-text-domain' )
);

sanitize_api_feedback( $api_sent ) {
    return $map[$api_sent];
}

このように、あなたは実際には外部APIの生の出力を決して使いませんが、常にあなた自身のフィルタを通してそれを実行します。あなたは使用されるテキスト文字列を完全に管理しており、標準のローカライゼーションフィルタを通してそれらを実行することができます。

API Returnが自由形式の場合

APIから返される静的文字列のリストがない場合、これは機能しません。また、APIが自由形式のコンテンツを返す場合は、次のいずれかを実行する必要があります。

  1. ローカライゼーションをAPI自体に任せる(可能であれば)
  2. エンドユーザーに他の翻訳サービスを提供する...多分 Google翻訳

あなたのプラグインがその場で自由形式の文字列を翻訳する責任を負うことができる方法はありません。しかし、簡単に予想されるエラーメッセージの静的リストは?それは間違いなくあなたができること、そしてすべきことです。

5
EAMann