web-dev-qa-db-ja.com

翻訳されていないメニューリンク

Drupal 7と国際化モジュールもインストールしました。基本的なサイトを追加して翻訳することができます。言語を切り替えるときに正常に機能するローカライズされたURLエイリアスを追加することもできます。機能しないのはメニューの翻訳です。記事を翻訳するときに、言語ごとに異なるメニュー名を選択できますが、すべての言語のメニューには英語版のみが表示されます。

なぜこれが起こり得るのか誰かが手掛かりを持っていますか?

7
dmeu

これが現在のDrupal 7.32。で理解していることです。Drupalでのi18nの動作は設定に大きく依存しているので、私が設定が異なる場合、動作は異なる場合があります。

まず、_i18n_menu_と_i18n_node_を有効にする必要があります(動作が異なるはずのエンティティ変換を好む人もいると思いますが、それについてはわかりません)。

次に、_/admin/config/regional/language/configure_で「パスプレフィックス」を含む「URL」を最優先します。また、個人的には、デフォルトの言語(通常は英語、 "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_の「翻訳」列(右端?)。

現在、メニューで何を実現したいかに完全に依存する、複数のオプションがあります。たとえば、「He​​llo」というノードとその「Bonjour」というフランス語の翻訳ノードがあるとします(これらは2つの異なるノード、たとえばノード1と2です)。メニューの「Hello」と「Bonjour」の両方に2つのリンクを提供しますか(いずれかの言語で表示した場合)?または、英語モード/リーダーには「Hello」のリンクを、フランス語モードには「Bonjour」のリンクを提供しますか? (これは多言語サイトの複雑さです...)

2番目のオプションを使用するとします。例として、メインメニューで "Hello/Bonjour"の単一のメニューリンクを準備します。つまり、計画は、「Hello」-node(= 1)にリンクされた「Hello」メニューが英語で表示された場合に表示され、「Bonjour」-node(= 2)にリンクされた「Bonjour」メニューが表示された場合に表示されます。フランス語。

まず、ノード1にリンクされた「Hello」メニューリンクを作成します。次に、上記の_/admin/structure/menu/manage/main-menu/edit_の「TRANSLATE」タブを使用して、翻訳されたタイトルを「Bonjour」として入力し、変更することを忘れないでください「Bonjour」メニューがフランス語の「Bonjour」記事を正しく指すようにするためのNode = 2へのリンク。

これで、フランス語で別のフランス語のノード(「Au revoir」など)をフランス語で表示すると(パスのプレフィックスは_/fr/_である必要があります)、フランス語の「Bonjour」にリンクされている「Bonjour」のメニューが表示されます。 "ノード。英語モードで英語の翻訳( "Good Bye")が表示される場合(パスのプレフィックスは_/fr/_であってはなりません)、上のメニューは "Hello"で、英語の "Hello"ノードにリンクされています。仕事は終わりました。

問題は、各コンテンツのパスエイリアス(すべての翻訳のノードセットの単一のパスエイリアス)を設定し、基本的に_/node/2_完全に。上記の例で、ノード1に_artilce/hello_のパスエイリアスを設定するとします(英語。ノード2に別のパスエイリアスを設定しないでください。混乱を招くためです)。 )。 _/fr/artilce/hello_にアクセスすると、フランス語メニューで「Bonjour」のノードを確認できます。ただし、_/fr/node/1_にアクセスすると、英語の "Hello" -node(= 1)が表示されますが、上のメニューはフランス語の "Bonjour"です。これは、フランス語で環境を表示しているときにnode = 1が英語で書かれているため、メニューが強制的にフランス語になるためです(ローカライズを有効にした場合、ユーザーメニューなどの他の部分もフランス語になりますが、メインコンテンツ)。

一部の人々にとって、それは彼らが望んでいることかもしれません。たとえば、フランスのショッピングサイトでは、ショッピングバスケットなどに英語のインターフェースを提供している場合がありますが、販売する各アイテムの説明を翻訳する必要はありません。 Drupalのi18nがこのように設計されているのはそのためだと思います。

最後に、設定を変更しながら、頻繁に「すべてのキャッシュをフラッシュ」して、行った変更が表示内容に確実に反映されるようにすることができます。

6
Masa Sakano

Internationalization モジュールの一部であるi18n Menu Translationサブモジュールを有効にする必要があると確信しています。

メニューを編集し、必要な翻訳モードを選択します。 Translate and Localizeを使用しています。

次に、メニューリンクを編集すると、Translateの新しいタブが表示されます。そこから、翻訳されたメニューエントリを追加できます。その後、メニューエントリが表示されます。オプションを翻訳できない場合は、プライマリノードを編集してから、再度保存してください。これにより、通常、メニュー項目に言語が割り当てられます。

その後、必要に応じてメニューリンクを配置できます。メニュー階層に基づいて親/子URLエイリアスを使用するため、ミラーメニューツリーを作成します。

メニューをページに追加すると、現在の言語のリンクのみが表示されます。

補足として、 Drupal 7多言語サイト は、最初の多言語サイトで作業するためのコストに見合う価値があります(Drupalをよく知っていると仮定します)。

4
mpdonadio

[言語]> [選択と検出]ページで、ユーザーインターフェイスとコンテンツの両方の検出方法をURLに設定する必要があることに注意してください。メニューはユーザーインターフェイスの設定に該当すると思います。それを実現するのに何時間もかかった。ユーザーインターフェイスはバックエンドの管理ページだと思いました。

0
Jeff