I statically linked an anchor to my /cart page on page.tpl.php, but since it's a multi language website, when I'm on http://localhost/fr it still goes to http://localhost/cart instead of http://localhost/fr/cart

I'd like to know how to print the current base language path or base_url and concatenate it with /cart


  • Are you looking for $GLOBALS['language']->language maybe?
    – Clive
    Sep 15 '14 at 15:40
  • I don't know maybe, I just want to make a link to /cart page without destroying the $path if i'm on /fr language
    – user23288
    Sep 15 '14 at 15:46
  • 1
    Something like $GLOBALS['base_url'] . $GLOBALS['language']->language . '/cart' would do the trick, but I fancy the i18n module has something more sophisticated than that
    – Clive
    Sep 15 '14 at 15:50
  • Nah it didnt work :( , Kojo answer almost work, please check my comment on his answer
    – user23288
    Sep 15 '14 at 16:00
  • 1
    There isn't - global $base_url is $GLOBALS['base_url'], exactly the same bit of memory
    – Clive
    Sep 15 '14 at 16:04

If you want to display the cart link in template you better do it with l or url function, example:

in page.tpl.php file:

<ul class="">
  <li><?php print l(t('Cart', 'cart')) ?></li> // first way
  <li><a href="<?php print url('cart') ?>">Cart</a></li> // the second way
  • Wow man, thanks, this is much more efficient way to do so
    – user23288
    Sep 15 '14 at 16:18
  • very elegant way indeed. can you comment if l() is able to build the url with or without the lang prefix, I mean without for default and with for others ?
    – Kojo
    Sep 15 '14 at 16:20
  • @Kojo they handle languages automatically if links are internal, or you can optionally specify it..
    – xurshid29
    Sep 15 '14 at 16:21

This should work in your page.tpl.php

global $language;
global $base_url;
//get the current language
$current_lang = $language->language;
//get the default language
$default_language = language_default();

switch($current_lang) {
    $url = $base_url."/cart";
    $url = $base_url."/". $current_lang ."/cart";

I added the language_default() part as per Clive suggestion. You'll find more information on global $language.

  • Thank you it kinda works, but not perfectly, because I have EN and FR languages enabled, and my default languega (EN) doesn't use trailing /en, if I go on localhost/ and click on the link it will take me to localhost/en, I only want this for FR language to work Also I get this: Notice: Undefined variable: language_url in include() page--front.tpl.php).
    – user23288
    Sep 15 '14 at 15:59
  • well, add a switch to that code. may I update the answer ?
    – Kojo
    Sep 15 '14 at 16:00
  • sure man, but what's a switch? I'm a total newbie in PHP
    – user23288
    Sep 15 '14 at 16:01
  • 1
    We can't teach you PHP here that needs to happen elsewhere - but you can use language_default() to get the default language, then check that against $language->language
    – Clive
    Sep 15 '14 at 16:02
  • I know @Clive, I love you man, but you can just simply help a misguided newbie here, it doesn't hurt that much, but I appreciate it anyway
    – user23288
    Sep 15 '14 at 16:10

If you just need to print "en" or "nl" somewhere, depending on the current language:

  global $language ;
  $curlang = $language->language;

This is the prefix of the current language: <?php print $curlang; ?>

cptstarling is correct. I was getting error's back from SEO reports asking for Language declarations, and simply created a custom HTML.tpl.php theme template that included:

<!DOCTYPE html lang="<?php echo $language->language; ?>">

I did not declare a variable, as this was the only location that I needed the PHP language to be displayed.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy