RTL言語でRTLスタイルをロードする方法


7

私は多言語のWebサイトを持っています。言語の1つはRTL言語です。Drupal7では、style.cssCSSをRTL CSSに配置style-rtl.cssし、デフォルトでdrupalもstyle-rtl.cssファイルをロードします。Drupal8では、多言語です。テーマ、RTLスタイルをRTL言語でロードするようにDrupalに指示するにはどうすればよいですか?

update このリンク を見つけましたが、1400行近くあるCSSファイルがあるので、それについてはわかりません。すべてのセレクターの前に[dir = "rtl"]を置く必要がありますか?!!!

回答:


8

Drupal 8はライブラリーを使用し、これらをテンプレートにロードできます。言語の方向に依存するライブラリを実現する1つの方法は、html_attributes['dir']変数を使用html.html.twigして、値に応じて異なるライブラリをロードすることです。

{% if html_attributes['dir'] == 'ltr' %}
  {{ attach_library('your_theme_name/styles') }}
{% elseif html_attributes['dir'] == 'rtl' %}
  {{ attach_library('your_theme_name/styles_rtl') }}
{%- endif -%}

いくつかのライブラリを設定します。

styles:
  version: 8.x-1.0
  css:
    theme:
      css/styles.css: {}

styles_rtl:
  version: 8.x-1.0
  css:
    theme:
      css/styles-rtl.css: {}

1

代替ソリューションを探している人のために:

テーマの新しいlibraryin libraries.ymlファイルを定義し、特定のCSSまたはJSまたは必要なものを使用するようにそのライブラリをポイントすることもできます。

次のステップは、テーマ前処理などの前処理を使用して、特定の条件でそのライブラリーを使用するようにDrupal8に指示することです。

例: デフォルトライブラリの下に新しいライブラリを定義するthemename.libraries.yml

rtl:
  version: VERSION
  css:
    theme:
      assets/css/themename.style-rtl.css: {}

次に、themename.themeファイルの前処理でページの現在の方向を検出できます。

function themename_preprocess_html (&$variables) {
    // Load specific library for pages with html attribute of RTL
    if ($variables['html_attributes']['dir'] == 'rtl') {
          $variables['#attached']['library'][] = 'themename/rtl';
    }
}

キャッシュをクリアすると、準備完了です


ありがとう、これでうまくいきました。ライブラリをinfo.ymlファイルに追加すると、すべてのページで読み込まれるため、多言語サイトでは必要ないことを指摘したかっただけです。
Achraf JEDAY 2017

確かですが、info.ymlファイルではなくライブラリファイルに追加する必要があると言っているわけではありません。必要に応じて、twigにライブラリを含めることもできるので、それはあなた次第です
Sohail
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.