2013-04-16 11 views
6

Ho un sito web in 3 lingue.Database multilingue: quale metodo è migliore?

Qual è il modo migliore per strutturare il DB?

1) Creare 3 tavolo, uno per ogni lingua (ad esempio Product_en, Product_es, Product_de) e recuperare i dati dal tavolo con un identificatore:

esempio sulla pagina php ho una stringa:

$language = 'en' 

in modo da ottenere i dati solo

SELECT FROM Product_$language 

2) Creare 1 tavola con:

ID LANGUAGE NAME DESCR 

e post sulla pagina unica

WHERE LANGUAGE = '$language' 

3) Creare 1 tabella con:

ID NAME_EN DESCR_EN NAME_ES DESCR_ES NAME_DE DESCR_DE 

Grazie!

+0

Opzione 4: disporre di una tabella con descrizioni in inglese. Avere un'altra tabella che traduce frasi. Se una frase esiste già, hai la traduzione. In caso contrario, aggiungilo. Questo crea un "dizionario". È più efficiente? Dipende un po 'dal riutilizzo di molte stringhe o meno (molto, mai, ...) - che a loro volta dipende da quanto è grande il database, davvero. Rende le cose più manutenibili in modo frazionario, penso. – Floris

risposta

4

Preferisco optare per la seconda opzione .

La prima opzione per me non sembra abbastanza flessibile per la ricerca dei record. Cosa succede se hai bisogno di cercare due lingue? Il modo migliore che puoi fare è quello di UNION il risultato di due dichiarazioni SELECT. Il terzo sembra avere ridondanza dei dati. Sembra che tu abbia bisogno di avere una lingua per ogni nome.

Il secondo molto flessibile e maneggevole. Puoi fare qualsiasi operazione tu voglia senza aggiungere alcuni metodi speciali a meno che tu non voglia ruotare i record.

+0

# 2 è la strada da percorrere. Ricordati di creare una tabella di prodotti separata per attributi che non sono specifici della lingua, come prezzo, qty, UPC, ... Questa tabella sarà la tua tabella principale per i prodotti. – Cano64

1

Vorrei optare per l'opzione uno o due. Quale dipende veramente dalla tua applicazione e da come prevedi di accedere ai tuoi dati. Quando ho fatto la localizzazione simile in passato, ho usato l'approccio a tabella singola.

La mia preferenza per questo approccio è che non è necessario modificare lo schema del DB se si aggiungono ulteriori localizzazioni. Inoltre, in questo caso non è necessario modificare il codice correlato, poiché l'identificatore della lingua diventa semplicemente un altro valore utilizzato nella query.

+0

Grazie, vado per il secondo – user2120569

1

In questo modo si ucciderebbe il database in poco tempo.

Basta fare una tabella come:

TABLE languages with fields: 

-- product name 
-- product description 
-- two-letter language code 

Questo vi permetterà, non solo di avere una banca dati strutturata meglio, ma si potrebbe anche avere i prodotti che hanno un solo traduzione. Se vuoi, puoi anche voler mostrare la lingua predefinita se non è specificato nessun altro. Ovviamente lo farai programmaticamente, ma penso che tu abbia l'idea.

+0

Questo è quello che ho scritto sul secondo metodo! Grazie – user2120569

+0

Per me, questo è il metodo più ottimizzato :) ti consentirà di gestirlo come vuoi davvero. Decidi il codice e mantieni intatto un database pulito :) –