2010-07-12 5 views
2

J'utilise CakePHP 1.3.2 avec le comportement intégré Traduire.CakePHP TranslateBehavior me rend fou

Les traductions Je sauvegarde mes différents modèles dans chaque table. Exemple:

class Page extends AppModel { 
    var $name = 'Page'; 
    var $actsAs = array(
     'Translate' => array('title', 'subtitle', 'menu') 
    ); 
    var $translateModel = 'PageI18n'; 
... 
} 

Maintenant après l'insertion de certaines lignes de données. Cake ne récupère plus les données i18n dans l'index-action. Le SQL-dump ressemble à ceci:

... WHERE I18n__title.locale = 'de_de' ... 

Mais dans le tableau "page_i18ns" le champ locale est rempli de 'deu'

Pourquoi gâteau de mélange l'attribut locale? Où dois-je définir l'attribut locale? Quelque part dans la classe Model?

Dans mon AppController je mis la langue avec Configure::write('Config.language', $lang); dans la fonction beforeFilter() .... 'eng', 'deu', 'chi'

+0

Je sais gâteau et locale, mais n'ont pas utilisé le comportement Translate. Je voulais simplement mentionner que les identificateurs de locale ressemblent à en_en, de_de etc. et ne sont pas comme eng ni deu. – sibidiba

Répondre

1

je le code suivant dans mon ArticlesController:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Article->locale = $this->Session->read('Config.language'); 
} 

Voir si cela aide.

+0

Merci Oscar. Dans mon cas: $ this-> Article-> locale = Configurer :: read ('lang'); – hasentopf

0

C'est en effet embêtant CakePHP utilise les paramètres régionaux au lieu du langage de la table i18n.
Ils pourraient corriger ce bug, mais les chances sont minces, car la correction de ce bug casserait toutes les applications i18n existantes.

j'ai donc écrit une petite fonction d'aide qui se traduit par un languageCode dans un lieu:

/** 
* Retrieve the "locale" from the language code (for i18n table) 
* Examples: en -> eng, en-us -> en_us, de -> deu, nl -> dut 
* 
* @param string $language 
* @return string 
*/ 
function convertLanguageToLocale($language) { 
    $i18n =& I18n::getInstance(); 
    $i18n->l10n->get($language); 
    return $i18n->l10n->locale; 
}