6.3.7 Tables de traduction multiple
Le texte original de cette section a changé depuis qu'il a été traduit. Aidez-nous à corriger cette différence. Vous pouvez :
Si vous vous attendez à beaucoup d'entrées, vous vous demandez probablement comment traiter une table qui grossit rapidement. Il y a deux propriétés, introduites par le comportement Translate, qui permettent de spécifier le "Modèle" à associer en tant que modèle contenant les traductions.
Ce sont $translateModel et $translateTable.
Disons que nous voulons sauvegarder nos traductions pour tous les posts dans la table "post_i18ns", au lieu de la table par défaut "i18n". Pour faire çà, vous avez besoin de configurer votre modèle comme ceci :
<?php
class Post extends AppModel {
var $name = 'Post';
var $actsAs = array(
'Translate' => array(
'nom'
)
);
// Utiliser un modèle différent (et une table)
var $translateModel = 'PostI18n';
}
?> <?phpclass Post extends AppModel {var $name = 'Post';var $actsAs = array('Translate' => array('nom'));// Utiliser un modèle différent (et une table)var $translateModel = 'PostI18n';}?>
Important : vous devez "pluraliser" le nom de la table. C'est maintenant un modèle classique, qui peut être traité comme tel et qui, par conséquent, dispose des conventions impliquées. Le schéma de table lui-même doit être identique à celui généré par le script en mode console de CakePHP. Pour être certain qu'il correspond, vous pouvez simplement initialiser une table i18n vide en utilisant la console et renommer la table après.
6.3.7.1 Créer le modèle de traduction
Le texte original de cette section a changé depuis qu'il a été traduit. Aidez-nous à corriger cette différence. Vous pouvez :
Pour que cela fonctionne vous devez créer le fichier de l'actuel modèle dans le dossier des modèles. La raison est qu'il n'y a pas de propriété pour définir le displayField directement dans le modèle utilisant ce comportement.
Assurez vous de changer le $displayField en 'champ'.
<?php
class PostI18n extends AppModel {
var $displayField = 'champ'; // Important
}
// Nom du fichier : post_i18n.php
?> <?phpclass PostI18n extends AppModel {var $displayField = 'champ'; // Important}// Nom du fichier : post_i18n.php?>
C'est tout ce qu'il faut. Vous pouvez aussi ajouter toutes les propriétés des modèles comme $useTable. Mais pour une meilleure cohérence nous pouvons faire cela dans le modèle qui utilise ce modèle de traduction. C'est là que l'option $translateTable entre en jeu.
6.3.7.2 Modification d'une Table
Si vous voulez changer le nom de la table, il vous suffit simplement de définir $translateTable dans votre modèle, comme ceci :
<?php
class Post extends AppModel {
var $name = 'Post';
var $actsAs = array(
'Translate' => array(
'nom'
)
);
// Utilise un Modèle différent
var $translateModel = 'PostI18n';
// Utilise une table différente pour translateModel
var $translateTable = 'post_traductions';
}
?> <?phpclass Post extends AppModel {var $name = 'Post';var $actsAs = array('Translate' => array('nom'));// Utilise un Modèle différentvar $translateModel = 'PostI18n';// Utilise une table différente pour translateModelvar $translateTable = 'post_traductions';}?>
A noter que vous ne pouvez pas utiliser $translateTable seul. Si vous n'avez pas l'intention d'utiliser un $translateModel personnalisé, alors laissez cette propriété inchangée. La raison est qu'elle casserait votre configuration et vous afficherait un message "Missing Table" pour le modèle I18n par défaut, lequel est créé à l'exécution.


























