[multilingual] Database / dynamische content

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
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:
  • 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?)
Laten we eens kijken hoeveel talen we in de wereld hebben: Wikipedia: Lijst van talen van de 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 ]


Acties:
  • 0 Henk 'm!

  • Gabberhead
  • Registratie: Mei 2002
  • Laatst online: 07-12-2020

Gabberhead

Pluizig en blauw

Je eerste voorbeeld lijkt mij meer dan voldoende.
In feite is het enige dat je hoeft te doen, de data in je database in meerdere talen opslaan. Je primary key is dan een combinatie van je technische ID en je LanguageId.

Alle talen opslaan in een aparte tabel zou ik sowieso doen. Bij de taalcode kun je vervolgens gelijk de gegevens opnemen die te maken hebben met locale.

Toevallig ben ik net bezig met iets vergelijkbaars voor een meertalige Oracle applicatie gebouwd in Application Express.

Integratie ontwikkelaars hier melden! http://www.whitehorses.nl

"If everything seems under control, you're just not going fast enough."


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Sowieso lijkt me voorbeeld 2 eigenlijk uberhaubt wel af te vallen, aangezien dat enorme geheugen nodig heeft om voor een RDBMS dat te doorzoeken. Helemaal als er veel talen in komen te hangen.

Je zou misschien ook eens kunnen kijken naar de website http://dotsub.com Die heeft ondertiteling voor verschillende talen voor de video's. Dat kan best oplopen aan hoeveelheid talen. Dan wordt de tabel metadata toch aardig groot bij voorbeeld 2. Dus die lijkt me sowieso al afvallen.
Gabberhead schreef op woensdag 02 september 2009 @ 12:28:
...

Alle talen opslaan in een aparte tabel zou ik sowieso doen. Bij de taalcode kun je vervolgens gelijk de gegevens opnemen die te maken hebben met locale.

...
Dat is sowieso handig ja. Geeft je de mogelijkheid al om een taal te kiezen en je kunt erop filteren welke talen er ondersteund worden. En de taal eigenschappen kun je meteen opvragen.

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Topicstarter
Zijn er nog meer mensen met ideeën hierover?

Op Stackoverflow wordt er ook iets over genoemd: http://stackoverflow.com/...-a-multilanguage-database