Ho riscontrato un problema nel recuperare i dati dal mio database che ho creato per essere completamente multilingue e spero che qualcuno qui mi possa aiutare.Come utilizzare Yii con un modello di database multilingue?
Ho diviso tutti i miei tavoli in 2 parti; la tabella "universale" (non contiene alcun testo che deve essere tradotto) e la tabella che contiene tutti i campi che devono essere tradotti con le loro traduzioni.
tabelle Esempio:
base_material
id
picture
base_material_i18n
base_material_id
localization_id
name
description
review_status
review_notes
localization
id
language_name
query per ottenere le traduzioni (usando l'inglese (en) come lingua di ripiego se non v'è alcuna traduzione disponibile):
SELECT o.id
, o.type
, o.code
, o.position
, ifnull(t.name,d.name) name
, ifnull(t.description,d.description) description
FROM base_material o
INNER JOIN base_material_i18n d
ON (o.id=d.base_material_id)
LEFT OUTER JOIN base_material_i18n t
ON (d.base_material_id=t.base_material_id AND t.localization_id='nl')
WHERE d.localization_id='en'
mia domanda è come Posso ottenere automaticamente quelle traduzioni (con la lingua di ripiego come in questa query) allegate al mio modello in Yii quando cerco gli oggetti base_material? (Questa è solo una tabella di esempio, ma quasi tutti i miei tavoli (20+) sono costruiti in questo modo, quindi se possibile avrei bisogno di qualcosa di flessibile)
Un esempio di un sistema esistente che utilizza quello di cui avrei bisogno è Propel : http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters
Qualche idea su come procedere? Ho controllato le estensioni Yii esistenti relative a siti multilingue (come Multilingual Active Record), ma tutte usano un design di database diverso (informazioni generali + lingua fall-back nella tabella principale, traduzioni nella tabella i18n), e non sono sicuro come cambiare quelle estensioni per usare il mio tipo di modello DB.
Se qualcuno conosce un modo per modificare l'estensione esistente in modo che possa utilizzare il mio tipo di schema DB, sarebbe assolutamente geniale e probabilmente il modo migliore per farlo.
Edit: Ho una taglia perché ancora non riesco a trovare nulla su come lasciare il lavoro Propel con Yii (vi esiste un'estensione per dottrina, ma Dottrina non supporta questo tipo di modello di DB con traduzioni entrambi), né ulteriori informazioni su come gestirlo utilizzando un'estensione Yii esistente o con scope.
Modifica: 98 volte visualizzato ma solo 3 upvotes e 1 commento. Non posso fare a meno di pensare che sto facendo qualcosa di sbagliato qui, sia nella mia domanda o nella progettazione di applicazioni/database; o quello o il mio problema è solo molto singolare (il che mi sorprenderebbe, poiché non penso che il mio design di database multilingue sia così assurdo ;-). Quindi, se qualcuno conosce una soluzione a tutto tondo per siti multilingue con Yii e/o Propel (a parte le estensioni attuali che non mi piacciono molto a causa della duplicazione dei campi di testo) o qualcosa di simile, per favore fatemi sapere anche.
Grazie in anticipo!
Se ci sono altre domande sul perché o su cosa, o se qualcosa non è del tutto chiaro, basta chiedere :-) – Xuntar
Mi dispiace che tu stia avendo un tale difficile trovare una risposta. Cercherò di aiutare se posso. Quindi in pratica vuoi solo una query che scelga la traduzione selezionata e l'inglese per qualsiasi valore in cui la lingua tradotta per quell'elemento non esiste giusto? Voglio essere sicuro di aver capito prima la tua domanda;) – Chiramisu
Ciao Chiramusi e grazie per il tuo aiuto. La query che ho postato nella mia domanda funziona quando la eseguo nel mio database, ma mi chiedo come posso farlo più "automagicamente". L'estensione a cui mi sono collegato aggiunge traduzioni al modello in modo automatico e vorrei qualcosa di simile per il mio database (l'estensione usa un diverso schema db) o un'idea su come cambiare quell'estensione per usare le mie tabelle e il mio design. Altrimenti, se si è a conoscenza di un modo di utilizzare Propel con Yii, sarebbe altrettanto utile (poiché Propel ha questo tipo di traduzioni di database integrate). – Xuntar