Drupal - разные картинки для разных языков - PullRequest
2 голосов
/ 03 сентября 2010

Мне нужно «i18n» для существующей установки drupal и добавить второй язык.

У меня есть изображение на домашней странице, которое определяется как 'background-image' в файле CSS.

Изображение содержит текст, поэтому мне нужно показывать разные изображения в зависимости от того, URL-адрес:

http://example.com/en/

или

http://example.com/es/

Как показать другое изображение на главной странице?в зависимости от языка пользователя (на основе URL)?

Я довольно новичок в Drupal, поэтому, пожалуйста, не думайте, что я что-то знаю !!!

update : Iнадеялся, что я смогу определить конкретное изображение как «EN» и добавить альтернативу «ES», иметь один URL-адрес изображения (который может использоваться в шаблонах или CSS и т. д.), но в зависимости от языка пользователя, Drupal будет работатьверсия для конкретного языка.Это было бы идеально.

update2 : Или, возможно, возможен другой подход - создать новый «тип контента», который просто содержит изображение, так что: http://example.com/node/23 возвращает двоичный файл чистого изображения(image / jpeg) - тогда этот узел может быть интернационализирован / переведен как другие узлы.Я действительно изо всех сил пытаюсь найти способ Drupal для изображений i18n ...

update3 : Drupal хранит язык пользователя в сеансе?Если так, я мог бы просто написать свой собственный сценарий, прочитать язык сеанса и подать изображение на определенном языке, верно?и полностью избегать Drupal (например: http://example.com/i18n-image.php?img=logo - некрасиво, но вы поняли идею), если так, как Drupal хранит язык сеансового пользователя?

Ответы [ 3 ]

4 голосов
/ 03 сентября 2010

Вы можете использовать модуль интернационализации: http://drupal.org/project/i18n

и использовать функцию "i18n_get_lang ()" для получения текущего языка.

Называйте файлы в зависимости от языка:

image_LANGUAGE.jpg
image_fr.jpg
image_es.jpg

Для встраивания изображений:

<img src="<?php echo base_path().path_to_theme().'/images/'; ?>image_<?php echo i18n_get_lang(); ?>.jpg" />

РЕДАКТИРОВАТЬ:

Чтобы реализовать нечто подобное для файлов CSS:

Вы можете создавать различные файлы CSS в зависимости от языка:

styles.css
styles_fr.css
styles_es.css

В основной файл (styles.css) вы можете поместить все CSS, которые не связаны с конкретным языком.В другие файлы вы можете поместить CSS, связанный с конкретным языком.

styles_fr.css:

div.item1 { background: url('../images/item1_fr.jpg'); }

styles_es.css:

div.item1 { background: url('../images/item1_es.jpg'); }

И затем вы создаете функцию preprocess для страницы в вашем template.php Файл, который будет включать конкретную таблицу стилей CSS на основе текущего языка:

function YOURTHEME_preprocess_page(&$vars, $hook){
  drupal_add_css(path_to_theme().'/css/styles.css');
  drupal_add_css(path_to_theme().'/css/styles_'.i18n_get_lang().'.css');
}

Или вы можете напрямую использовать drupal_add_css () в файле шаблона.

1 голос
/ 23 августа 2012

Просто чтобы расширить ваши ответы для Drupal 7: есть глобальная переменная $language, которая предоставляет стандартный класс, содержащий много информации о текущем языке, включая $language->language с кратким кодом языка.

Это определенов modules/locale/locale.admin.inc.

Так что вызывайте

<?php
global $language;
print 'images/'.$language->language.'/image.png';
?>

в своей теме и перехватывайте все ошибки "$ language-> language is undefined".

1 голос
/ 03 сентября 2010

Я бы пошел с hook_preprocess_page. Например, может быть хорошей идеей переключать таблицы стилей на основе языка:

function foobar_hook_preprocess_page(&$variables, $hook) {
  global $language;
  if($language != 'en') {
    $sheets = array();
    foreach($variables['css']['all']['theme'] as $stylesheet => $value) {
      if (strstr($stylesheet, path_to_theme())) {
        $stylesheet = str_replace('.css', '-'. $language->language .'.css', $stylesheet);
      }
      $sheets[$stylesheet] = $value;
    }
    $vars['css']['all']['theme'] = $sheets;
    $vars['styles'] = drupal_get_css($vars['css']);
  }
}

Дополнительные пояснения см. В этом посте: http://becircle.com/language_based_stylesheet_switching_your_theme

...