Jump to content
php.lv forumi

Daudzvalodas datubāzē


Pentiums

Recommended Posts

Varbūt netrāpīju īstajā sadaļā bet nu darīšana arī ar arrajiem.

 

Kā datubāzē uzglabāt šādus mainīgos un pēctam viņus vienkārši ar vienu kveriju izvilkt?

 

$lang['lat']['slogan'] = 'Teksts LV valodā';
$lang['eng']['slogan'] = 'Teksts EN valodā';
$lang['rus']['slogan'] = 'Teksts RU valodā';

$lang['lat']['title'] = 'Teksts LV valodā';
$lang['eng']['title'] = 'Teksts EN valodā';
$lang['rus']['title'] = 'Teksts RU valodā';

$lang['lat']['hello'] = 'Teksts LV valodā';
$lang['eng']['hello'] = 'Teksts EN valodā';
$lang['rus']['hello'] = 'Teksts RU valodā';

Link to comment
Share on other sites

Datubāze:

+----+------+--------+------------------+
| id | lang | key	| translate		|
+----+------+--------+------------------+
| 1  | lat  | slogan | Teksts LV valodā |
+----+------+--------+------------------+
| 2  | eng  | slogan | Teksts EN valodā |
+----+------+--------+------------------+
| 3  | rus  | slogan | Teksts RU valodā |
+----+------+--------+------------------+
| 4  | lat  | title  | Teksts LV valodā |
+----+------+--------+------------------+
| 5  | eng  | title  | Teksts EN valodā |
+----+------+--------+------------------+

PHP:

$lang = array();
$sql = "SELECT lang, key, translate FROM `tabula`";
$res = mysql_query($sql);
while($row = mysql_fetch_object($res)){
$lang[$row->lang][$row->key] = $row->translate;
}
print_r($lang);

Link to comment
Share on other sites

Es gan glabātu to divās tabulās:

Keywords (id, key):
1 slogan
2 title
3 hello

Translations (id, key_id, language, translation):
1 1 lv slogan_latviski
2 1 ru slogan_krieviski
3 2 lv title_latviski
3 3 en title_angliski
...

 

Pēc vajadzības arī valodas kodu liktu atsevišķā tabulā un no Translations referencētos uz to ar valodas primāro atslēgu (id).

Link to comment
Share on other sites

bubu, ja to visu beigās ielasa dotajā masīvā, tad es īsti neredzu jēgu glabāt datus pēc šādas struktūras.

Ok, īstenībā jā, pie labošanas gan šis varētu būt labāks variants.

 

Es tulkojumus tomēr labāk glabāju failos. Var pieglabāt arī db, priekš labošanas, bet nu tam arī es tā īsti jēgu neredzu :)

Link to comment
Share on other sites

Vēl ērtāk ir, ja uztaisa klasi, kas attēlo leibeļus. Ja vajag labot tos, ieslēdz redaktora režīmu, kad labeļiem parādās linki, uz kuriem uzklikšķinot atveras popups leibeļu vērtības labošanai.

Link to comment
Share on other sites

Ok, īstenībā jā, pie labošanas gan šis varētu būt labāks variants.

varbūt tā arī ir!?

varbūt beigās ir Poga-X, kas uztaisa failus!?

 

PS: es vēl pie keywordiem pieliktu lauku default-text (tipa "untranslated"), vai automātiski pieglabātu tabulā translation zem "unknown language" :)

Edited by Delfins
Link to comment
Share on other sites

Bet ja vajag pamainīt labeli orģinālajai valodai, tad ar gettext čakars ir lielāks nekā izmantojot pirmos variantus- jāmaina labelis sourcē un pēc tam vēl jānokompilē katalogs. Un ja orģinālais .po fails ir padirsies/tāda nav, tad čakars vēl lielāks.

 

Slinkums pašlaik meklēt, bet vai kāds nav taisījis benchmarkus, kāda ir performances atšķirība starp tulkojamo stringu glabāšanu ar gettext/masīviem/konstantēm/datubāzi?

Mans minējums ir, ka cīņa būtu starp gettext un masīviem/konstantēm.

Link to comment
Share on other sites

Nesaprotu, kāpēc izmaiņas ar gettext būtu lielāks čakars kā ar masīviem. Katalogu var ģenerēt dažu sekunžu laikā arī lielos projektos (manā projektā patreiz ir 3569 faili, piemēram). Ir arī grafiskie gettext redaktori, kas nozīmē, ka kompilēšana nav jāveic no komandrindas (ti, to var darīt arī tekstu tulkotāji, vai, piemēram, sekretāre).

 

Par turēšanu datubāzē - izklausās diezgan nereāli. Neesmu rēķinājis, bet manās lapās katrā lapā ir apmēram 20-30 tulkojumi teksti. Ja taisīsi katram tulkojumam savu kveriju, tad datubāzi nonesīsi momentā. Pat ja mēģināsi ielādēt visus tekstus ar vienu kveriju un tad kešot no masīva, tad arī būs ievērojams trafiks uz datubāzi / aizņemta atmiņa pie katra lapas pieprasījuma. Atliek tikai iespēja kešot tulkojumu masīvu ar memcached (vienreiz), bet to visi hostinga provaideri nepiedāvā.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...