Ja imam takvo stupidno resenje za moj sajt... koji je btw za 99.9% na srpskom.
Elem, da bi ubrzao izvlacenje stringova iz baze, uradi sledece:
1) zaboravi na normalizaciju tabela i sve to stavi u jednu tabelu
Moja tabela ima sledeca polja:
Kôd:
lang_code char(2), // SR, EN, FR
name varchar(255), // labela koja se prevodi
description varchar(255), // opis labele
value text, // vrednost labele u zavisnosti od jezika
topic varchar(30) // sekcija na koju se odnosi prevod: General, UI, Messages, Errors, Mail
2) uradi "Select * From translation_tabela" i prebaci rezultat u jedan array tipa
PHP kôd:
$translation['en']['LOGIN'] = 'Login';
$translation['sr']['LOGIN'] = 'Prijava';
...etc...
ili ti
PHP kôd:
$translation = array('en' => array( 'LOGIN' => 'Login', 'LOGOUT' => 'Logout'),
'sr' => array('LOGIN' => 'Prijava', 'LOGOUT' => 'Odjava');
3) prepravi tvoju funkciju GetString() da cita vrednost iz $translation niza, a ako nije isset() taj clan niza, onda uradi SELECT za vrednoscu iz baze za default jezik
4) ako imas eAccelerator, APC cache ili mmcache, stavi promenljivu $translation u shared memory.
4a) ako nemas doticne module, onda serijalizuj promenljivu $translation i stavi je u bazu ili filesystem (sta god ce od ta dva bude brze) pa onda unserialise... Ili jos bolje, napravi skripticu koja ce da napravi jedan PHP fajl koji ce imati sadrzinu
PHP kôd:
$translation = array('en' => array( 'LOGIN' => 'Login', 'LOGOUT' => 'Logout'),
'sr' => array('LOGIN' => 'Prijava', 'LOGOUT' => 'Odjava');
i koji ces da inkludujes na pocetku svake skripte. Svaki put kad izmenis/dodas neki translation string u bazi, pozovi neku utility skriptu koja ce da regenerise fajl sa $translation. Ovo jos bolje radi ako imas instaliran Zend Accelerator
Ima li neko bolju/optimizovaniju ideju?