回答:
これが、現在のDrupal 7.32で私が理解していることです。Drupalでのi18nの動作は設定に大きく依存するため、かなり慣れ親しんでいる方法について触れます。設定が異なる場合は、動作が異なる可能性があります。
最初に、i18n_menu
同様に有効にする必要がありますi18n_node
(動作が異なる必要があるエンティティ変換を好む人もいますが、それについては知りません)。
次に、で「パスプレフィックス」を含む「URL」を最優先し/admin/config/regional/language/configure
ます。また、個人的には、デフォルトの言語(通常は英語、 "en")のパス接頭辞をで明示的に設定することを好みます/admin/config/regional/language/edit/en
。デフォルトではNullですが、それは本質的に非対称な性質のため、非常に混乱しています。そうは言っても、明らかに各開発者次第です!
第三に、「翻訳モード」/admin/structure/menu/manage/main-menu/edit
が鍵となります。デフォルトでは、「メニュー項目の多言語オプションなし」です。もちろん、これは翻訳可能なメニューには適していません。(1)「翻訳とローカライズ」の2つのオプションのいずれかを選択します。(2)「固定言語」。
2番目のオプション(2)は、Webサイトでサポートされているすべての言語のメニュー構造が同一でない限り、ほとんどのサイトに適していると思います。(2)を選択する場合は、「メインのフランス語メニュー」などの別のメニューを作成し、「固定言語」をフランス語にチェックして、ブロック構成の好きな場所に配置します。/admin/structure/block
最初の(1)「翻訳とローカライズ」を選択すると、/admin/structure/menu/manage/main-menu/edit
(メインメニューなどの)に(上部にある)「翻訳」タブが表示され、「翻訳」列から各リンクを翻訳できるようになります。 (一番右?)で/admin/structure/menu/manage/main-menu
。
現在、メニューで何を実現したいかに完全に依存する、複数のオプションがあります。たとえば、「Hello」というノードとその「Bonjour」というフランス語の翻訳ノードがあるとします(これらは2つの異なるノード、たとえばノード1と2です)。メニューの「Hello」と「Bonjour」の両方に2つのリンクを提供しますか(どちらかの言語で表示した場合)?または、英語モード/リーダーには「Hello」のリンクを、フランス語モードには「Bonjour」のリンクを提供しますか?(これは多言語サイトの複雑さです...)
2番目のオプションを使用するとします。例として、メインメニューで "Hello / Bonjour"の単一のメニューリンクを準備します。つまり、計画は、「Hello」ノードにリンクされた「Hello」メニューが英語で表示された場合に表示され、「Bonjour」ノード(= 2)にリンクされた「Bonjour」メニューが表示された場合に表示されます。フランス語。
最初に、ノード1にリンクされた「Hello」メニューリンクを作成します。次に、上記の「TRANSLATE」タブを介して/admin/structure/menu/manage/main-menu/edit
、翻訳されたタイトルを「Bonjour」として入力し、リンクをNode =に変更することを忘れないでください「Bonjour」メニューがフランス語の「Bonjour」の記事を正しく指すようにする2。
フランス語で別のフランス語のノード(たとえば、「Au revoir」)を表示すると(パスのプレフィックスはである必要があります/fr/
)、フランス語の「Bonjour」ノードにリンクされている「Bonjour」のメニューが表示されます。英語モードで翻訳( "Good Bye")が表示されている場合(パスのプレフィックスはであってはなりません/fr/
)、上のメニューは "Hello"で、英語の "Hello"ノードにリンクされています。仕事は終わりました。
問題は、各コンテンツのパスエイリアス(すべての翻訳のノードセットの単一のパスエイリアス)を設定する方が簡単だと思います。基本的には、ノードタイプリンクの形式を/node/2
完全に使用することをあきらめます。上記の例でartilce/hello
、ノード1のパスエイリアスを設定するとします(英語。ノード2には別のパスエイリアスを設定しないでください。混乱を招くためです)。にアクセスする/fr/artilce/hello
と、フランス語メニューで「Bonjour」のノードが表示されます。ただし、アクセスした場合/fr/node/1
、表示されるのは英語の "Hello" -node(= 1)ですが、上のメニューはフランス語の "Bonjour"です。これは、フランス語の環境でコンテンツを表示しているときにnode = 1が英語で書かれているため、メニューが強制的にフランス語になるためです(ローカライズを有効にした場合、ユーザーメニューなどの他の部分もフランス語になりますが、メインコンテンツ)。
一部の人々にとって、それは彼らが望んでいることかもしれません。たとえば、フランスのショッピングサイトでは、ショッピングバスケットなどに英語のインターフェースを提供している場合がありますが、各商品の説明を翻訳して販売する必要はありません。Drupalのi18nがこのように設計されているのはそのためだと思います。
最後に、設定を変更しながら、頻繁に「すべてのキャッシュをフラッシュ」して、行った変更が表示内容に確実に反映されるようにすることができます。
国際化モジュールの一部であるi18nメニュー翻訳サブモジュールを有効にする必要があると確信しています。
メニューを編集し、必要な翻訳モードを選択します。翻訳とローカライズを使用しています。
次に、メニューリンクを編集すると、翻訳用の新しいタブが表示されます。そこから、翻訳されたメニューエントリを追加できます。その後、メニューエントリが表示されます。オプションを翻訳できない場合は、プライマリノードを編集してから、再度保存してください。これにより、通常、メニュー項目に言語が割り当てられます。
その後、必要に応じてメニューリンクを配置できます。メニュー階層に基づいて親/子URLエイリアスを使用するため、ミラーメニューツリーを作成します。
メニューをページに追加すると、現在の言語のリンクのみが表示されます。
ちなみに、Drupal 7多言語サイトは、最初の多言語サイトで作業するためのコストに見合う価値があります(Drupalをすでに十分に理解している場合)。