2008-09-18 5 views

Répondre

13

Le comportement de traduction est une autre des fonctionnalités très utiles mais mal documentées de CakePHP. Je l'ai mis en œuvre quelques fois avec un succès raisonnable dans les sites Web multilingues selon les lignes suivantes.

Premièrement, le comportement de traduction ne va qu'internationaliser le contenu de la base de données de votre site. Si vous avez un contenu plus statique, vous voulez regarder la fonction d'emballage de gâteau __('string') et gettext (il y a des informations utiles sur ce here)

En supposant qu'il ya contenu que nous voulons traduire avec la table db suivante:

CREATE TABLE `contents` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `title` varchar(255) default NULL, 
    `body` text, 
    PRIMARY KEY (`id`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Le modèle content.php a alors:

var $actsAs = array('Translate' => array('title' => 'titleTranslation', 
        'body' => 'bodyTranslation' 
        )); 

dans sa définition. Vous devez ensuite ajouter la table i18n à la base de données ainsi:

CREATE TABLE `i18n` (
    `id` int(10) NOT NULL auto_increment, 
    `locale` varchar(6) NOT NULL, 
    `model` varchar(255) NOT NULL, 
    `foreign_key` int(10) NOT NULL, 
    `field` varchar(255) NOT NULL, 
    `content` mediumtext, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Ensuite, lorsque vous enregistrez les données à la base de données dans votre contrôleur, définissez les paramètres régionaux à la langue que vous voulez (cet exemple serait pour le polonais):

$this->Content->locale = 'pol'; 
$result = $this->Content->save($this->data); 

Ceci créera des entrées dans la table i18n pour les champs title et body pour les paramètres régionaux pol. Finds trouveront en fonction de la localisation courante définie dans le navigateur de l'utilisateur, retourne un tableau comme:

[Content] 
    [id] 
    [titleTranslation] 
    [bodyTranslation] 

Nous utilisons l'excellent p28n component pour mettre en œuvre une solution de commutation de langue qui fonctionne assez bien avec l'gettext et de traduire les comportements. Ce n'est pas un système parfait - car il crée des relations HABTM à la volée, il peut causer des problèmes avec d'autres relations que vous avez créées manuellement, mais si vous êtes prudent, cela peut bien fonctionner.

+2

merci. même trouver le nom de la table i18n et les champs était difficile .. parler de la fonctionnalité cachée .. –

+0

@AlexanderMorland exécuter cette commande du dossier de l'application du projet './Console/cake i18n'. Cette commande peut initialiser la table i18n et extraire toutes les traductions de votre application vers le fichier de paramètres régionaux. – Ish

+0

Merci @David Heggie –

0

Pour quiconque cherchant la même chose, cakephp a mis à jour sa documentation. Pour traduire Comportement allez here..

Questions connexes