Jump to content
php.lv forumi

Valodas


ray

Recommended Posts

Es gribētu zināt pēc jūsu pieredzes, kā vislabāk ar php taisīt lapu ar vairākām valodām.

Iepriekš taisīju tā, ka datubāzē katram ierakstam bija lv un en tulkojums, piem, lv:forums > en:forum un ar sesiju (piem., sesija("lv_valoda")) un funkcijas palīdzību no datubāzes paņēmu vajadzīgo ierakstu, bet šaubos vai šis būtu vispareizākais variants, tāpēc gribētu zināt labāku.

Link to comment
Share on other sites

Katrai lietai ir sava pieeja.

 

Ziņām tā būtu kā unikāls ieraksts (vai arī taisīt `ziņas` un to `tulkojumi` )

Produktiem tie būtu vienkārši kā tulkojumi... un ja parametrus taisa kā opcijas, tad opciju nosaukumi glabājās atseviškī

 

1.) N-ierkasti (tavējais)

2.) Kopējā tabula Translation (TableId, FieldId, RefId, LangId, Translation) [vienmēr ir joinojama]

3.) Katrai valodai sava bāze/tabula (Postgre atļauj inheritance, tāpēc tur mazākā sāpe)

 

Atliek noskaidrot, ko tu gribi tulkot. Pateikt "Vot es gribu mazu google vai amazon.com" ir viegli.

Edited by Delfins
Link to comment
Share on other sites

Interfeisa tekstus var turēt teksta failos kā mainīgos, piem., lang.lv.php:

$texts['ok'] = 'Viss ir ok';

$texts['not_ok'] = 'Notikusi kļūda!';

$texts['bla'] = 'Bla bla bla!';

 

Angļu valodai cits fails ar tulkotiem tekstiem.

 

Pēc tam atkarībā no izvēlētās valodas inkludojam attiecīgo failu.

 

Lai izdrukātu šos tekstus, izveidojam speciālu fju, kas, piem., tiek izsaukta get_text('ok');. Šajā fjā sarakstam, ko darīt, ja nav atrasts mainīgais (tad, piem., ņemam tulkojumu no kaut kādas defaultās valodas). Šo var attīstīt arī tālāk, ka var padot fjai mainīgos, kas tiks ievietoti izdrukājamajā rindā. Piem., get_text('cena', array(12, 14)). Valodas failā, piem., $texts['cena'] = 'Parastā cena ir {2}, bet jums cena ir {1}';

 

 

Datubāzē var darīt, piem., šādi:

article:

id | date | u.c. vispārīgi lauki, kas ir kopīgi visām valodām

article_texts:

id | article_id | lang | title | text

 

Šādi varēs vienot cik vien valodas gribi klāt.

Link to comment
Share on other sites

Es uztaisitu atsevishki katrai lapai savu mapitei ar valodu. (Tas der ja vajaga tikai mainit lapas valodas, bet ja ir jaunumi etc, tad vajaga glabat ierakstos ar attiecigam valodam)

Link to comment
Share on other sites

Ja par piemēru ņemam "raksti", tad es lietotu šādu variantu tabulai:

 

article_id | title_lv | title_ru | title_en | text_lv | text_ru | text_en

 

attiecīgi pēc valodas skatamies, kuru rakstu ņemt.

 

$qry = sprintf("SELECT article_id, title_%1\$s AS title, text_%1\$s AS text FROM articles", $lang_prefix);

Link to comment
Share on other sites

un glabāt daudzvalodu tekstus failos ir daudz fleksibilāk? :) Un ja nepieciešams uztaisīt interfeisu priekš lietotājiem (da arī priekš sevis), lai viņi paši varētu mainīt šos rakstus, frāzes, nosaukumus vairākās valodās, tad mācīsi viņiem uz servera atvērt pareizo failu un tur mainīt tekstus? :)

Link to comment
Share on other sites

prieksh intrefesa var jau izveidot arii tabulu `interfeiss`, un tur glabaat mainiigo un cilveek atshifreejamo (ja jau grib prastu variantu interfeisa tulkoshanai).

bet visu tulkot man patiik ar delfiina 2. teikto variantu.

 

Katrai lietai ir sava pieeja.

 

Ziņām tā būtu kā unikāls ieraksts (vai arī taisīt `ziņas` un to `tulkojumi` )

Produktiem tie būtu vienkārši kā tulkojumi... un ja parametrus taisa kā opcijas, tad opciju nosaukumi glabājās atseviškī

 

1.) N-ierkasti (tavējais)

2.) Kopējā tabula Translation (TableId, FieldId, RefId, LangId, Translation) [vienmēr ir joinojama]

3.) Katrai valodai sava bāze/tabula (Postgre atļauj inheritance, tāpēc tur mazākā sāpe)

 

Atliek noskaidrot, ko tu gribi tulkot. Pateikt "Vot es gribu mazu google vai amazon.com" ir viegli.

 

vari luudzu mineet piemeeru, kaa tu izmato sho tabulu tulkoshanai. man ir taada funkcija uzrakstiita, bet man ir paaraak daudz selectu.

 

man pasham liekas, ka tas ir pats labaakais variants.

Link to comment
Share on other sites

Neesmu nekad veidojis neko līdzīgu 2 variantam, bet liekas, ka vajadzētu pietikt ar kaut ko līdzīgu šim:

function get_translation($table_id, $field_id, $lang_id) {

$sql = "
	SELECT translation
	FROM `translations`
	WHERE
		table_id = '".$table_id."' AND
		field_id = '".$field_id."' AND
		lang_id = '".$lang_id."'
	LIMIT 1
";

$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
	$row = mysql_fetch_row($result);
}

if (!empty($row[0])) {
	return $row[0];
}

return false;

}

Edited by andrisp
Link to comment
Share on other sites

mans ir šāds variants:

tabula tulkosana (id | tulkojamais | lv | en)

piemēram tabulas ieraksts: 1 | jaunumi | Jaunumi | News

 

$_SESSION['valoda'] = 'lv';

function tulkosana($teksts)
{
$query = "SELECT * FROM tulkosana WHERE tulkojums= '$teksts'";
$result = mysql_query($query) or die (mysql_error());
while ($output= mysql_fetch_array($result)) {
	echo $output[$_SESSION['valoda']];
}
}

<?
tulkosana('jaunumi');
?>

Edited by ray
Link to comment
Share on other sites

ray, tas bija piemērs kā nevajag taisīt tulkošanu?

nepietiek ar to ka, uz katru labeli griezies pie db,vēl no db velc ārā tulkojumu visas iespējamās valodās, bet paņem tikai vienas valodas tulkojumu.

priekš kam tur cikls īsti nezinu, bet diez vai gribi lapā redzēt 3x iztulkotu vārdu 'jaunumi' :p

Link to comment
Share on other sites

×
×
  • Create New...