Sprog i Smarty

December 28, 2009 · Posted in Udvikling 

I forlængelse at mit forrige indlæg vil jeg komme med nogle idéer til hvordan man kan tilføje sprogsupport i Smarty.

Det jeg gerne vil ende med er en løsning hvor jeg i mine templates kan skrive noget lignende:

1
<h1>{translate}Welcome to my site{/translate}</h1>

Men også

1
<title>{$title|translate}</title>

Jeg vil også kunne angive sproget direkte, fx:

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
 
<head>
<title>{$title|translate:"fr"}</title>
</head>
 
<body>
 
<h1>{translate lang="fr"}Welcome to my site{/translate}</h1>
 
</body>
 
</html>

Jeg vil aldrig kalde Smarty direkte, men altid via min egen klasse som extend’er Smarty. Det gør det bl.a. nemmere at sætte diverse indstillinger op. I min egen klasse vil jeg, for at understøtte sprog, tilføje en block og en modifier. Det gør jeg på følgende måde:

1
2
3
4
5
6
7
8
class mbnSmarty extends Smarty {
 
  public function __construct() {
    $this->register_modifier('translate', 'smarty_m_translate');
    $this->register_block('translate', 'smarty_b_translate');
  }
 
}

Bagefter skal jeg skrive de to funktioner hhv. smarty_b_translate og smarty_m_translate.

1
2
3
4
5
6
7
8
9
10
11
12
13
function smarty_b_translate($args, $str, &$smarty, &$repeat) {
  if (!$repeat) {
    $text = new Text();
    $text->setText($content);    
    return $text->translate($args['lang'] ? $args['lang'] : LANG);
  }
}
 
function smarty_m_translate($str, $lang = LANG) {
  $text = new Text();
  $text->setText($str);
  return $text->translate($lang);
}

Jeg har i mine eksempler gået ud fra, at der er defineret en LANG-konstant på følgende måde:

1
define("LANG", "da");

Jeg bruger også en Text-klasse, som I selv må lave :)

Comments

Leave a Reply





  • Om websmed.dk

    Jeg hedder Morten, og jeg har udviklet webapplikationer siden slutningen af 90'erne.

    Jeg vil her dele ud af min erfaring, og med jævne mellemrum poste nogle tips og tricks, samt løsningsforslag på generelle dagligdags problemstillinger.

    Jeg har en forkærlighed for PHP og MySQL, hvorfor I nok vil se flest indlæg der vedrører den gren af webudvikling.

    Jeg har en anden blog af mere personlig karakter på mbn.dk, hvor I kan finde kontaktmuligheder m.m.

    Mine indlæg vil tit være baseret på problemstillinger i mit daglige virke, eller i mit eget firma MRLYTICS, hvor jeg sælger kundeundersøgelser samt kundedatabaser.

    Denne side er hostet hos slicehost.

  • Skrevet på Twitter