Avatar billede gregblach Nybegynder
18. december 2004 - 21:46 Der er 18 kommentarer og
1 løsning

Site skal vises på forskellige sprog. Løsningsmodel?

Hej Eksperter,

Her kommer lige et længere indlæg fra en newbie med udsigt til et ambitiøst projekt:

Jeg lander sandsynligvis mit første større hjemmeside projekt inden så frygteligt længe, og ambitionsniveauet er sat højt. ;o)

Det er en side for et firma der handler med kunder i mange lande verden over, og der vil derfor være behov for at få vist siden på adskillige sprog. Det vil blive en omfattende side med en del tekst og produktdetaljer med tilhørende billeder, så jeg overvejer kraftigt at basere systemet på PHP/MySQL (naturligvis!!!) og bygge et "admin" interface, hvor kunden selv kan rette i teksterne, skrive nyheder ind, m.m.

Min tanke er at bygge et grundskelet op for hver enkelt side (så skal jeg kun lave siderne én gang), som kalder data fra MySQL, baseret på hvilket sprog brugeren har valgt på index siden. Én måde at få dette til at lykkes på er vel at overføre en session fra index siden med en sprog angivelse, eksempelvis DK, DE, US, UK, AU, SE, som bruges til at kalde aktuel tekst frem på efterfølgende sider?

Hvis andre har lavet et lignende system, eller har et forslag til hvordan dette burde laves istedet, hører jeg meget gerne fra jer. Det ville være rart med en masse gode råd, inden jeg kaster mig ud i dette, for mig, temmeligt store projekt. ;o)

Jeg vil desuden meget gerne bede om lidt kodestumper på hvordan en ægte Ekspert ville designe sessionsdelen af indexsiden, samt kalde sprogangivelsen på efterfølgende sider, hvis mit eget forslag skulle realiseres.

Hvis i har bedre forslag, ville det nok også øge min forståelse, hvis i ville smide lidt kodestumper/forklaringer med.

På forhånd tak for jeres tid. ;o)

/Greg
Avatar billede morteeart Nybegynder
18. december 2004 - 22:04 #1
ville enig meget simpelt lave en:

$_SESSION['sprog'] som så indeholder sproget..
og så f.eks.


$side = $_GET['side'];
@include($_SESSION['sprog'].$side.".php");

hvis du så f.eks. skriveR:  /?side=nyheder
så vil den hente

da_nyheder.php hvis $_SESSION['sprog'] = 'da'
Avatar billede bufferzone Praktikant
18. december 2004 - 22:10 #2
Hvis derer tale om et forretningssite, hvor det er vigtigt at kunderne kan finde de forskellige sites i deres respektive landes søgemaskiner, er det klart bedst at lave løsningen som separate sites, derer hostet i hvert enkelt land, med det rigtige sptog og den rigtige extention.

De nationale søgemaskiner optager oftest nationale sites, hvis du f.eks. vil optages i www.fireball.de der er en at de rigtig store i tyskland, er det langt lettest hvis hele sitet er tysksproget og ligger med en .de extention på et tysk webhotel.

Den dynamiske php løsning er lettest, men i forhold til søgemaskinerne er det meget mere effektivt at lave en low tech løsning med separate sites i hvert land
Avatar billede baitianlong Nybegynder
18. december 2004 - 22:12 #3
Jeg har lavet noget lign. hvor en side og tilhørende CMS skulle virke på dansk og polsk. Jeg lavede nogle sjove små funktioner, der fyldte tekst i formularer og knapper osv, således:

function fetchSignupContents($language) {
    $plcontents = array("heading"=>"Chcę dostawać wiadomości", "name"=>"Imię i nazwisko", "email"=>"E-mail", "org"=>"Organizacja", "sector"=>"Sekcja", "send"=>"Wyślij", "reset"=>"Wyczyść");
    $dkcontents = array("heading"=>"Tilmeld nyhedsbreve", "name"=>"For- og efternavn", "email"=>"E-mail", "org"=>"Organisation", "sector"=>"Sector", "send"=>"Tilmeld", "reset"=>"Nulstil");
    if($language == "dk") return $dkcontents;
    elseif($language == "pl") return $plcontents;
}

function fetchSignupErrors($language) {
    $plerrors = array("nosector"=>"Wpisz sekcja", "noorg"=>"Wpisz organizacja", "noemail"=>"Wpisz e-mail", "noname"=>"Wpisz imię i nazwisko");
    $dkerrors = array("nosector"=>"Udfyld venligst navn", "noorg"=>"Udfyld venligst organisation", "noemail"=>"Udfyld venligst e-mail", "noname"=>"Udfyld venligst navn");
    if($language == "dk") return $dkerrors;
    elseif($language == "pl") return $plerrors;
}

Og på siden hvor det skulle vises:

$contents = fetchSignupContents($language);
$errors = fetchSignupErrors($language);
...
if(isset($_GET['funktion']) && $_GET['funktion'] == "signup") {
    if(!isset($_POST['sendsector']) || $_POST['sendsector'] == "") $melding = $errors['nosector'];
    else $sendsector = $_POST['sendsector'];
    if(!isset($_POST['sendorg']) || $_POST['sendorg'] == "") $melding = $errors['noorg'];
    else $sendorg = $_POST['sendorg'];
...

<td align="center" class="lille"><?= $contents['name']  ?></td>
<td align="left"><input type="text" name="sendname" size="40" maxlength="40" value="<?= $sendname ?>"></td>
</tr>
<tr>
<td align="center" class="lille"><?= $contents['email'] ?></td>
<td align="left"><input type="text" name="sendemail" size="40" maxlength="40" value="<?= $sendemail ?>"></td>
</tr>
...

udpluk af en side/form hvor de så blev brugt :)

Håber du kan bruge det til noget :)
Avatar billede gregblach Nybegynder
18. december 2004 - 22:17 #4
morteart > Lad os sige at siden skulle dække 16 forskellige sprog, og på hvert sprog skulle der laves op mod 50 sider. Ville din løsning så ikke betyde 16x50 sider?

Mit forslag var, at de 50 sider "kun" skulle laves én gang, men at en session angav hvilket sprog (data fra MySQL) der skulle præsenteres for brugeren. Giver det mening?
Avatar billede coderdk Praktikant
18. december 2004 - 22:19 #5
Inddel dine "sprogting" i grupper, hvis du f.eks. har et bookingsystem, så lav en gruppe der hedder "Booking", i denne gruppe har du så alle de strenge der hører til den del. Nu kan der nemt laves et interface. Strengene kan have et "nøgleord", så hvis du f.eks. har en tekst "Se ledige mødelokaler" f.eks., kunne nøgleordet være "availrooms" eller lignende.
Nu er det rimeligt nemt at lave en god backend, og så skal der bare laves noget pænt til front-end, f.eks. en klasse der kan instantieres således:

$l = new LangModule( "Bookings" );

og når du skal bruge noget tekst:

<a href="availroom_list.php"><?= $l->get( "availrooms" ) ?></a>

Hvis du så har et testmiljø, og et driftsmiljø kan du lade testmiljøet udskrive {availrooms} der hvor der ikke kunne findes en oversættelse (og evt. en tom streng på produktionsmiljøet)...

Det har jeg set et par steder, så den fungerer godt ;)
Avatar billede morteeart Nybegynder
18. december 2004 - 22:21 #6
gregblach:

jo, men hvis du henter data ud fra en database, så gør det på samme måde, bare med

$sprog = $_SESSION['sprog'];
mysql_query("SELECT * FROM indholdstabellen WHERE sprog='$sprog' ");

men hvis du vil undgå database snak, så skal der jo flere filer til.
Avatar billede gregblach Nybegynder
18. december 2004 - 22:24 #7
Tilføjelse: ...sprogangivelsen ville så blive brugt som del af SQL kaldet for den "skabelonside" man så måtte klikke på.
Avatar billede coderdk Praktikant
18. december 2004 - 22:25 #8
Front-end-mæssigt, skal du jo vælge sprog på en måde. En god måde er at lade hovedsiden være en sprogvalgsside, og alle undersider kaldes så med:

http://example.dk/da_dk/side.php

Her er "da" så sproget - Du behøver ikke lave nogle underbiblioteker til dette, men en simpel .htaccess fil med en rewrite regel kan klare det hele for dig:

RewriteBase /
RewriteRule ^(da_dk|de_de|en_uk|en_us|en_au|se_se)/(.*) /$2?lang=$1 [QSA]

Nu vil alle sider der rent faktisk ligger i:

  http://example.dk/booking/side.php?var=3&test=5

Kunne kaldes med:

  http://example.dk/da_dk/booking/side.php?var=3&test=5

Som så, uden folk lægger mærke til det, bliver til:

  http://example.dk/booking/side.php?lang=da_dk&var=3&test=5

Smart ;)
Avatar billede gregblach Nybegynder
18. december 2004 - 22:29 #9
morteart > Det ligner præcis sådan noget jeg var ude efter. ;o)
Avatar billede gregblach Nybegynder
18. december 2004 - 22:35 #10
coderdk > Vældigt smart (og p.t. lidt over min forstand, men jeg må lige læse op på det så jeg er med). Vil denne løsning også kunne sættes op på et helt almindeligt webhotel?
Avatar billede morteeart Nybegynder
18. december 2004 - 22:47 #11
tjaa, coderdk's ting kaldes mod_rewrite , og virker derfor kun på apache servere med mod_rewrite enablet..

men det har 99% af alle webhoteller med php/sql også. :)
Avatar billede coderdk Praktikant
18. december 2004 - 22:55 #12
gregblach, Det kan klart anbefales, mod_rewrite kan bruges til mange sjove ting ;)
Som morteeart skriver, er det til apache, du kan læse om det her:
Apache 1.3.x: http://httpd.apache.org/docs/mod/mod_rewrite.html
Apache 2.x: http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html
Ikke at der er den store forskel på de to ;)
Nu skrev jeg "uden folk lægger mærke til det", folk kan rent faktisk ikke se det ;)
Avatar billede olebole Juniormester
19. december 2004 - 19:30 #13
<ole>

coderdk >> Hvis man alligevel har flået proppen af Apache, kan man vel ligeså godt lave en mere søgemaskine venlig rewrite - som det gøres her på Eksperten. De færreste søgemaskiner bryder sig om query-strenge  ;o)

/mvh
</bole>
Avatar billede coderdk Praktikant
19. december 2004 - 20:02 #14
olebole, lige præcist ;) Med små regler som:

RewriteRule ^spm/([0-9]+)$ /question.php?id=$1

:)
Avatar billede gregblach Nybegynder
19. december 2004 - 20:05 #15
Ved nærmere eftertanke får jeg vel et problem med min løsning, hvis jeg ønsker at angive en direkte URL til en bestemt underside, uden at brugeren har været igennem index siden får at få sat en session?

Eksempel:

Jeg sender URL'en www.example.com/details.php til en kunde. PHP har så ikke mulighed for at vide hvilke data der skal trækkes frem, idet kunden aldrig har sat en session. Det duer jo ikke...
Avatar billede coderdk Praktikant
19. december 2004 - 20:09 #16
gregblach, det undgår du med mod_rewrite, da du efter at have valgt sprog har URL'en:

  www.example.com/da_dk/details.php
Avatar billede gregblach Nybegynder
08. september 2005 - 11:23 #17
Jeg opdagede pludseligt at jeg vist aldrig har fået gjort mere ved denne sag, da projektet desvære ikke blev til noget. :o(

For i nu ikke skal have spildt jeres tid helt, så må i gerne skrive svar et hvis i vil have lidt point for jeres ulejlighed.

/Greg
Avatar billede coderdk Praktikant
08. september 2005 - 11:45 #18
Tjah, du får et svar hvis du synes jeg skal have noget :^)
Avatar billede gregblach Nybegynder
09. september 2005 - 13:24 #19
Selvf skal du da ha'. ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester