Drupal - 不同语言的不同图像

时间:2010-09-03 14:10:43

标签: css image drupal localization internationalization

我必须“i18n”现有的drupal安装并添加第二种语言。

我在主页上有一个图像,在CSS文件中定义为“背景图像”。

图片包含文字,因此我需要根据网址是否显示不同的图片:

http://example.com/en/

http://example.com/es/

如何根据用户语言(基于网址)在主页上显示不同的图像?

我对Drupal很新,所以请不要认为我知道任何事情!!!

更新:我希望我可以将特定图像定义为“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 个答案:

答案 0 :(得分:4)

您可以使用国际化模块: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'); }

然后为 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 :(得分:1)

我会选择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

答案 2 :(得分:1)

只是为了扩展Drupal 7的答案:有一个全局变量$language,它提供了一个标准类,其中包含许多有关当前语言的信息,包括$language->language和语言短代码。

它在modules/locale/locale.admin.inc中定义。

所以请致电

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

在您的主题中并且捕获所有“$ language-&gt;语言未定义”错误。