2010-07-15 8 views
1

Je à plusieurs reprises se confondre entre la langue & Culture Symfony -. Je suis la mise en culture (en_US) que je suppose est correct - mais les fichiers de traduction sont créés pour une langue (en) - aussi, lors de l'utilisation de traduction dans la base de données, lang = frConfus entre la langue et la culture! :(

J'ai un modèle dont la définition est la suivante:

Option: 
    package: Options 
    tableName: Com_Options 
    actAs: 
    I18n: 
     fields: [name, tooltip] 
    columns: 
    id: 
     type: integer(2) 
     primary: true 
     notnull: true 
     unsigned: true 
#  autoincrement: true 
    name: 
     type: string(50) 
     notnull: true 
     notblank: true 
    tooltip: 
     type: string(100) 
    sequence: 
     type: integer(1) 
     unsigned: true 
     range: [0,255] 

Cette classe est appelée par plusieurs autres classes lorsque je tente d'imprimer le nom. $ refObj-> Option-> Nom Je n'obtiens rien Quand je vérifie les requêtes, je vois que à 3 requêtes sont tirées dans tous.

1) to get refObj 
2) to get Option 
3) to get Translation 

Mais le vrai problème est que pour 3, il n'y a pas de paramètre de langue dans la requête.

Je me demande comment il va obtenir le nom traduit? Valeur actuelle de sf_culture: en_US

Existe-t-il un autre moyen d'accéder au 'nom' en fonction de la langue de l'utilisateur? Ou ai-je besoin d'écrire des requêtes personnalisées sur chaque modèle?

Est-ce que le problème est dû au fait que l'auto-incrémentation est désactivée ou que j'utilise un package?

Merci beaucoup!

+0

Avez-vous aussi ** sf_default_culture ** défini sur en_US? –

+0

oui, c'est réglé à en_US – Prasad

Répondre

0

trouvé ceci: une & très fastidieuse méthode coûteuse, mais fonctionne:

$class->relation->Translation[$lang]->property 

Si vous souhaitez lire directement la base de données

$q = Table::getInstance()->createQuery('a') 
     ->select('a.id, t.name') 
     ->leftJoin('a.Translation t') 
     ->where('t.lang = ?', $lang); 
return $q->execute(array(), Doctrine::HYDRATE_NONE); 

Si vous utilisez des fichiers XLIFF, vous devez passer pas la culture/language

__('text which is translated in the XLIFF for user\'s culture'); 
Questions connexes