webForumDet fria alternativet

Lagra översättning i databas

PHPur PHP

9 svar · 625 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Jag håller på med en webbshop som kommer finnas på engelska och svenska. Alla applikationstexter lagrar jag i separata filer men produkterna lagrar jag i en databas (även översättningen alltså).

Databasstrukturen ser ut ungefär så här:

ID
name_sv
name_eng
price_sv
price_eng

Och så hämtar jag en produkt så här:

<?php
	$SQL_item = mysql_query('SELECT colID, colName_'.$_lang.', colPrice_'.$_lang.' FROM products WHERE colID=1') or die (mysql_error());
	if (mysql_num_rows($SQL_item)){
		$id = mysql_result ($SQL_item, 0, 0);
		$name = mysql_result ($SQL_item, 0, 1);
		$price = mysql_result ($SQL_item, 0, 2);
	}
?>

<h1><?php echo $name; ?></h1>
<b><?php echo $price ; ?></b>

Finns det något smidigare sätt att lagra eller hämta produkterna?

Medlem sedan apr. 2006409 inlägg
#2

Jag brukar göra så att jag kopplar språk till produkt. Det finns säkert bättre lösningar, men det blir ganska greppbart om man gör så. När du hämtar en produkt ser du till att query-strängen JOINar till den tabell som innehåller det språk du vill ha.

Medlem sedan nov. 200013 890 inlägg
#3

Du menar: en tabell med produkter (det som inte behöver översättas) och en tabell med själva översättningarna?

Medlem sedan mars 20007 896 inlägg
#4

Jag gillar inte tanken på att ha olika kolumner för olika språk i min databas. Om du nu ska bygga ut din webbshop och vill ha in ytterligare ett språk, hur skulle du göra då? Jag har gjort så att jag har ett fält som definierar språket för varje rad, vilket gör att det blir utbyggbart. Det här var dock en nödlösning, men hittills har den fungerat bra. Det tråkiga är ju dock att det blir duplicerad data i databasen.

Exempel:

Products
--------
id      productname     category    price   language
1       Såg             2           149     swedish
2       Saw             2           149     english
3       Säge            2           149     german
...
Medlem sedan nov. 200013 890 inlägg
#5

SPiN skrev:

Jag gillar inte tanken på att ha olika kolumner för olika språk i min databas. Om du nu ska bygga ut din webbshop och vill ha in ytterligare ett språk, hur skulle du göra då?

Jo, det är naturligtvis nackdelen. Inom överskådlig framtid kommer det bara att finnas två språk och skulle det tillkomma ytterligare ett språk blir det ju till att strukturera om databasen och editera alla produkter. Inte smidigt men inte omöjligt heller.

Det som jag tycker är minst smidigt med min lösning är att jag måste skicka med språker flera gånger i min SQL-fråga och att jag inte kan (på något enkelt sätt i alla fall) använda kolumnnamnet senare i koden:

//I dagsläget
$name = mysql_result ($SQL_item, 0, 1);

// Jag skulle vilja ha typ
$name = mysql_result ($SQL_item, 0, 'colName');

Väldigt tacksam för tips och tankar.

Medlem sedan sep. 200811 inlägg
#6

Kolla strukturen för en befintlig webshop, exempelvis oscommerce. Där ligger produktnamn och beskrivning i en egen tabell som är kopplad till språk och övriga produktdata i en annan tabell.

products
id price weight
1 129 1

products_description
id name description language
1 Prod 1 Produkt nr 1 1
1 Article 1 Article no 1 2

Medlem sedan nov. 200013 890 inlägg
#7

Det låter onekligen som en bra lösning. Ungefär hur ser en SQL-fråga ut som plockar fram produkt id 1 med alla information ur båda tabellerna?

Medlem sedan sep. 200811 inlägg
#8

select * from products, products_description where products.id = products_description.id and products.id=1

Medlem sedan nov. 200013 890 inlägg
#9

Nu har jag byggt upp strukturen i databasen och det ser ut att fungera riktigt smidigt med macwiz lösning. Tack!

Medlem sedan mars 2001363 inlägg
#10

Så har jag också gjort i nästa version av XodaGallery, var det smidigaste sätt jag kunde komma på så där kom vi fram till samma sak.

Kategorier, Bilder, Sidor har var för sig två tabeller - en med metadata och en med innehållet. Inehållstabellen är sedan kopplad till en tabell med Språk. Själva gränssnitts-språket är däremot i .mo-filer som Wordpress och många använder. Har valt att dela upp det så för att användaren med en språkfil ska kunna installera nya språk och bara översätta sitt eget innehåll.

258 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
133 ms — hämta forumlista (db)
124 ms — hämta statistik (db)
127 ms — hämta tråd, inlägg och bilagor (db)