に基づいてベース CSS ファイルを動的にすることは、おそらく良い考えではありませんuser/session/environment
。不必要にキャッシュを破棄することになります。
基本CSSに必要なのはデフォルトだけです。CSS の性質上、次の宣言で前の宣言をオーバーライドできます。
したがって、アプリケーションのレイアウト ファイルでは、デフォルト ロケールを処理する背景画像を含む標準ベース CSS をロードします。
ロケール固有のオーバーライドの場合、その特定のロケール用の最小限の CSS ファイルを含めるか、ロケールごとの構成の量が最小限の場合は、スタイルをインラインでヘッダーに含めます。
views/layouts/application.html.erb
<html>
<head>
<%= stylesheet_link_tag :defaults %> # Load standard base css here
<% if user_locale.present? %>
<style type="text/css">
#accordion .slide_handle {
background: url(<%= asset_url("handles-#{user_locale}.png") %>);
}
</style>
<% end %>
</head>
<body>
Yada Yada Yada
<%= yield %>
</body>
</html>
ユーザーのロケール識別子がロケールごとのアセットの唯一の意思決定者になることを許可する規則に従うことを真剣に提案します。
ロケールがen
, de
, の場合fr
。handle-1.png
アセットに名前を付けないでください。ただし、* *handle-2.png
であることを確認してください。規則に従うことで、不自然で壊れやすい構成の一連の苦痛から解放され、トラックを管理できます。handle-en.png
handle-de.png
handle-fr.png
まとめ、基本のデフォルト CSSを選択し、基本 CSS を含めた後、ヘッダー セクションで最小限の CSS をオーバーライドします。または、オーバーライドのみを持つロケール固有の css ファイルを含めることもできます。
<head>
<%= stylesheet_link_tag :defaults %>
<%= stylesheet_link_tag "base-#{user_locale}" if user_locale.present? %>
</head>
別の代替ソリューションで更新:
<body class="<%= user_locale.presence || 'en' %>">
</body>
CSS リストでは、次のような本体の親を持つロケールごとのすべてのオーバーライドを出力します
body.en #accordion .slide_handle {
background: ....
}
body.de #accordion .slide_handle {
background: ...
}
それらを複数のロケール固有のファイルに分割して、すべてを 1 つの css にまとめることができます。ただし、このローカル オーバーライドは、それ以上変更しなくてもレイアウトに自動的に適用され、すべてのロケールが css でいつでも利用できます (魅力的である場合とそうでない場合があります)。