Wielojęzyczna baza danych

0

Cześć. W ramach nauki wykonuję stronę wielojęzyczną (langi trzymam w MariaDB, wyświetlam przez php) i mam problem z wyświeleniem wartości. Chciałbym stworzyć zapytanie sql, które wyświetli mi poprawną wartość translation wg podanego w kodzie na sztywno name. Coś typu $lang['localization'] wyświetlające name localization dla naszego określonego language_code.

id language_code name translation
1 en localization Localization
2 en type Type
3 pl localization Lokalizacja
4 pl type Typ

Jedyne działające rozwiązanie jakie mi przychodzi do głowy to zrobić tabelę w ten sposób:

id language_code localization type
1 en Localization Type
2 pl Lokalizacja Typ
3 es Localización Tipo

Użyć zapytania:

SELECT _translation_other.location, _translation_other.type
              FROM `_translation_other`
              WHERE _translation_other.language_code = 'pl'

I wypluć to w ten sposób:

if($result = mysqli_query($db_connection, $sql_idk)) {
  $row = mysqli_fetch_array($result);
  echo '<h3>'. $row['location'] .'</h3>';
  echo '<h3>'. $row['type'] .'</h3>';
}

Działa, ale co jeśli będe miał dużo tekstów? Będe miał wtedy kolumn od groma, a nie wiem, czy jest to ok.
Teraz tak myśle, że mogę zrobić osobną tabelę (różniącą się jedynie suffixem) dla każdego z języków. Które rozwiązanie będzie lepsze?

4

Chcesz się nauczyć czegoś praktycznego? Coś co zaprocentuje w przyszłości?

Zacznij się uczyć jakiegoś frameworka. Wybierz Laravel lub Symfony. Nie pisz kodu w czystym PHP. Wspomniane przeze mnie frameworki mają moduły do obsługi lokalizacji, oparte o pliki (czy to JSON czy YAML). Nie używaj do tego bazy danych. Serio.

0

A zaspokajając Twoją ciekawość, powinieneś mieć identyfikator i tłumaczenie. Coś w sensie:

lang str_id str
pl type Typ
en type Type
0

zrobił bym trzy tabele
pierwsza to lista języków

---------------------------
id,languageCode,description
---------------------------
1,pl,język polski
2,en,język angielski
3,de,język niemiecki

druga tabela zawierające definicje wyrażeń

----------------------
id,expressionId,description
----------------------
1,1,kolor czerwony
2,2,wysoki
3,3,gorący 
4,4,samochód

oraz trzecia z zapisami wyrażeń w konkretnych językach (nie wszystkie języki muszą być obsłużone)

---------------------------------
id,expressionId,languageCode,translation
---------------------------------
1,1,en,red
2,1,pl,czerwony 
3,2,en,high
4,2,pl,wysoki
5,1,de,rot
6,4,pl,samochód
7,4,en,car
8,4,de,auto
9,3,en,hot

w trzeciej j tabeli dodał bym jeszcze
FOREING KEY do drugiej tabeli na polu expressionId
oraz
FOREING KEY do pierwszej tabeli tabeli na polu languageCode
aby baza pilnowała spójności danych

1 użytkowników online, w tym zalogowanych: 0, gości: 1