web-dev-qa-db-ja.com

多言語テーマを開発する方法

多言語のWordPressテーマを作成する方法については、私はまだ簡潔な説明を見つけ終えていません。

私はかなり有能な開発者であり、私の時間でいくつかのカスタムテーマを作りました。私が取り組んでいるプロジェクトのために、私はちょうど私のワイヤーフレームをWordPressに変換するプロセスを始めています。私はこのサイトが私が作成しているこの1つのカスタムテーマだけを使用することをすでに知っています、そして私はサイトがおよそ5つの異なる言語で利用可能になることを知っています。

ユーザーが単に彼らの国の旗をクリックすることができるページの上部に言語セレクターがあるでしょう、そしてそれはサイト全体の言語を変えるであろうある内部設定をリフレッシュするでしょう。私が理解していることから、あなたはサイトを翻訳するためにpo/moファイルを使用することができますが、残念ながら私はそれについて私の頭を理解することができません。

理想的なシナリオは、私が英語でテーマを開発すること、そして複数の翻訳を持つことになる文字列のために何らかのローカライズ関数(__()&_e()?)を使うことです。開発が終わったら、各言語の翻訳可能な文字列それぞれに翻訳を追加できるようにする必要があります。私はその解決策がPOEditを使うことであると確信していますが、それがすべてどのように結び付いているのか理解できません。

明確にするために、私はあなたが異なるページ/投稿に対して異なる翻訳を持っているプラ​​グインを探していません。カスタムテーマ内の個々の文字列を翻訳できるようなソリューションを探しています。

あなたが与えることができるアドバイスを前もってありがとう。

2
Ollie

Danielの答えは非常に似ていましたが、テーマではなくプラグインに適用されました。そのため、私はこの問題に遭遇した他の誰かのために私が特にそれをテーマにした方法を説明するつもりです。

  1. テーマのルートに「languages」という名前のフォルダを作成します。
  2. https://wpcentral.io/internationalization/ に移動し、自分の言語を検索して「WordPress Locale」コードをコピーします(チェコ語の場合はcs_CZ)。
  3. オープンポディット
  4. ファイル - >新規
  5. 表示されたボックスに、wpcentralから対処したコードを貼り付けます。
  6. [保存]をクリックして、手順1で作成した「言語」フォルダに保存します。
  7. 「ソースから抽出」(またはカタログ - >プロパティ)を押します。
  8. [Sources Paths]の下の[Paths]ボックスで+を押します。
  9. あなたのテーマフォルダを選択してください(例:wp-content/themes/my-theme)
  10. [ソースキーワード]タブで、[新しいアイテム]をクリックします。
  11. 「__」(アンダースコア、アンダースコア、引用符なし)を入力して、Enterキーを押します。
  12. "_e"(引用符なし)を入力して、Enterキーを押します
  13. OKを押す
  14. 保存を押します
  15. プレスカタログ - >ソースからの更新
  16. テーマの翻訳可能な文字列がすべて表示されるはずです(基本的に "__( 'Hello world'、 'mydomain')"を使用すると翻訳が表示されます)。
  17. 翻訳が完了したら、[ファイル] - > [MOにコンパイル]を押します(手順1の同じ言語のフォルダに保存します)。
  18. テーマの関数ファイルの先頭に次のコードを追加します。

    function mytheme_localisation(){
    
        function mytheme_localised( $locale ) {
            if ( isset( $_GET['l'] ) ) {
                return sanitize_key( $_GET['l'] );
            }
            return $locale;
        }
        add_filter( 'locale', 'mytheme_localised' );
    
        load_theme_textdomain( 'mytheme', get_template_directory() . '/languages' );
    }
    add_action( 'after_setup_theme', 'mytheme_localisation' );
    
  19. サイトを動的に翻訳するために、URLパラメータl = {language code}を追加することができます(例:mysite.com/?l=cs_CZ - これはpoeditを使って翻訳したcs_CZ.moファイルをロードします)。

要約すると、テーマ内の文字列を翻訳するには、次のコードを使用します。

__( 'Hello, World!', 'mytheme' )

ここで、 'mytheme'はステップ18の機能で設定したテキストドメインです。これとPoeditを使用したPO/MOファイルの作成を組み合わせると、テーマを多言語にすることができます。私の場合は、自分のサイトのフラグセレクタを使って動的に言語を変更し、ユーザーの設定をCookieに保存して、戻ってきたときにリダイレクトすることができるので、これは完璧な解決策でした。

これが私に ages を理解させたので、これが同様の問題を抱えている他の誰かに役立つことを願っています。

3
Ollie

私自身は、最近数回それをやったが、それから私が作ったプラグインだけのために。しかし、私はそれがソートまたはそれ以下で同じように動作すると思います。あなたは確かに__()かそれに類似した関数を使う必要があります、しかしまたあなたは常に最初にテキストドメインをロードする必要があるでしょう。私はトップクラスの構築直後にテキストドメインをロードし、それを生成するためにフロントエンドコントローラとバックエンドコントローラの子孫によって明示的に開始されます。

/*
* Init localization text domain
*/
public static function plugin_load_textdomain(){
    load_plugin_textdomain( PLUGIN_TEXTDOMAIN, false, dirname(      
    plugin_basename( __FILE__ ) ) . '/languages' ); 
}

// This action hooks to WordPress init event and triggers it on init event
add_action( 'init', array($plugin->model, 'plugin_load_textdomain'), 10 ); 

これは私が思うテンプレート関数と同様に機能するはずです。それからビューレイヤで翻訳するために文字列と一緒にそれを使用します。

<?php echo __( 'Translate me!', PLUGIN_TEXTDOMAIN ); ?>

それを動作させるためにはフォルダplugin_basename( _ file _ ))を使用してください。 '/ languages'は翻訳された文字列を含むPOファイルを含まなければなりません。ファイルの作成にはPoeditを使います。 Poeditで作成されたファイルは、WordPressが変換するネイティブの方法に準拠しており、MOがWordPressとどのように連携するかについては、 https://codex.wordpress.org/I18n_for_WordPress_Developers を参照してください。

これが助けになることを願っています、そして私は良い情報がこれであまり利用できないことに同意します。必要に応じてもっとお気軽にお問い合わせください。 Gr

1
Daniel Mulder