ロケールmodul(コア)と i18n を使用すると、ユーザーを別の言語の対応するノードに案内する言語スイッチャーを表示できます。ビューの場合、この言語スイッチャーはすべての言語のビューを指します。ビューのパス、つまり.
www.website.com/path/to/view
すべての言語に「翻訳」されます
www.website.com/language-path/path/to/view。
この動作を変更したり、ビューを特定の言語に制限したりすることは可能ですか?
同じビューに対応する異なるURLを異なる言語でマップする場合は、 この回答 が役立ちます。基本的には、両方ともi18nモジュールの一部である「変換セット」および「パス変換」モジュールを有効にする必要があります。次にadmin/config/regional/i18n_translation/path
で、翻訳されたパスを追加してから、これらのすべてのページを一緒にマップする「翻訳セット」を追加します。
ビューを特定の言語に制限したい場合、他の言語では結果が得られないため、ビューの結果をユーザーの現在の言語と「結果なしの動作」を設定して、Global: View area
を使用して、異なる(デフォルト)言語のビュー結果を表示します。詳細は この質問 を参照してください。もちろん、特定のノード(404ページなど)を「結果の動作なし」として表示することもできます。
@jumper:賞金を差し上げたい場合に備えて、この回答を掲載しました:)
はい、コンテンツの言語に基づいて制限したい場合はcontent:languageのフィルター基準を追加することで、ビューの言語を制限できます。現在のログユーザーの優先言語に基づいて制限/フィルターしたい場合はuser:language
Select Translation 。を使用できます
ビューがノードを表示することを目的としており、ノードがコンテンツ変換*メカニズムを使用している場合、翻訳の選択モジュールをインストールできます。これは、「コンテンツの翻訳:翻訳の選択」というフィルターを提供します。これにより、使用する結果の言語バージョンを選択するフォールバックメカニズムを定義できます。
たとえば、結果が現在の言語で利用できない場合は、その英語バージョンが使用されるように指定できます。したがって、noの結果が現在の言語で利用可能である場合、 あなたの場合のように は、英語版のビューにアクセスすることと同じです。したがって、これは事実上、「特定の言語へのビューを制限する」ことになります。 「特定の言語でビューを非表示にする」 askedfor 。
*コンテンツの翻訳:これは、Drupal 7のデフォルトの翻訳メカニズムです。Coreで使用できます。したがって、代替をインストールしなかった場合( エンティティ変換 )、これを使用しています。
言語フィルターをカスタムコードで書き換えることができます。
I know 選択した言語で表示するコンテンツがない場合にのみ、ビューを変更します。これを行うことができるソリューションですが、ビューの結果を変更することもできますeven if現在選択されている言語で結果があります:
言語フィルターをビューに追加します。
hook_views_query_alter()
を実装し、必要に応じて言語フィルターのパラメーターを変更します。詳細については、 この答え を参照してください。たとえば、「現在の言語が中国語の場合、言語フィルターを設定して英語のコンテンツを表示する」などのロジックを実装できます。