Ik moet een applicatie bouwen en die applicatie moet meerdere talen ondersteunen.
De applicatie haalt gegevens op uit een databank en deze gegevens moeten -afhankelijk van de vooraf gekozen taal- in het NL, ENG, DUI, FR, ... of een andere mogelijke taal getoond worden. Al deze teksten zitten dus zowel in het EN, NL, ... in de db.
Nu, hoe design je zo iets het best? Momenteel hebben we een volgend systeem in gedachten:
Een tabel waarin alle teksten staan in de gekende talen. Die tabel zal er ong. als volgt uit zien:
De inhoud kan dus als volgt zijn:
Let wel, ik heb het hier over teksten, maar eigenlijk zullen dat in principe hooguit een paar woorden zijn, geen volledige lappen tekst dus
De databank bevat dan ook een aantal tabellen die dan de eigenlijke structuur van de gegevens representeren.
Bv:
Merk op dat de velden CategorieName en CategorieDescr dus geen tekst-velden zijn, maar integervelden. Ze bevatten nl. een verwijzing (FK) naar het passende record in de tabel tblTeksten.
Nu had ik gedacht om voor iedere soort gegevens een class aan te maken die inherited van een abstracte class. Die abstracte class bevat virtual functions voor het saven en het loaden van de data.
Bv: een class Categorie die inherited van de base-class ziet er als volgt uit:
Die save-method zal dus ieder string-veld een record moeten aanmaken in de tabel 'tblTeksten' en de PK van dat record in het juiste veld moeten saven in de tabel Categories.
Dit zou ik als volgt kunnen doen:
IMHO is dit redelijk generiek, want, mocht er later eventueel een taal bijkomen, dan hoef ik enkel de tabel tblTeksten aan te passen (een column erbij) en eventueel de method SaveInTeksten aan te passen.
Nu, wat is jullie mening over dit systeem? Vinden jullie dat goed? Niet goed? Kan het beter? Waar kan het beter?
Ikzelf denk dat er teveel toegang naar de databank zal zijn (per record zal er 1 insert statement nodig zijn + voor ieder tekstveld is er een insert nodig).
Ik hoop dat jullie een beetje snappen wat ik bedoel
De applicatie haalt gegevens op uit een databank en deze gegevens moeten -afhankelijk van de vooraf gekozen taal- in het NL, ENG, DUI, FR, ... of een andere mogelijke taal getoond worden. Al deze teksten zitten dus zowel in het EN, NL, ... in de db.
Nu, hoe design je zo iets het best? Momenteel hebben we een volgend systeem in gedachten:
Een tabel waarin alle teksten staan in de gekende talen. Die tabel zal er ong. als volgt uit zien:
code:
1
2
3
4
5
6
7
| Table: tblTeksten ---------------------- TekstId : int, pk TekstNL: varchar TekstFR: varchar TekstEN: varchar TekstGER: varchar |
De inhoud kan dus als volgt zijn:
code:
1
2
3
| TekstId TekstNL TekstFR TekstEN 1 Categorie Catégorie Categorie ... |
Let wel, ik heb het hier over teksten, maar eigenlijk zullen dat in principe hooguit een paar woorden zijn, geen volledige lappen tekst dus
De databank bevat dan ook een aantal tabellen die dan de eigenlijke structuur van de gegevens representeren.
Bv:
code:
1
2
3
4
5
| Table Categories --------------------- CategorieId int, pk CategorieName int CategorieDescr int |
Merk op dat de velden CategorieName en CategorieDescr dus geen tekst-velden zijn, maar integervelden. Ze bevatten nl. een verwijzing (FK) naar het passende record in de tabel tblTeksten.
Nu had ik gedacht om voor iedere soort gegevens een class aan te maken die inherited van een abstracte class. Die abstracte class bevat virtual functions voor het saven en het loaden van de data.
Bv: een class Categorie die inherited van de base-class ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
| class Categorie : BaseClass
{
private int CategorieId;
private string CategorieName;
private string CategorieDesc;
public override void Save ();
} |
Die save-method zal dus ieder string-veld een record moeten aanmaken in de tabel 'tblTeksten' en de PK van dat record in het juiste veld moeten saven in de tabel Categories.
Dit zou ik als volgt kunnen doen:
code:
1
2
3
4
5
6
7
8
| public override void Save()
{
CatNaamId = SaveInTeksten (CategorieName, TaalCode);
CatDescId = SaveInTeksten (CategorieDesc, TaalCode);
INSERT INTO tblCategories (CategorieName, CategorieDesc)
VALUES (CatNaamId, CatDescId);
} |
IMHO is dit redelijk generiek, want, mocht er later eventueel een taal bijkomen, dan hoef ik enkel de tabel tblTeksten aan te passen (een column erbij) en eventueel de method SaveInTeksten aan te passen.
Nu, wat is jullie mening over dit systeem? Vinden jullie dat goed? Niet goed? Kan het beter? Waar kan het beter?
Ikzelf denk dat er teveel toegang naar de databank zal zijn (per record zal er 1 insert statement nodig zijn + voor ieder tekstveld is er een insert nodig).
Ik hoop dat jullie een beetje snappen wat ik bedoel
https://fgheysels.github.io/