WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Multilanguage databaser för varje språk? (https://www.wn.se/forum/showthread.php?t=1057069)

secag 2013-03-03 17:46

Multilanguage databaser för varje språk?
 
Jag har en tabell med olika kategorier, Bilar, Båtar, Hus.
Hur ska man gå tillväga om man har en sida som kan visa flera språk(Svenska, Engelska, Tyska) och man vill att Bilar ska bli Cars och Hus bli Houses?

Min teori är att i tabbellen så har man olika fält: category_name_swedish och category_name_english och så hämtar man bara den kolumnen man behöver vid fråga? Är det en okej metod? Eller ska man helt enkelt köra på olika databaser?

jayzee 2013-03-03 18:20

Det låter som fel approach, läs istället om gettext.

secag 2013-03-03 19:13

Har försökt lära mig vad det är innan men jag förstår inte. Kan du länka ett exempel på hur det används i Apache?

jayzee 2013-03-03 19:38

Gettext är alltså ett bibliotek avsedd för multilanguage som finns till många programmeringsspråk såsom PHP, Python, NodeJS, etc..
Det har alltså ingenting med apache, nginx eller lightttpd att göra.

Man skapar en .po fil per språk man vill stödja innehållande alla strängar du använder på din sajt/applikation, man kör sedan dessa filer genom msgfmt som skapar binära filer (.mo) som gettext kan läsa. Ett av de många exempel (i PHP) hittar du här.

secag 2013-03-03 19:45

Tack!! :) Men vart kan man ladda ner biblioteket till PHP. Den här sidan är så luddig.http://www.gnu.org/software/gettext/

jayzee 2013-03-03 19:52

Gettext ingår i PHP per default, läs mer på deras sida.

secag 2013-03-03 21:55

Tack, nu har jag fått det till att fungera! ;)

pelmered 2013-03-05 07:38

Värt att nämna är att du inte bör använda det här för content utan endast för statiska texter i gränssnittet.

Titta även på att kombinera gettext med PHPs sprintf(). Det är riktigt kraftfullt för att försöka att skriva ut halvdynamiska strängar.

Såhär skriver du ut en sträng som kan översättas med en dynamisk substräng:
PHP-kod:

__sprintf('Welcome %s'$username) ); 


secag 2013-03-06 15:09

Nae, jag får det inte att funka. Och Google hjälper ju inte ett dugg.

Jag har förstått att man ska börja med en POT fil. Sen ifrån den ska man översätta så man får .po filer. Och sen typ gör man .po filerna till .mo filer.

Men hur gör jag en POT fil? Allt jag hittar är till Wordpress :S.

tartareandesire 2013-03-06 15:45

Det finns massor med information om detta om du söker i Google. Du kan exempelvis använda Poedit.

secag 2013-03-06 16:05

Jag har sökt på Google och det hjälper inte mig. Förstår mig inte på Poedit, vill bara kunna skriva in mina strängar någonstans. Det går inte. Och allt jag hittar på Google är typ Wordpress.

jayzee 2013-03-06 18:52

Citat:

Ursprungligen postat av secag (Inlägg 20464207)
Jag har sökt på Google och det hjälper inte mig. Förstår mig inte på Poedit, vill bara kunna skriva in mina strängar någonstans. Det går inte. Och allt jag hittar på Google är typ Wordpress.

OK, vi gör det enkelt:
1. Skapa en .po i en textredigerare, vilken du väljer är helt upp till dig (vi, nano, emacs, notepad...). Filen skall innehålla 2 saker (msgid samt msgstr), den ena är texten i ursprungsspråket och den andra översättningen. Se yapig po filen.
2.
Kod:

pocompile <.po fil> <.mo fil>
3. Ladda in filen i ditt PHP script, beskrivningen finns i de länkar du fick tidigare.

Det är inte svårare än så! Jag hittar hur många tutorials som helst i ämnet...

danjel 2013-03-07 14:19

ganska bra tutorial
http://phpmaster.com/localizing-php-applications-1/

Annars kan du ju alltid använda en databaslösning med texter
http://www.gsdesign.ro/blog/multilan...sign-approach/

Det kan vara att föredra i ditt fall att bara ha en enkel tabell med texter om du bara ska göra en enkel lookup mot en key och ett language

<?php echo Translate("unik_text_nyckel") ?>

(Givet då att språk valet hanteras i "Translate" funktionen)

SEAPelle 2013-03-07 15:54

Citat:

Ursprungligen postat av secag (Inlägg 20463940)
Jag har en tabell med olika kategorier, Bilar, Båtar, Hus.
Hur ska man gå tillväga om man har en sida som kan visa flera språk(Svenska, Engelska, Tyska) och man vill att Bilar ska bli Cars och Hus bli Houses?

Min teori är att i tabbellen så har man olika fält: category_name_swedish och category_name_english och så hämtar man bara den kolumnen man behöver vid fråga? Är det en okej metod? Eller ska man helt enkelt köra på olika databaser?

Du fårgade om databas med tabeller men f¨r svar om php-översättnig, så jag svarar på din fråga ifall den fortfarande e aktuell.

Tabell Kategorier (KatID, KategoriNamn)
KatID=1, Kategorinamn= Bilar
KatID=2, Kategorinamn= Båtar

Tabell Sprak (LangID, SprakNamn)
LangID=1, Spraknamn= Svenska
LangID=2, Spraknamn= Engelska

Tabell KategoriSprak (KatID, LangID, Namn)
KatID=1, LangID=1, Namn= Bilar
KatID=1, LangID=2, Namn= Cars
KatID=2, LangID=1, Namn= Båtar
KatID=2, LangID=2, Namn= Boats

Sen kör du bara
select Namn from KategoriSprak where KatID=1 and LangID=1 för Svenska bilen respektive
select Namn from KategoriSprak where KatID=1 and LangID=2 för Engelska bilen.

E du effektiv skapar du en storeproc med langID=1 som default, så blir det svenska om du inte skickar med något annat...
Självklart sätter du nycklar och indexerar LangID och KatID i alla tabellerna.

secag 2013-03-07 18:29

Kommer nog använda danjels tips. gettext vill jag inte ge mig in på i detta projekt. Då jag endast behöver sidan på 2 språk så känns databaslösning som det bästa alternativet.


Alla tider är GMT +2. Klockan är nu 20:42.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson