我必须“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如何存储会话用户语言?
答案 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;语言未定义”错误。