Witam!
Mam takie pytanie bo chyba sam coś zagmatwałem. Postawiłem sobie założenie dla strony wielojęzykowej aby tłumaczenia wyrazów zapisywać w bazie danych. Dla każdej podstrony pobierać tylko te wyrazy których dana podstrona używa więc tabela w bazie wygląda następująco:
Tabela: language
id ( jako CHAR ) <- i jest to nazwa wyrazu/zdania do tłumaczenia
pl <- język Polski
eng <- język Angielski
Przykładowe rekordy wyglądają tak:
id | pl | eng
text_log_in | Zaluguj Się | Log In
text_log_out | Wyloguj się | Log Out
Pole id pozostaje mi dać jako UNIQUE i nie ma sensu mi dawać tutaj do tabeli żadnego Auto Increment skoro pobieram rekordy na podstawie id jako tekst. Napisałem funkcję do pobierania tłumaczenia tylko jednego pola pl bądź eng lecz mam nadzieję że istnieje bardziej cywilizowany sposób do pobierana rekordów:
function load_language( $language, $words )
{
try
{
$loaded_words = [];
//
// Połączenie z bazą danych
//
$db_connect = connect_db_PDO();
//
// Zapytanie, wartość $language jako może wystąpić to 'pl' lub 'eng' !
$query = 'SELECT '. $language .' FROM language WHERE id = :id';
//
// Pętla pobierająca tłumaczenie w danym języku dla każdego podanego słowa
foreach ($words as $key => $value)
{
if(isset($loaded_words[$value])) // Debug
echo 'Uwaga! Ponowne wczytanie słowa - '.$value.'</br>';
$stmt = $db_connect->prepare($query);
$stmt->bindValue(':id', $value, PDO::PARAM_STR);
$stmt->execute();
if($stmt->rowCount())
{
$loaded_words[$value] = $stmt->fetch(PDO::FETCH_ASSOC)[$language];
}
else // Debug
{
$loaded_words[$value] = 'Nie znaleziono !';
echo 'Uwaga! Nie znaleziono tłumaczenia - '.$value.'</br>';
}
$stmt = null;
}
return $loaded_words;
}
catch(PDOException $e)
{
return null;
}
}
Krótkie wyjaśnienie, do funkcji podaję tablicę słów które trzeba pobrać z bazy dla danej podstrony. Słowa te są odpowiednikiem id w bazie. Tablica ma postać $words[0] = "text_log_out"; $words[1] = "text_log_in"; Wynik zwrócony przez funkcję chcę mieć jako tablicę asocjacyjną gdzie wartość to tłumaczenie słowa w danym języku a identyfikuję index tabeli za pomocą id tłumaczenia z bazy. Nie pasuję mi tylko że na darmo tworzę tablicę $words w postaci która później nie będzie istniała. Sprawa druga to taka że wykonuję w pętli zapytanie do bazy dla każdego tłumaczenia, czy nie ma na to innego sposobu ?
Z poważaniem,