/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
multi sprog
Fra : Jan Poulsen


Dato : 31-05-03 13:47

Hej NG,

Er der nogen der kan guide mig til hvordan
man laver en side, hvor man kan vælge flere
sprog?

Jeg har tænkt i den retning at der skal laves
nogle filer med teksten på forskellige
sprog, altså en dansk.inc, engelsk.inc osv.

Det er så bare hvordan man lettest bygger
sådan noget op.

/jan



 
 
Johan Holst Nielsen (31-05-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 31-05-03 13:58

Jan Poulsen wrote:
> Er der nogen der kan guide mig til hvordan
> man laver en side, hvor man kan vælge flere
> sprog?
>
> Jeg har tænkt i den retning at der skal laves
> nogle filer med teksten på forskellige
> sprog, altså en dansk.inc, engelsk.inc osv.
>
> Det er så bare hvordan man lettest bygger
> sådan noget op.

Nem enkelt måde er at f.eks. lade brugeren vælge sprog, smed en session
hvor brugeren sprogvalg er i...

<?php
session_start();
if(isset($_SESSION['language']) &&
file_exists('./language/'.$_SESSION['language'].'.inc')) {
include('./language/'.$_SESSION['language'].'.inc');
}
else {
   //Include default language
   include('./language/engelsk.inc');
}
?>

Eventuelt kunne det krydes med forsøg på automatisk detect af brugerens
sprog - eventuelt via browserens settings eller via
http://ip-to-country.com/tools/ :)

mvh
Johan


Jan Poulsen (31-05-2003)
Kommentar
Fra : Jan Poulsen


Dato : 31-05-03 14:51

> Nem enkelt måde er at f.eks. lade brugeren vælge sprog, smed en session
> hvor brugeren sprogvalg er i...
>
> <?php
> session_start();
> if(isset($_SESSION['language']) &&
> file_exists('./language/'.$_SESSION['language'].'.inc')) {
> include('./language/'.$_SESSION['language'].'.inc');
> }
> else {
> //Include default language
> include('./language/engelsk.inc');
> }
> ?>
>
> Eventuelt kunne det krydes med forsøg på automatisk detect af brugerens
> sprog - eventuelt via browserens settings eller via
> http://ip-to-country.com/tools/ :)

ok, tak for det.. og mange tak for linket, sådan noget har jeg tit
manglet, også til min statestik...

Jeg er nu mest i tvivl om hvordan man opbygger
sådan sprogfiler op og bruger dem...

Er det noget med at den tekst man skriver i sprogfilerne skal have et ID?
Evt. opbygget som kommasepareret fil?
F.eks. hvis ID 1 er den tekst man bruger på ens index.php,
så læser man bare ID1 fra sin sprogfil ind i en variable og så
udskriver den (echo $tekst) der hvor teksten skal placeres...
Er det sådan og kan man overhovedet det fra en text-fil,
altså gå ind og hente et bestemt ID?

/jan



Johan Holst Nielsen (31-05-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 31-05-03 15:03



Jan Poulsen wrote:
> ok, tak for det.. og mange tak for linket, sådan noget har jeg tit
> manglet, også til min statestik...

:) Det er rigtig godt :) Bruger det også selv... kan ikke klage over det ;)

> Jeg er nu mest i tvivl om hvordan man opbygger
> sådan sprogfiler op og bruger dem...

Okay, sorry hvis jeg misforstod det..


> Er det noget med at den tekst man skriver i sprogfilerne skal have et ID?
> Evt. opbygget som kommasepareret fil?
> F.eks. hvis ID 1 er den tekst man bruger på ens index.php,
> så læser man bare ID1 fra sin sprogfil ind i en variable og så
> udskriver den (echo $tekst) der hvor teksten skal placeres...
> Er det sådan og kan man overhovedet det fra en text-fil,
> altså gå ind og hente et bestemt ID?

Well, reelt er der 2 måder at gøre det på... f.eks. kunne du tage et kig
i Opera's sprogfil? (Hvis du har den installere - de bruger bare en
flat-file sprogfil).

Reelt ville jeg nok ikke lave en variabel for dem alle - men det er
reelt op til dig...

2 måder som du kunne lave det på...
1. Array/variabler
2. Konstanter...

Lige et eksempel på begge..

<?php
/*
Sprogfil Dansk
Eksempel Array
Filnavn: da.lang.inc
*/
$LANG = array();
$LANG['closeWindow'] = 'Luk vinduet';
$LANG['printPage'] = 'Print siden';
...
...
?>

<?php
include('da.lang.inc');
<input type="button" onclick="window.close();"
value="<?=$LANG[closeWindow]?>">
?>

Og lige med konstanter (http://php.net/constants)
<?php
/*
Sprofil dansk
Eksempel constant
Filnavn: da.lang.inc
*/
define('closeWindow', 'Luk vinduet');
define('printPage', 'Print siden');
?>

<?php
include('da.lang.inc');
<input type="button" onclick="window.close();" value="<?=closeWindow?>">
?>

Ved ikke om der er nogle der vil tale for eller imod constants i
sprogfiler? Var faktisk ikke meget erfaring med det :)

mvh
Johan


Jan Poulsen (31-05-2003)
Kommentar
Fra : Jan Poulsen


Dato : 31-05-03 15:24

> 2 måder som du kunne lave det på...
> 1. Array/variabler
> 2. Konstanter...
>
> Lige et eksempel på begge..
>
> <?php
> /*
> Sprogfil Dansk
> Eksempel Array
> Filnavn: da.lang.inc
> */
> $LANG = array();
> $LANG['closeWindow'] = 'Luk vinduet';
> $LANG['printPage'] = 'Print siden';
> ..
> ..
> ?>
>
> <?php
> include('da.lang.inc');
> <input type="button" onclick="window.close();"
> value="<?=$LANG[closeWindow]?>">
> ?>
>
> Og lige med konstanter (http://php.net/constants)
> <?php
> /*
> Sprofil dansk
> Eksempel constant
> Filnavn: da.lang.inc
> */
> define('closeWindow', 'Luk vinduet');
> define('printPage', 'Print siden');
> ?>
>
> <?php
> include('da.lang.inc');
> <input type="button" onclick="window.close();" value="<?=closeWindow?>">
> ?>
>
> Ved ikke om der er nogle der vil tale for eller imod constants i
> sprogfiler? Var faktisk ikke meget erfaring med det :)

Kanon!

Mange tak for hjælpen, det ser jo ganske simpelt ud...
Nu vil jeg så se om jeg kan få det til at virke...

/jan



Jan Poulsen (31-05-2003)
Kommentar
Fra : Jan Poulsen


Dato : 31-05-03 19:58

> > Eventuelt kunne det krydes med forsøg på automatisk detect af brugerens
> > sprog - eventuelt via browserens settings eller via
> > http://ip-to-country.com/tools/ :)

Ang. dette fine stykke værktøj, så har du vel ikke et sql-dump over
ip'er og lande, for jeg kan simpelhen ikke få den kommasepareretfil
rigtigt ind i min mysql. Efter import mangler alle værdierne i IP_FROM :(

/jan



Johan Holst Nielsen (31-05-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 31-05-03 21:40



Jan Poulsen wrote:
>>>Eventuelt kunne det krydes med forsøg på automatisk detect af brugerens
>>>sprog - eventuelt via browserens settings eller via
>>>http://ip-to-country.com/tools/ :)
>>
> Ang. dette fine stykke værktøj, så har du vel ikke et sql-dump over
> ip'er og lande, for jeg kan simpelhen ikke få den kommasepareretfil
> rigtigt ind i min mysql. Efter import mangler alle værdierne i IP_FROM :(

http://linuxmagasin.dk/ip2country/

Jeg vil forsøge at update den hver måned ;)

mvh
Johan


Jan Poulsen (01-06-2003)
Kommentar
Fra : Jan Poulsen


Dato : 01-06-03 10:05


"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3ED9133B.8090300@weknowthewayout.com...
>
>
> Jan Poulsen wrote:
> >>>Eventuelt kunne det krydes med forsøg på automatisk detect af brugerens
> >>>sprog - eventuelt via browserens settings eller via
> >>>http://ip-to-country.com/tools/ :)
> >>
> > Ang. dette fine stykke værktøj, så har du vel ikke et sql-dump over
> > ip'er og lande, for jeg kan simpelhen ikke få den kommasepareretfil
> > rigtigt ind i min mysql. Efter import mangler alle værdierne i IP_FROM
:(
>
> http://linuxmagasin.dk/ip2country/
>
> Jeg vil forsøge at update den hver måned ;)
>
> mvh
> Johan
>

Mange tak for det.
Så køre min stat endelig med landekoder...


hilsen
jan



Lars Dybdahl (31-05-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 31-05-03 15:31

Jan Poulsen wrote:
> Er der nogen der kan guide mig til hvordan
> man laver en side, hvor man kan vælge flere
> sprog?

Du kan bruge gettext funktionaliteten i php, det gør jeg f.eks. på
http://dybdahl.dk/. Denne side er på dansk eller engelsk, afhængigt af,
hvad brugerens browser er indstillet til. Et andet eksempel er
http://dybdahl.dk/dxgettext/, som virker på samme måde.

Det gode ved gettext funktionerne er, at man kan lave om i websiderne, og at
ændringerne så umiddelbart er tilstede i alle oversættelser. Hvis der ikke
findes en oversættelse for en tekst, bruges den engelske i stedet.

Jeg bruger følgende funktion til at sætte sproget i starten af hver side:

function setgettextlocale() {
global $gtlocale;
$gtlocale="C";
if (!isset($_COOKIE["english"])) {
$s=array("da","en");
$langs=explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
reset ($langs);
while (list($key,$value)=each($langs)) {
$cur=explode(";",$value);
$first=substr($cur[0],0,2);
if (in_array($first,$s)) {
$gtlocale=$first;
break;
}
}
}
SetLocale (LC_ALL, $gtlocale);
putenv ("LANG=".$gtlocale);
}

Her bruges cookien til at gøre det muligt for brugeren at vælge, om man vil
se den danske eller den engelske. Kildekoden for en side, der er oversat,
ser du her:

http://dybdahl.dk/dxgettext/translations/index.phps

Her er det funktionen _(""), der oversætter fra engelsk til dansk.

Hilsen,

Lars.

--
Freelance programmør
Programmering mod timebetaling

Johan Holst Nielsen (31-05-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 31-05-03 15:57



Lars Dybdahl wrote:
> Jan Poulsen wrote:
>
>>Er der nogen der kan guide mig til hvordan
>>man laver en side, hvor man kan vælge flere
>>sprog?
>
> Det gode ved gettext funktionerne er, at man kan lave om i websiderne, og at
> ændringerne så umiddelbart er tilstede i alle oversættelser. Hvis der ikke
> findes en oversættelse for en tekst, bruges den engelske i stedet.

Det negative er at de ikke er standard i php :(
Er der nogle der har styr på hvor mange webhostere der egentlig udbyder
gettext? Ved egentlig ikke hvor almindelig det er :)

mvh
Johan


Jan Poulsen (31-05-2003)
Kommentar
Fra : Jan Poulsen


Dato : 31-05-03 19:54

> Du kan bruge gettext funktionaliteten i php, det gør jeg f.eks. på
> http://dybdahl.dk/. Denne side er på dansk eller engelsk, afhængigt af,
> hvad brugerens browser er indstillet til. Et andet eksempel er
> http://dybdahl.dk/dxgettext/, som virker på samme måde.
>
> Det gode ved gettext funktionerne er, at man kan lave om i websiderne, og
at
> ændringerne så umiddelbart er tilstede i alle oversættelser. Hvis der ikke
> findes en oversættelse for en tekst, bruges den engelske i stedet.

Jeg kan godt køre med gettext, men nu har jeg et par timer været rundt
på nette for at finde guider til hvordan, og her da også fundet en,
men det er noget advanceret og jeg er ikke helt med på det hele...
Se f.eks. denne guide http://www.onlamp.com/pub/a/php/2002/06/13/php.html

Det hele er jeg med på ind til der skal laves en .po fil med commandoen '$
xgettext -n *.php'
Hvor køre man den kommando ?


/jan



Lars Dybdahl (01-06-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 01-06-03 07:58

Jan Poulsen wrote:
> Jeg kan godt køre med gettext, men nu har jeg et par timer været rundt
> på nette for at finde guider til hvordan, og her da også fundet en,

GNU gettext har tre vigtige filtyper:

fil.pot - en tom fil, der indeholder de tekster, der skal oversættes
fil.po - en fil.pot, hvor oversættelserne er sat ind med f.eks. notepad
fil.mo - en kompileret udgave, som php-websiderne bruger til at oversætte

Den første fil, fil.pot, kan man enten skrive i hånden eller få produceret
med xgettext programmet. Den har samme format som fil.po, bortset fra, at
oversættelserne mangler, og her er et udsnit af sådan en fil:

msgid ""
msgstr "Project-Id-Version: Delphi 7 RTL\n"
"POT-Creation-Date: 2003-03-02 18:54\n"
"PO-Revision-Date: 2003-03-18 17:07+0100\n"
"Last-Translator: Lars B. Dybdahl <lars@dybdahl.dk>\n"
"Language-Team: Dansk <da@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Programmer's name for it: SInvalidCreateWidget
#: Clx/QConsts.pas:30
msgid "Class %s could not create QT widget"
msgstr "Klasse %s kunne ikke oprette QT widget"

#. Programmer's name for it: STooManyMessageBoxButtons
#: Clx/QConsts.pas:31
msgid "Too many buttons specified for message box"
msgstr "For mange knapper specificeret til meddelelsesboks"

Princippet er ret enkelt, som det kan ses. Når man har fået lavet sin fil.po
fil, kan man generere en fil.mo med kommandoen "msgfmt -o fil.mo fil.po".

Inde i sin webside skal man så:

1) Bruge bindtextdomain for at angive, hvor oversættelsen ligger. Som domain
navn bruger man navnet på fil.mo, dog uden .mo filendelsen. Hvis man i
bindtextdomain angiver "/min/mappe/", så skal oversættelsesfilen fil.mo
ligge i /min/mappe/da/LC_MESSAGES/". da betyder her dansk. Andre landekoder
kan ses her: http://www.loc.gov/standards/iso639-2/langcodes.html
2) Bruge textdomain for at angive det domain, man brugte i bindtextdomain.
Igen er det filnavnet uden filendelse (og uden sti).
3) Herefter kan man så oversætte med _("This is a test") overalt i sit php
script.

Man skal dog huske, at apache holder php i hukommelsen, og php holder GNU
gettext i hukommelsen, og GNU gettext holder oversættelsesfilen i
hukommelsen for at have optimal performance. Derfor skal man lige genstarte
webserveren hvis man udskifter .mo filerne med en ny udgave. En alternativ
løsning, hvis man ikke kan genstarte webserveren, er at bruge et tal på sit
domain navn, så oversættelserne hedder fil1.mo, fil2.mo, fil3.mo osv.

Der er mange fiduser i at bruge GNU gettext:

1) Oversætteren skal ikke kunne html-kodning eller php kodning.
2) Oversættelse kræver intet andet end notepad.
3) Man kan lave om på websiden og det virker stadigvæk, uden at oversætteren
skal involveres.
4) Man kan meget, meget nemt administrere det, også selv om man skulle have
oversættelser af hjemmesiden til 20 sprog.

Der er flere fiduser på http://dybdahl.dk/dxgettext/, og hvis man kører
Windows, kan man hente Windows udgaver af ovenstående programmer, dvs.
xgettext.exe, msgfmt.exe osv. ved at installere denne:

http://prdownloads.sourceforge.net/dxgettext/dxgettext-1.0.1.exe?download

Her kan man også se lidt vejledninger, som med dette usenet indlæg i hånden
burde give et ret godt overblik.

Hvis man vil have et godt værktøj til at redigere .po filer med, og som
kører på Windows, så kan jeg anbefale poEdit:

http://poedit.sourceforge.net/download.php

Dette oversættelsessystem bruges i øvrigt mange steder, bl.a.
http://www.debian.org/.

Hilsen,

Lars.

--
Freelance programmør
Programmering mod timebetaling

Jan Poulsen (01-06-2003)
Kommentar
Fra : Jan Poulsen


Dato : 01-06-03 10:07

Tak for en meget omfattende vejledning til gettext,
nu har jeg da noget at arbejde med.

Hilsen
jan



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408936
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste