2

テーマの .MO ファイルの読み込みに少し混乱しています。私はグーグルで多くの検索を行い、バージョンが機能するようになりましたが、理由がわかりません。

まず、テーマの CSS ファイルにテキスト ドメインを設定しました。

Text Domain:        beauty

after_setup_theme を実行する Roots テーマから始めて、そこに MO ファイルをロードします。

  load_theme_textdomain('beauty', get_template_directory() . '/lang');

この MO ファイルには、'beauty' コンテキストと 'roots' コンテキストがあります。MO ファイルがロードされています。ダンプ$l10n[$domain]すると、ビューティー コンテキストを持つ 3 つの値が表示されます。

スペースの都合上、エントリを 1 つだけ表示します。

array (size=3)
  'beautyInloggen' => 
    object(Translation_Entry)[218]
      public 'is_plural' => boolean false
      public 'context' => string 'beauty' (length=6)
      public 'singular' => string 'Inloggen' (length=8)
      public 'plural' => null
      public 'translations' => 
        array (size=1)
          0 => string 'Login' (length=5)
      public 'translator_comments' => string '' (length=0)
      public 'extracted_comments' => string '' (length=0)
      public 'references' => 
        array (size=0)
          empty
      public 'flags' => 
        array (size=0)
          empty

私のサイトには、nl_NL と en_UK という 2 つのローカルがあります。これは WPML を使用して設定され、正しく読み込まれます。テーマのフォルダーに nl_NL.mo と en_UK.mo ファイルがありlangます。

だから、これはすべて良さそうです。

ただし、header.php にはログイン アンカーがあります。

<a href="<?php echo $login_url; ?>" target="_self"><?php _e( 'Inloggen', 'beauty' ); ?></a>

私の理解では、コンテキスト「beauty」とキー「Inloggen」をロードする必要があります。

そのため、自分のロケール nl_UK では機能しません。「Login」ではなく「Inloggen」という標準的なオランダ語のテキストが表示されます。

奇妙なことにmsgctxt "beauty"、PO ファイルからコンテキストを削除し、それを保存して新しい MO ファイルを作成すると、動作します。

load_textdomainMOファイルのロードに使用するプラグインで以前にコンテキストを使用したことがあり、それは正常に機能します。

コンテキストを使用する理由は、1 つのファイルに Roots と Beauty 関連のテキストが含まれており、Beauty のテキストのみに関心があるためです。_eRoots テーマのすべてのエントリを削除したくないので、ソースをロードしても表示されません。

それが1つの質問でした。

質問 2 はそれほど重要ではありませんが、私を困惑させます: テーマの例を見ると、wp-content/languages/themes/ フォルダーの PO および MO ファイルは Twtyfiftheen-nl_NL.mo として存在します。この素晴らしい記事 ( https://localise.biz/help/wordpress/loading-translations ) とこの投稿 ( https://wordpress.stackexchange.com/questions/137427/themes-text-domain-language-po- file-not-working )、MO ファイルにはコンテキスト名 + ロケールの名前ではなく、常にロケールの名前を付ける必要があることを理解しました。

この素敵なドキュメント ( https://localise.biz/help/wordpress/loading-translations ) で見つけました

So in short, WordPress will look in only two places for a theme's MO file:

{absolute_path}/{locale}.mo
wp-content/languages/themes/{domain}-{locale}.mo
e.g. for twentyfourteen's French translations:

wp-content/themes/twentyfourteen/languages/fr_FR.mo
wp-content/languages/themes/twentyfourteen-fr_FR.mo

ただし、MO/PO ファイルが wp-content/languages/themes にあるときは機能しませんでしたが、コンテキスト (質問 1) と同じ問題に関連している可能性があります。

乾杯

4

1 に答える 1