web-dev-qa-db-ja.com

ビューを特定の言語に制限する

ロケールmodul(コア)と i18n を使用すると、ユーザーを別の言語の対応するノードに案内する言語スイッチャーを表示できます。ビューの場合、この言語スイッチャーはすべての言語のビューを指します。ビューのパス、つまり.

www.website.com/path/to/view

すべての言語に「翻訳」されます

www.website.com/language-path/path/to/view。

この動作を変更したり、ビューを特定の言語に制限したりすることは可能ですか?

3
jumper

同じビューに対応する異なるURLを異なる言語でマップする場合は、 この回答 が役立ちます。基本的には、両方ともi18nモジュールの一部である「変換セット」および「パス変換」モジュールを有効にする必要があります。次にadmin/config/regional/i18n_translation/pathで、翻訳されたパスを追加してから、これらのすべてのページを一緒にマップする「翻訳セット」を追加します。

ビューを特定の言語に制限したい場合、他の言語では結果が得られないため、ビューの結果をユーザーの現在の言語と「結果なしの動作」を設定して、Global: View areaを使用して、異なる(デフォルト)言語のビュー結果を表示します。詳細は この質問 を参照してください。もちろん、特定のノード(404ページなど)を「結果の動作なし」として表示することもできます。

@jumper:賞金を差し上げたい場合に備えて、この回答を掲載しました:)

3
claire_

はい、コンテンツの言語に基づいて制限したい場合はcontent:languageのフィルター基準を追加することで、ビューの言語を制限できます。現在のログユーザーの優先言語に基づいて制限/フィルターしたい場合はuser:language

enter image description here

2
Mouad

Select Translationを使用できます

ビューがノードを表示することを目的としており、ノードがコンテンツ変換*メカニズムを使用している場合、翻訳の選択モジュールをインストールできます。これは、「コンテンツの翻訳:翻訳の選択」というフィルターを提供します。これにより、使用する結果の言語バージョンを選択するフォールバックメカニズムを定義できます。

たとえば、結果が現在の言語で利用できない場合は、その英語バージョンが使用されるように指定できます。したがって、noの結果が現在の言語で利用可能である場合、 あなたの場合のように は、英語版のビューにアクセスすることと同じです。したがって、これは事実上、「特定の言語へのビューを制限する」ことになります。 「特定の言語でビューを非表示にする」 askedfor

*コンテンツの翻訳:これは、Drupal 7のデフォルトの翻訳メカニズムです。Coreで使用できます。したがって、代替をインストールしなかった場合( エンティティ変換 )、これを使用しています。

0
tanius

言語フィルターをカスタムコードで書き換えることができます。

I know 選択した言語で表示するコンテンツがない場合にのみ、ビューを変更します。これを行うことができるソリューションですが、ビューの結果を変更することもできますeven if現在選択されている言語で結果があります:

  1. 言語フィルターをビューに追加します。

    • Entity Translation を使用する場合は、「コンテンツ:言語」フィルターを追加します。
    • コンテンツ翻訳を使用する場合は、「コンテンツ翻訳:言語」フィルターを追加します。
    • コンテンツ翻訳を使用していて、結果ごとに自動言語フォールバック動作が必要な場合は、代わりに Select Translation モジュールによって提供される「コンテンツ翻訳:選択翻訳」フィルターを使用できます。
  2. hook_views_query_alter()を実装し、必要に応じて言語フィルターのパラメーターを変更します。詳細については、 この答え を参照してください。たとえば、「現在の言語が中国語の場合、言語フィルターを設定して英語のコンテンツを表示する」などのロジックを実装できます。

0
tanius