Ik zat eens na te denken, wat is de beste manier om een multilingual database in te richten? We kennen allemaal het principe van taal bestanden, maar dat is voor statische content. Hoe kun je op database niveau, dus dynamische content, het beste multilingual indelen?
Eerst maar eens de verschillende zaken noemen, die aan bod komen:
dat zijn er een hoop.
Laten we daarbij vanuit gaan dat we van te voren niet helemaal weten, welke talen we ondersteunen en het liefst hebben dat degene die de content erin zet, zelf mag bepalen welke talen erin komen, dus mag ook de eerste keer zijn dat die taal erin gezet wordt.
Voorbeeld 1
Elke Post en ook met reacties kunnen dezelfde ID meerdere keer hebben, waarbij de ID uniek is per item, maar dat ze meerdere keer kunnen voorkomen met verschillende talen. Dus de primary key is dan: (ID, Language)
Voorbeeld 2
Voorbeeld 3
Language kan best een ID zijn die naar een Language tabel verwijst, waarin de rest van de info staat over die taal.
Je zou ook nog een hoofd database hebben en dan per taal een database.
Ik voel het meest voor de laatste. Welke indeling vinden jullie het handigst? Ik vind zelfs die laatste nog geen goede indeling. Hoe zouden jullie zoiets oplossen?
De rest wat ik hierboven noem aan locale enzo, wil ik later in dit topic behandelen.
Eerst maar eens de verschillende zaken noemen, die aan bod komen:
- Vertaalde content
- Locale (punten, comma's, datum/tijd notatie, etc)
- Tijdzones
- Valuta (hoort eig bij Locale, maar is toch weer apart)
- Karakterset
- Grammatica, dus zinsopbouw
- Links-naar-recht of rechts-naar-links lezen (bestond boven naar beneden ook binnen de digitale wereld?)
dat zijn er een hoop.
Laten we daarbij vanuit gaan dat we van te voren niet helemaal weten, welke talen we ondersteunen en het liefst hebben dat degene die de content erin zet, zelf mag bepalen welke talen erin komen, dus mag ook de eerste keer zijn dat die taal erin gezet wordt.
Vertaalde content
Als we als voorbeeld een blog nemen met reacties, waarvan je de reacties zelfs als meertalen wilt kunnen beschouwen. Ik kan daar een aantal database structuren voor bedenken. Hier geef ik een paar voorbeelden:Voorbeeld 1
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| Posts -------- ID (niet uniek) Title Content Language Reactions -------- ID (niet uniek) User_ID Content Language |
Elke Post en ook met reacties kunnen dezelfde ID meerdere keer hebben, waarbij de ID uniek is per item, maar dat ze meerdere keer kunnen voorkomen met verschillende talen. Dus de primary key is dan: (ID, Language)
Voorbeeld 2
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Posts -------- ID (uniek) Title (onvertaald) Title_EN Title_NL Title_CN Content (onvertaald) Content_EN Content_NL Content_CN Reactions -------- ID (uniek) User_ID Content (onvertaald) Content_EN Content_NL Content_CN |
Voorbeeld 3
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| Text -------- ID Default_Language Translations -------- ID Text_ID (Text.ID) Text Language Posts -------- ID Title_ID (Text.ID) Content_ID (Text.ID) Reactions -------- ID User_ID Content_ID (Text.ID) |
Language kan best een ID zijn die naar een Language tabel verwijst, waarin de rest van de info staat over die taal.
Je zou ook nog een hoofd database hebben en dan per taal een database.
Ik voel het meest voor de laatste. Welke indeling vinden jullie het handigst? Ik vind zelfs die laatste nog geen goede indeling. Hoe zouden jullie zoiets oplossen?
De rest wat ik hierboven noem aan locale enzo, wil ik later in dit topic behandelen.
[ Voor 5% gewijzigd door eghie op 02-09-2009 12:20 ]