私は多言語のウェブサイトを持っています。言語の1つはRTL言語です。Drupal 7でCSSをstyle.css
およびRTL CSSからstyle-rtl.css
とデフォルトでdrupalもstyle-rtl.cssファイルをロードします、今in Drupal 8、多言語テーマ、どうすればDrupal RTLスタイルをRTL言語でロードするように指示できますか?
update私は this link を見つけましたが、ほぼ1400行のCSSファイルがあるため、それについてはわかりません。すべてのセレクターの前に[dir = "rtl"]を置きますか? !!!
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: {}
代替ソリューションを探している人のために:
テーマの
libraries.yml
ファイルに新しいlibrary
を定義し、特定の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';
}
}
キャッシュをクリアすると、準備完了です