Thomas Rokamp skrev:
>
> Jeg er i gang med et site, der kører i PHP, og hvor jeg skal vise
> specielle tegn (udenlandske bogstaver) i HTML.
>
> Hvordan er det smartest at gemme tekster, hvis de skal vises i HTML via
> PHP? Skal jeg skrive teksterne i kodet form i php-scripts eller direkte i
> HTML?
>
> Jeg har set eksempler på sites, hvor man gemmer hver sætning på en plads i
> et array, og kalder det frem på siden. Det er vel hovedsageligt for at
> lave en form for sprog-styrring, så man kan bruge samme logik til flere
> forskellige sprog. Men er denne metode hurtig eller kræver den mange
> ressourcer, frem for at gemme tekst direkte i HTML?
Den måde, jeg har lavet eksempelvis findhim.com på, er dels at bruge
Unicode-tegnsættet UTF-8 hele vejen igennem og dels at bruge gettext til
oversættelserne.
Fordelen ved at bruge UTF-8 overalt på sitet er, at brugere, der skriver
noget på sitet, kan bruge alle slags tegn, f.eks. kinesiske, kyrilliske
eller hvad ved jeg. Man kan også have f.eks. kinesisk tekst og dansk tekst
med Æ, Ø, Å på samme side. Dén slags er ikke muligt, hvis man sætter
tegnsættet til at være et specifikt kinesisk som GB2312 eller et specifikt
vestligt som ISO-8859-1.
Og hvad er så ulempen? Ja, der er egentlig ikke de store ulemper (hvilket
også er grunden til, at jeg bruger UTF-8 på stort set alt, hvad jeg laver)
- men i starten skal man lære sig nogle nye vaner, og derfor kan det godt
være lidt besværligt. Jeg har lidt for mange tømmermænd til at komme ind på
de tekniske detaljer, men kan bare sige, at man skal sørge for, at man
bruger nogle værktøjer, der er parat til Unicode. Dvs., at man skal sørge
for følgende:
1. De strengfunktioner, man bruger, skal være parat til Unicode. ECMAScript
er som udgangspunkt parat til Unicode, men PHP er ikke, så dér skal man
sørge for at bruge multibyte-strengfunktionerne
(
http://dk.php.net/mbstring). Dog kan man vha. PHP-indstillingen
mbstring.func_overload gøre sådan, at man kan fortsætte med at bruge de
normale strengfunktioner, og så "oversætter" PHP automatisk - dvs., hvis
man f.eks. skriver substr($tekst, 10) i sin kode, så er det i virkeligheden
funktionen mb_substr($tekst, 10), der bliver kaldt.
2. Ens database (hvis man bruger sådan en), skal være parat til Unicode.
PostgreSQL har virkelig godt understøttelse for Unicode, og MySQL er ved at
komme efter det. Tjek dokumentationen.
3. Man skal sørge for at gemme ens filer i UTF-8 i stedet for ISO-8859-1. I
den editor, jeg bruger (Kate) kan man vælge hvilket tegnsæt, filen skal
gemmes med, når man gemmer. Dvs., man skriver bare filen med Æ, Ø, Å eller
hvad man nu ellers har lyst til, og sørger så for at gemme filen i UTF-8.
Tjek, at din editor kan gemme i UTF-8.
4. Man skal selvfølgelig angive korrekt tegnsæt på sine sider.
Det lyder alt sammen lidt besværligt, men når man først har gjort
ovenstående til en vane, går det som en leg.
Mht. gettext (
http://dk.php.net/gettext): gettext er samling af
programmer/værktøjer, der hjælper én til at lave sit program (webside,
skrivebordsprogram, kommandolinjeprogram, whatever) flersproget. I sin
PHP-kode skriver man f.eks.
echo _("Hi, how are you?");
Bemærk understregen - dén er simpelthen funktionsnavnet (eller rettere, den
er et alias til gettext()-funktionen). Man har så nogle sprogfiler, og hvis
brugeren så har valgt f.eks. dansk som sprog, så kommer der til at stå
"Hej, hvordan går det?" på siden. Hvis man har lavet nogle nye tekster på
et program og ikke har fået dem oversat endnu til et bestemt sprog, så får
brugeren bare de nye tekster på det sprog, de står i i selve filen, altså
"standardsproget", om man vil - og derfor vælger man som regel at skrive
teksterne på engelsk i selve PHP-filen og så have en dansk oversættelse i
en sprogfil.
gettext bruger binære filer, som i et webmiljø indlæses i webserverens
hukommelse ved start af serverprogrammet. Derfor er det lynhurtigt.
gettext har ét problem, og det er, at det pga. meget sparsomme
fejlmeddelelser er svært at komme i gang med. Når man først får lært det,
er det dog et glimrende redskab - så spørg her i gruppen, hvis ikke du kan
finde ud af det.
--
- Jonas Koch Bentzen
http://understroem.dk/
http://findhim.com/