2

私は wordpress プラグインを書いていて、drupal の実装を計画しています。wordpress 関数をアダプターにラップしています。だから私__()は単純なためのアダプターを書きました

class Ai1ec_Wordpress_Template_Adapter implements Ai1ec_Template_Adapter {

    ...

    public function translate( $text ) {
        return __( $text, AI1EC_PLUGIN_NAME );
    }

私は gettext の専門家ではなく、同僚が次のように書いてくれました。

コードが xgettext によって解析されて .pot ファイルが生成されると失敗します。__() などの WP i18n 関数では、文字列リテラルが最初の引数として渡される必要があり、変数ではありません。そして IIRC、Drupal の t() 関数についても同じことが言えます。

コーデックスのエントリ
http://codex.wordpress.org/I18n_for_WordPress_Developers#Placeholdersを読みました

http://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/t/7

そして、これに正確に関連するものを見つけることができませんでした。なぜこれが機能しないのか、Wordpress や Drupal と互換性のあるものを書くにはどうすればよいのか、semoone が正確に説明してくれますか?

4

2 に答える 2

1

一般に、同僚は正しいです。変数を翻訳関数に渡すと、同じ文字列がリテラルとして別の場所に渡されない限り、変数は翻訳されません。これは、翻訳テンプレートを生成してもコードが実行されず、特定の関数名が検索されるためです。変換メソッドには 2 つの目的があります。1 つはパラメータを変換すること、もう 1 つは変換テンプレート ファイルにどの文字列を含める必要があるかを変換テンプレート生成プログラムに対して識別することです。

関数のパラメータが翻訳可能な文字列であることを、翻訳テンプレート生成コード (通常は xgettext) プログラムに伝える必要があります。xgettext では、これは -k パラメータで実行できます。WordPress には、使用できる xgettext への独自のラッパーが既にある場合があります。

明示的にリンクした drupal ドキュメントには、テキストが他の場所でリテラルとして渡されることが確実でない限り、変数を t() に渡すべきではないと書かれています。

于 2012-10-04T12:13:54.490 に答える
0

Wordpress と Drupal の両方のバージョンは、変数に保持された文字列を受け取る必要があります。Drupal のバージョンはやや紛らわしい表現になっています。Drupal ドキュメントが言っていることは、元のテキストのソースがユーザーによって生成されたものである場合は注意する必要があるということです。

$foo = 'bar';
($foo == 'bar') == true;
于 2012-10-03T09:55:01.440 に答える