Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128

    gestione news multilingua

    ho preso le news come esempio che sono le più usate!

    come si possono gestire delle news multilingua?? come posso strutturare le tabelle del database?? non riesco ad immaginare la logica... creare una tabella con

    id - testo italiano - testo inglese - etc

    non ha senso... creare una tabella con

    id - id news - testo - id lingua etc.. potrebbe avere un senso ma non so...


    voi cosa mi consigliate o come lo farete?

  2. #2
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Anche io mi son posto la stessa domanda, mi sono risposto, ho escluso la soluzione del tipo tabella come (id, testo_it, testo_en, ...) perchè troppo poco flessibile.

    Prendendo come esempio una tabella news

    Ho escluso la soluzione che prevede righe diverse una per ogni lingua, anche se sarebbe stata forse più corretta, ma non sapevo come gestire i campi ridondanti che cambiando la lingua rimangono uguali a se stessi.

    id, lang, titolo, testo, dateteime_posted

    Ho optato per:

    news:
    id - unsigned int(10)
    titolo - text
    testo - text
    datetime_posted - datetime

    Tutte le traduzioni le immagazzino nel campo text, come un'unica stringa così formattata:

    news.titolo : "it[sep1]ciao mondo![sep2]en[sep1]hello world!..." e così via.

    "[sep1]" e "[sep2]" li decidi te come separatori che sei sicuro siano altamente improbabili da comparire nelle frasi, comunque faccio un controllo e se dovessero comparire alla peggio li elimino preventivamente e avverto.

    Con un paio di funzioni faccio implode/explode dei campi testo per l'inserimento e la visualizzazione delle stringhe.

    Piccole complicazioni possono insorgere per quanto riguarda la ricerca, poichè avverrà su tutte le lingue, se si vuole cercare in una specifica lingua si deve aggiungere un ulteriore controllo via PHP (non solo con la query MySQL) su il recordset restituito dalla prima query MySQL con il full text search.

    Altri suggerimenti di come fare sono ben accetti.

  3. #3
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    è tanto macchinoso questo metodo però.. mi sa che la miglior cosa è creare una tabella così

    id - id_news - id_lingua - data - autore - testo

  4. #4
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Non capisco come la useresti, ma va affiancata ad altre tabelle?

  5. #5
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Originariamente inviato da Cerebro
    Non capisco come la useresti, ma va affiancata ad altre tabelle?
    a quella delle lingue...

    esempio

    codice:
    Tabella Lingue (id_lingua - nome)
    
    id_lingua - 1
    nome - Italiano
    
    id_lingua - 2
    nome - Inglese
    
    --------------------
    
    Tabella News (id - id_news - id_lingua - data - autore - testo)
    
    
    id - 1
    id_news - 1
    id_lingua - 1
    Data - 0000-00-00 00:00:00
    Autore - Torrone
    Testo - Mi chiamo Andrea
    
    id - 2
    id_news - 1
    id_lingua - 2
    Data - 0000-00-00 00:00:00
    Autore - Torrone
    Testo - My name is Andrea

    capito? guarda come ho lavorato sugli ID

  6. #6
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Ah ho capito, per toglierti di mezzo la tabella lingue potresti anche usare al posto di id_lingua un char(2) per il codice iso della lingua (it, en, de, ...) tanto sono corti e univoci.

    Di questo soluzione non mi piace il fatto che ad esempio la data è un dato ridondante che compare uguale, così come l'autore e tutti gli altri campi che potrebbero comparire che non sono da tradurre.

  7. #7
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Originariamente inviato da Cerebro
    Ah ho capito, per toglierti di mezzo la tabella lingue potresti anche usare al posto di id_lingua un char(2) per il codice iso della lingua (it, en, de, ...) tanto sono corti e univoci.

    Di questo soluzione non mi piace il fatto che ad esempio la data è un dato ridondante che compare uguale, così come l'autore e tutti gli altri campi che potrebbero comparire che non sono da tradurre.
    la data e l'autore perchè devono essere tradotti? non ha senso.. quelli sono dati fissi!

  8. #8
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Appunto, però compaiono tante volte quante sono le lingue identici nei vari record-per-lingua, è uno "spreco" di spazio nel db e una ridondanza fastidiosa...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.