Just nu i M3-nätverket
Gå till innehåll

Hur hantera man olika språk i ett PHP-projekt?


Zark

Rekommendera Poster

Hej

 

Jag är ganska ny på PHP och har bara jobbat med mindre web-projekt som hittills antingen varit på svenska eller engelska.

 

Nu har jag börjat med ett projekt som skall stödja både svenska och engelska (kanske fler språk). Jag har då noterat att man skvätter ut en massa småtexter här och där på sidorna och för varje lite text måste man ta hänsyn till vilket språk som skall skrivas ut.

 

Hur hanterar man bästa alla dessa småtexter (även större texter)?

Länk till kommentar
Dela på andra webbplatser

Hej

 

Jag är ganska ny på PHP och har bara jobbat med mindre web-projekt som hittills antingen varit på svenska eller engelska.

 

Nu har jag börjat med ett projekt som skall stödja både svenska och engelska (kanske fler språk). Jag har då noterat att man skvätter ut en massa småtexter här och där på sidorna och för varje lite text måste man ta hänsyn till vilket språk som skall skrivas ut.

 

Hur hanterar man bästa alla dessa småtexter (även större texter)?

 

Om jag tolkar dig rätt så har de flesta val som kan göras vilket språk texten ska visas på, ofta med flaggor. Ha en svensk och engelsk flagga. Vad jag vet så får du göra olika webbsidor för språken.

Länk till kommentar
Dela på andra webbplatser

@md7dani: Ja, jo, jag kommer garanterat ha flaggor eller liknande för att låta användarna välja språk. Att göra en sida per språk är inte att tänka på eftersom det skulle leda till ett helvete om jag skulle behöva kopiera buggfixar mellan de olika filerna.

 

@Jabs: Att lägga texterna i en databas är naturligtvis en lösning men det hur jag hanterar något sådant, dvs vilket metod använder jag?

 

Jag har funderat på att använda en php-fil per språk som innehåller variabler med strängar för respektive språk. När sidorna laddar kollar man den valda $_GET-variabeln i URL'n för valt språk och/eller så håller man koll på det valda språket med cookies. Därefter laddar man respektive språkfil.

 

Exempel på en engelsk respektive svensk språkfil:

 

txt_en.php:

$txt_velcome = "Welcome to this webpage";

 

txt_sv.php:

$txt_velcome = "Välkommen till denna websida";

 

Är det en bra lösning?

Länk till kommentar
Dela på andra webbplatser

Svar: Ja.

Det verkar dock som många använder en array istället för att lättare kategorisera. Tänk själv:

$index[description] = 'någon typ av beskrivning av något';

$error[description] = 'Beskrivning av ett fel';

Dessa skulle krocka annars. Det går ju så klart att ha $error_description vs $index_description. Antar att man får göra som man vill.

Vettigt är väl att lägga till ett prefix dessutom för att minimera variabelkrockar

$lng_index[]

$lng_error[]

Code Igniter använder den här metoden. Den är även vanlig i tutorial. Ett sätt är konstanter, men det ska vara långsammare. Ingen egen undersökning på det så jag låter det vara osagt.

Länk till kommentar
Dela på andra webbplatser

@md7dani: Ja, jo, jag kommer garanterat ha flaggor eller liknande för att låta användarna välja språk. Att göra en sida per språk är inte att tänka på eftersom det skulle leda till ett helvete om jag skulle behöva kopiera buggfixar mellan de olika filerna.

 

@Jabs: Att lägga texterna i en databas är naturligtvis en lösning men det hur jag hanterar något sådant, dvs vilket metod använder jag?

 

Jag har funderat på att använda en php-fil per språk som innehåller variabler med strängar för respektive språk. När sidorna laddar kollar man den valda $_GET-variabeln i URL'n för valt språk och/eller så håller man koll på det valda språket med cookies. Därefter laddar man respektive språkfil.

 

Exempel på en engelsk respektive svensk språkfil:

 

txt_en.php:

$txt_velcome = "Welcome to this webpage";

 

txt_sv.php:

$txt_velcome = "Välkommen till denna websida";

 

Är det en bra lösning?

 

 

Det kan säkert bli en bra lösning. Är själv bara så insnöad på att använda databaser till allt så jag använder sällan andra lösningar, och tycker därför att db är enklast, men det finns nog fördelar och nackdelar med båda varianterna. Testa din lösning först och fungerar det tillfredsställande så kör på det. :-)

Länk till kommentar
Dela på andra webbplatser

@/randis: Ditt förslag med arrayer är riktigt intressant!

 

@Jabs: En anledning till att använda filer är att det blir lättare för andra att granska och ändra i filerna.

Länk till kommentar
Dela på andra webbplatser

@/randis: Ditt förslag med arrayer är riktigt intressant!

 

@Jabs: En anledning till att använda filer är att det blir lättare för andra att granska och ändra i filerna.

 

 

Att göra det lätt är en god anledning. En fara kan dock vara om de som ändrar inte kan php utan råkar ta bort något tecken här eller där, då blir det problem. Då kan det vara säkrare att ändra texter via ett gränssnitt. Men nu kanske alla kan det, vad vet jag, och då är det ju ett lätt sätt.

Länk till kommentar
Dela på andra webbplatser

Att göra det lätt är en god anledning. En fara kan dock vara om de som ändrar inte kan php utan råkar ta bort något tecken här eller där, då blir det problem. Då kan det vara säkrare att ändra texter via ett gränssnitt. Men nu kanske alla kan det, vad vet jag, och då är det ju ett lätt sätt.

 

Du kunde antingen göra en array som du laddar in, precis som det nämndes tidigare, dock en tvådimensionell sådan:

$text = Array(1 => Array("welcome_phrase"=>"Hej", "good_buy_msg"=>"Hejdå"),
2=>Array("welcome_phrase"=>"Hello", "good_buy_msg"=>"Good bye")
);

$lng = 1; //svenska
print $text[$lng]['welcome_phrase'];
$lng = 2; //engelska
print $text[$lng]['welcome_phrase'];

skicka med $_GET['lng'] och lägg det i varje skript (helst i header-filen eller ngn annan fil som laddas in på varje sida) i variablen $lng.

Eller så kan du skapa en funktion som hantera detta åt dig, utgående från den svenska ursprungsfrasen:

function t($txt, $lng) {
if ($lng==1) // svenska
return $txt;
else {
// kolla om den svenska ursprungsfrasen finns i databasen för vald språk
...
if ($found)
return $found['translated_field_from_table'];
else {
// lägg till översättningen i databasen
...
return "ÖVERSÄTT DETTA: $txt";
}
}

 

Så där i all hast.

 

/C

Länk till kommentar
Dela på andra webbplatser

jepp håller med:

 

textfiler är lätt att ändra för nästan alla som nämdes tidigare.

 

Använder du mysql så krävs kunskaper i php o mysql = inte många som kan vill eller orkar.

 

Jag är själv i samma situation i mitt projekt. Funderade på skapa kopior för det andra språket men som sagt blir många nya filer för varje nytt språk.

60filer * 4 språk = 240 filer. Tror jag skippar det ;)

Länk till kommentar
Dela på andra webbplatser

För språkhanteringingens del har jag ord och fraser i en språkfil, en fil per språk.

Vid längre artiklar och annat som dynamiskt skall hämtas, läggas till, ta bort, m m använder jag en databas.

 

För sökmotorsindexeringens del är det av vikt att sidor med olika innehåll (även ifall det är samma innehåll med olika språk) har unika urler.

Gärna med olika katalog eller filnamn. Kan också särskiljas med querystring, men jag föredrar de två förstnämnda.

Det kan vara samma filer som arbetar, men man använder mod_rewrite för att justera detta.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...