Как добавить класс CSS в <body> в зависимости от активного языка

Я разрабатываю многоязычный сайт, на котором я бы хотел создать некоторые из моих стилей на активном языке.

Подумайте примерно так:

body.en-uk li.artist:before {content:"Artist: "}
body.it-it li.artist:before {content:"Artista: "}
body.de-de li.artist:before {content:"Künstler"}

Кто-нибудь знает расширение, способное это сделать (например, добавление класса в тег в зависимости от активного языка)?

8 голосов | спросил smz 4 Maypm14 2014, 17:30:57

4 ответа


13

На самом деле есть более легкое решение вашей проблемы. Любой здравомыслящий шаблон (включая все шаблоны, входящие в состав Joomla CMS) установит атрибут lang в элементе HTML. Это позволяет использовать псевдо-селектор CSS :lang().

Пример будет выглядеть так:

li.artist:lang(en):before {content:"Artist: "}
li.artist:lang(it):before {content:"Artista: "}
li.artist:lang(de):before {content:"Künstler"}

Это имеет несколько преимуществ. Для начала он будет работать независимо от шаблона или даже с решениями, отличными от Joomla, поскольку все это делается в браузере.

Также он отлично работает со встроенными частями на других языках, если атрибут lang установлен правильно. Например:

<html lang="en">
  <head>
    <style>
     blockquote:lang(de) { color: red; }
     blockquote:lang(en) { color: red; }
    </style>
  </head>
  <body>
    <p>A famous German quote is:</p>
    <blockquote lang="de">
      <p>Den Wald vor lauter Bäumen nicht sehen</p>
    </blockquote>
    <p>A famous English quote is:</p>
    <blockquote>
      <p>Listen to many, speak to a few.</p>
    </blockquote>
  <body>
</html>

Наконец, Joomla не только выводит язык, но и язык. Таким образом, ваш сайт может использовать en-GB, другой en-US и шаблон будет отражать это. Использование :lang(en) будет соответствовать, но вы также можете использовать :lang(en-US) только для американского английского.

ответил Rouven Weßling 4 Maypm14 2014, 17:55:00
5

Я бы просто изменил файл templates index.php и добавил туда класс.

<body class="<?php echo $this->language; ?>">

Назначит текущий язык как класс тегу body.

ответил Bakual 4 Maypm14 2014, 17:36:28
3

Небольшая вещь, которую нужно добавить в отношении метода Рувена; поддержка браузера лучше для селекторов атрибутов, чем для псевдоселектора языка, поэтому вы можете захотеть использовать что-то подобное для таргетинга на ваши стили:

[lang="en-GB"] .artist {…}
ответил Seth Warburton 6 Mayam14 2014, 11:54:56
1

В index.php вашего шаблона вы можете заменить текущий тег <body> следующим образом:

<?php $lang = JFactory::getLanguage(); ?>
<body class="<?php echo $lang->getTag(); ?>">

В результате вы получите следующее:

<body class="en-GB">
ответил Lodder 4 Maypm14 2014, 17:34:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132