Generare Il Crud Per Un Sito Bilingue Utilizzando Cdbmessagesource

Salve a tutti, sono nuovo di Yii, e sto provando a creare un sito che dovra’ fornire i contenuti in due lingue, italiano ed inglese.

Per ora ho utilizzato la classe CDbMessageSource perche’ l’amministratore del sito dovra’ poter gestire le traduzioni, quindi ho 2 tabelle SourceMessages(id, category, message) e Messages(id, language, translation).

Mi rimane solo da generare il CRUD ed il problema e’ questo: vorrei poter gestire le traduzioni attraverso un unico controller, SourceMessages, ed aggiungere i campi delle relative traduzioni in tutte le azioni di SourceMessages, essendo che le lingue sono e rimarranno solo due.

Ad esempio nel form per creare un nuovo SourceMessage dovro’ avere i campi:

  • category

  • message

  • translation_en

  • translation_it

Ed allo stesso modo nella ricerca dovro’ poter filtrare i risultati anche in base alle traduzioni.

Come posso fare?

Grazie in anticipo per qualsiasi risposta

le tabelle che tipo di relazione hanno tra di loro?

perchè se SourceMessages HAS_MANY Message, non vedo l’attributo che fa da chiave esterna.

cmq per avere quello che richiedi tu tramite crud, se ho capito bene la logica del tuo db, non è possibile.

cioè lo puoi fare, ma mettendo un pò mano al codice.

Se vuoi che le crud ti generino una form come dicevu tu, allora devi avere un’unica tabella

con i campi che dicevi.

Che cosa ti impedisce di fare quello che vorresti fare?

Secondo usare ‘t’ per la traduzione sulle labels?

Si, le tabelle hanno una relazione HAS_MANY, la tabella Messages ha come chiava primaria la coppia id, language, e come chiave esterna l’id relativo all’id della tabella SourceMessages.

Non so da che parte iniziare :D .

Quello che mi sembra il problema maggiore e’ fare il join delle due tabelle per ottenere i dati da passare come dataProvider alla view dell’action admin. La query equivalente che farei in sql per poter fare le ricerche nell’unione delle tabelle sarebbe:




SELECT id, category, message, t_en, t_it

FROM (

   SELECT source_messages.id, source_messages.message, source_messages.category

          messages_en.translation AS t_en, messages_it.translation AS t_it

   FROM source_messages

   LEFT JOIN messages AS messages_en ON ( messages_en.id = source_messages.id

   AND messages_en.language =  'en_us' ) 

   LEFT JOIN messages AS messages_it ON ( messages_it.id = source_messages.id

   AND messages_it.language =  'it_it' )

) 

AS t1

WHERE ...condizioni...



E’ possibile passare qualcosa del genere? Devo intervenire nel metodo search del modello SourceMessages?

Per la traduzione non ci sono problemi, funziona tutto, devo solo capire come poter fare gestire i messaggi del sito all’amministratore.

Dalla documentazione loccipitale. So che sembra una risposta stronza, ma prima si potrebbe passare da li, e poi si può chiedere qui come mai qualche cosa non va. La questione della lingua è già gestita da Yii. Se serve ti linko la pagina della documentazione che devi leggerti.