6つのローカライズバージョン(英語、ドイツ語、ロシア語など)を含むサイトを構築しています。そのため、サイトには、言語間で共通の構造を持つローカライズされたナビゲーションメニューがあるはずです。
いくつかのDrupal API呼び出しが必要なメニュー構造を作成する最も早い方法ですが、メニュー項目をインポートすることを決定しました。したがって、menu_link_save()
関数を使用すると、言語フィールドが正しく設定されます...しかし、異なる言語でインポートされたアイテムは互いに混合し、すべて一緒に表示されます:-(
Drupal管理インターフェースを介してインポートしたメニュー項目を開いて保存すると、適切に動作し、サイトがその言語である場合にのみ表示されます。また、この項目の[オプション]データベースフィールドに値が入力されます他のインポートされたアイテムと比較したいくつかの追加データを使用して。
だから私の質問です:メニュー項目をすべての必要なオプションで保存するには、どのi18n APIまたは他の関数を呼び出す必要がありますか?たぶん、メニューを簡単にインポートするより良い方法がありますか?
前もって感謝します!
I18nで直接プレイする必要はありません。必要なのは正しい構成です。 translatedとlocalizedの項目にも違いがあります。翻訳されたアイテムは別のページを参照している場合があり、(他のカスタマイズに加えて)別の説明がある場合があります。ローカライズされたアイテムは、言語ごとにメニューのタイトルが異なるだけの同じアイテムです。
翻訳済みアイテムが欲しいと思います。ここにいくつかのコメント付きのレシピがあります:
<?php
$menu_item = array(
'link_title' => 'The menu link title',
'menu_name' => 'machine-name-of-the-menu', // It uses '-', not '_'
'customized' => 1, // Must be 1 in order to not dispaly the link in any language
'link_path' => 'node/' . $node->nid, // menu_link_save() does not like aliases. Then 'nid' is used
'language' => 'en', // language is required in order to make the item translatable
);
$mlid = menu_link_save($menu_item); // You don't need to receive it in a variable
$ml = menu_link_load($mlid); // I'm loading $mlid just to display the result and verify it
print_r($ml); // Use print_r() only if you are testing on the block "Execute PHP"
「カスタマイズ」の必要性とパスエイリアスの問題を理解するためにhardの時間がありました。