web-dev-qa-db-ja.com

Polylang:カスタム文字列を翻訳する方法は?

私の問題:Polylangを使用してWebサイトを翻訳していますが、カスタム文字列の翻訳に苦労しています。 WPダッシュボードの[文字列の翻訳]メニューに文字列が表示されません。

重要:PHPだからpll_register_string function私にとって非常に混乱しています。

Polylangのドキュメントから引用:

https://polylang.wordpress.com/documentation/documentation-for-developers/functions-reference/

pll_register_string

プラグインが「strings translation」パネルに独自の文字列を追加できるようにします。この関数は、管理者側で呼び出す必要があります(functions.phpファイルはテーマに問題ありません)。空の文字列を登録することは可能ですが(たとえば、オプションから来る場合)、リストテーブルには表示されません。

使用法:

pll_register_string($ name、$ string、$ group、$ multiline); '$ name' =>(必須)並べ替えに便利な名前(例: 'myplugin') '$ string' =>(必須)翻訳する文字列 '$ group' =>(オプション)文字列が含まれるグループ登録済み、デフォルトは 'polylang' '$ multiline' =>(オプション)trueに設定されている場合、翻訳テキストフィールドは複数行、デフォルトはfalse

pll __

以前にpll_register_stringで登録された文字列を変換します

pll __($ string);一意のパラメーターが必要です。

「$ string」=>翻訳する文字列は、翻訳された文字列を返します。

pll_e

以前にpll_register_stringで登録された翻訳済み文字列をエコーし​​ます。

pll_e($ string);一意のパラメーターが必要です。

'$ string' =>変換する文字列

宜しくお願いします

6
MIkeMo

最初に、これらすべての文字列を翻訳用に登録する必要があります。

たとえば、次のようなテンプレートファイルで「Hello world」をエコーし​​ます。

<?php pll_e('Hello world'); ?>

「文字列の翻訳」に文字列を表示するには、functions.php

add_action('init', function() {
  pll_register_string('mytheme-hello', 'Hello world');
});

翻訳するすべてのカスタム文字列をこの関数に追加します。

24
drazewski

Polylang docs によると、最初にpolylang関数の存在を確認するのが良いと述べています。したがって、サイトはPolylangプラグインの更新時に壊れません-古いファイルを最初に削除するからです。

したがって、私はこのアプローチを提案します:functions.phpforテーマのプラグインのファイルで、polylangが削除または更新された場合、フォールバックで必要なPolylang関数のラッパーを作成できますWPはクラッシュしません未定義の関数エラー。

/**
 * Outputs localized string if polylang exists or  output's not translated one as a fallback
 *
 * @param $string
 *
 * @return  void
 */
function pl_e( $string = '' ) {
    if ( function_exists( 'pll_e' ) ) {
        pll_e( $string );
    } else {
        echo $string;
    }
}

/**
 * Returns translated string if polylang exists or  output's not translated one as a fallback
 *
 * @param $string
 *
 * @return string
 */
function pl__( $string = '' ) {
    if ( function_exists( 'pll__' ) ) {
        return pll__( $string );
    }

    return $string;
}

// these function prefixes can be either you are comfortable with.

pl__およびpl_eに単一のlを含む関数を作成し、元のPolylang関数はpll__およびpll_eです。

これらは、翻訳された文字列を出力または返すためにテーマで使用されます。

前述のように、これらの文字列を登録する必要があるため、Polylangはこれらの文字列を翻訳する必要があることを認識します。

テーマを使用する場合は、次のようにafter_setup_themeフックで初期化することをお勧めします。

function your_prefix_after_setup_theme() {

   // register our translatable strings - again first check if function exists.

    if ( function_exists( 'pll_register_string' ) ) {

        pll_register_string( 'ToggleNavigation', 'Toggle navigation', 'YourThemeName', false );

        pll_register_string( 'ToggleSearch', 'Toggle Search', 'YourThemeName', false );

        pll_register_string('404Message', 'It looks like nothing was found. Try getting back to the <a href="%s">home page</a>.', 'YourThemeName', true);

    }
}
 add_action( 'after_setup_theme', 'your_prefix_after_setup_theme' );
4
Mikhail.root