Gå til innhold

PHP side med flere språk


Anbefalte innlegg

Hei!

 

Jeg skal lage et slags adminsystem i php. Det skal være et visst antall brukere på forskjellige nivå, og de skal kunne registrere/endre grupper og medlemmer etter hva de har tilgang til. Det skal også skrives ut rapporter og oversikter over det som er registrert.

 

Alt det der går greit å lage, problemet er at de vil ha det på flere språk. I utgangspunktet bare norsk og engelsk, men med mulighet til å utvide etter hvert.

 

Hvordan gjør jeg dette? Kan jo ikke lage en if-setning hver gang jeg skal skrive noe til skjerm med de forskjellige alternativene.... Nyheter/artikler osv. er greit, det kan lagres i database, men hva med slike tilfeller som "Det er en feil med registreringen din, du må huske å ha med adresse!". Hvordan kan jeg ta høyde for alle slike tilfeller som vil komme? Og også alle småting som "Tilbake" og "Prøv igjen" vil være veldig tungvindt å lagre i en database...

 

Noen som har noen tips?

 

Og en ting til jeg kom på. Er det noen som vet hvor bra php er på objektorientering? Hvis jeg oppretter et objekt på ei side, vil det huskes innad i en session? Eller må jeg sende det videre i $_SESSION variabelen...

 

Håper noen kan hjelpe meg med dette!

Lenke til kommentar
Videoannonse
Annonse

En annen, men mulig dårlig løsning, er å lage to tekstfiler: en.php og no.php. All tekst kan puttes inn i hver sin variabel.

 

F.eks:

 

no.php

$text_0001 = 'Neste side';

 

en.php

$text_0001 = 'Next page';

 

 

Så kan du bruke:

$lang = 'en';

include($lang.'.php');

print($text_0001);

Lenke til kommentar
Og hvis du har rundt 200 forskjellige variabler, hvordan skal man finne fram i dem? Tenk at du har en skrivefeil midt inni... Da må man lete lenge. Mye mer oversiktlig med array ;)

En måte du kan løse det på er f.eks. å sette inn // navn-på-phpfil.php

Da kan du enten søke etter filnavnet på filen hvor teksten du leter etter er, eller bla deg frem ;)

 

F.eks:

 

// registrering.php
$text_0001 = 'Send';
$text_0002 = 'Nullstill skjema';

// kontakt.php
$text_0003 = 'Kontakt meg';
$text_0004 = 'Send e-mail';

Lenke til kommentar

Ikke det at jeg har peiling, men cms'et mitt er satt opp slikt. Noe som gjør det veldig enkelt å finne fram og lage nye språkfiler.

 

define(_PROMPT_NEWPASSWORD, '(valgfri) Nytt passord');

define(_PROMPT_NEXT, 'Neste');

define(_PROMPT_NOTICE_BEGIN_DATE, 'Start dato');

define(_PROMPT_NOTICE_END_DATE, 'Start dato');

Lenke til kommentar
Ikke det at jeg har peiling, men cms'et mitt er satt opp slikt. Noe som gjør det veldig enkelt å finne fram og lage nye språkfiler.

 

define(_PROMPT_NEWPASSWORD, '(valgfri) Nytt passord');

define(_PROMPT_NEXT, 'Neste');

define(_PROMPT_NOTICE_BEGIN_DATE, 'Start dato');

define(_PROMPT_NOTICE_END_DATE, 'Start dato');

Dette er helt klart den beste måten å gjøre det på. Er bare å inkludere den filen som er for det språket.

 

Bruker selv det siste eksempelet i mitt blogg script.

Lenke til kommentar
Ikke det at jeg har peiling, men cms'et mitt er satt opp slikt. Noe som gjør det veldig enkelt å finne fram og lage nye språkfiler.

 

define(_PROMPT_NEWPASSWORD, '(valgfri) Nytt passord');

define(_PROMPT_NEXT, 'Neste');

define(_PROMPT_NOTICE_BEGIN_DATE, 'Start dato');

define(_PROMPT_NOTICE_END_DATE, 'Start dato');

hva er forskjellen på det der og på å ha variabler/array som forslått over? Blir det ikke bare at du setter inn feks _PROMÅT_NEWPASSWORD i php fila, og inkluderer den fila som har riktig språk? eller?

Lenke til kommentar

Hei!

 

Jeg skal lage et slags adminsystem i php. Det skal være et visst antall brukere på forskjellige nivå, og de skal kunne registrere/endre grupper og medlemmer etter hva de har tilgang til. Det skal også skrives ut rapporter og oversikter over det som er registrert.

 

Alt det der går greit å lage, problemet er at de vil ha det på flere språk. I utgangspunktet bare norsk og engelsk, men med mulighet til å utvide etter hvert.

 

Hvordan gjør jeg dette? Kan jo ikke lage en if-setning hver gang jeg skal skrive noe til skjerm med de forskjellige alternativene.... Nyheter/artikler osv. er greit, det kan lagres i database, men hva med slike tilfeller som "Det er en feil med registreringen din, du må huske å ha med adresse!". Hvordan kan jeg ta høyde for alle slike tilfeller som vil komme? Og også alle småting som "Tilbake" og "Prøv igjen" vil være veldig tungvindt å lagre i en database...

 

Noen som har noen tips?

Den vanligste måten er nevnt, nemlig å lage en språfil pr språk som inneholder defines, variabler eller et array med oversettinger. Det fungerer iofs fint, og om du skal bruke det så anbefaler jeg å bruke array, av den grunn at du kan ha en noenlunde logisk oppbygging:

$lang['errors']['notLoggedIn']

 

Det som ikke er nevt er gettext.

Det er nok den mest korrekte løsningen, og den beste. Det kan virke som det du skal skrive er litt over nybegynner-stadiet. Jeg har ikke hatt muligheten til å laget i18n med gettext selv enda, men du finner link til en tutorial fra ONLamp blant kommentarene som ser helt kurant ut.

 

Og en ting til jeg kom på. Er det noen som vet hvor bra php er på objektorientering? Hvis jeg oppretter et objekt på ei side, vil det huskes innad i en session? Eller må jeg sende det videre i $_SESSION variabelen...

 

Håper noen kan hjelpe meg med dette!

 

PHP husker ingen verdens ting, når en side er ferdiglastet så er php-prosessen død og begravet.

Det vil si at du må eksplisitt lagre objekter til sesjonsvariabler før skriptet er ferdig.

$_SESSION['object'] = serialize($object);
$object = unserialize($_SESSION['object']);

 

OOP-støtten i PHP 4 er helt ok, men ikke noe å hoppe i taket over. Den støtter det mest nødvendige.

I PHP 5 er den forbedret en del.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...