Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Template Questions

i18n in templates


Reply

3 Posts   1364 Views

Avatar
VRoxane

10 September 2010 at 5:03am Community Member, 42 Posts

How do I translate text in templates ?

Here's what I've done (With Martijn's help via IRC) :

in Page.ss

<% _t("Page.READMORE","Lire la suite") %>

in mysite/lang/en_GB.php

<?php

/**
* English (United Kingdom) language pack
* @package sapphire
* @subpackage i18n
*/

i18n::include_locale_file('sapphire', 'en_US');

global $lang;

if(array_key_exists('en_GB', $lang) && is_array($lang['en_GB'])) {
   $lang['en_GB'] = array_merge($lang['en_US'], $lang['en_GB']);
} else {
   $lang['en_GB'] = $lang['en_US'];
}

$lang['en_GB']['Page.ss']['READMORE'] = 'Read More';

?>

and in_ config.php :

...
// Set the site locale
i18n::set_locale('fr_FR');

// enable nested URLs for this site (e.g. page/sub-page/)
SiteTree::enable_nested_urls();

Translatable::set_default_locale('fr_FR');
Object::add_extension('SiteTree', 'Translatable');
Object::add_extension('SiteConfig', 'Translatable');

Avatar
VRoxane

10 September 2010 at 7:10am Community Member, 42 Posts

Thanks to Martijn and Zauberfisch on IRC Channel, here's what I missed :

in Page.php

public function init() {

parent::init();

if($this->dataRecord->hasExtension('Translatable'))
i18n::set_locale($this->dataRecord->Locale); // set i18n language for _t() in template
}

Avatar
banal

10 September 2010 at 8:55am Community Member, 901 Posts

If you have Translatable enabled, then a call like this (in init() should be sufficient:

i18n::set_locale(Translatable::get_current_locale());

It's basically the same as you do now, just shorter ;)