/ 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
Flere sprog...
Fra : Frank


Dato : 07-10-08 00:33

Hejsa,

Jeg skal til at lave understøttelse af flere sprog. Indtil nu har
alle tekster været opbevaret i en række .inc files, som indlæses
når der er brug for det. Jeg er lidt usikker på om min ide er god
nok og om det eventuelt bliver for langsomt!

Mit system består af en række php programmer, som hver genererer
en eller flere ihtml files. Disse indeholder mine konstanter, -
{xxxxx}, som skal trækkes ud.

For at komme igang vil jeg først indlæse alle php programmer fra
en given path. (Det har jeg ikke lige styr på!) Jeg skal kunne
afvikle dette program igen og igen for at fange eventuelle nye
programmer og opdateringer. Når nu programmerne er på plads skal
jeg scanne hver enkelt og finde ihtml-file og konstanter, som
skal ned ned i databasen.

Lige nu planlægger jeg at oprette en table i min mysql database,
som ser nogenlunde sådan her ud:

   id, language, php_file, key, text....
   
Well, - det ser meget nemt ud! Men hvad nu hvis den samme "key"
anvendes i flere "php_files"?

På forhånd tak

Frank

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Lakridserne (07-10-2008)
Kommentar
Fra : Lakridserne


Dato : 07-10-08 01:41

On 7 Okt., 01:32, Frank <fr...@neergaard.dk> wrote:
> Hejsa,
>
> Jeg skal til at lave understøttelse af flere sprog. Indtil nu har
> alle tekster været opbevaret i en række .inc files, som indlæses
> når der er brug for det. Jeg er lidt usikker på om min ide er god
> nok og om det eventuelt bliver for langsomt!
>
> Mit system består af en række php programmer, som hver genererer
> en eller flere ihtml files. Disse indeholder mine konstanter, -
> {xxxxx}, som skal trækkes ud.
>
> For at komme igang vil jeg først indlæse alle php programmer fra
> en given path. (Det har jeg ikke lige styr på!) Jeg skal kunne
> afvikle dette program igen og igen for at fange eventuelle nye
> programmer og opdateringer. Når nu programmerne er på plads skal
> jeg scanne hver enkelt og finde ihtml-file og konstanter, som
> skal ned ned i databasen.
>
> Lige nu planlægger jeg at oprette en table i min mysql database,
> som ser nogenlunde sådan her ud:
>
>         id, language, php_file, key, text....
>
> Well, - det ser meget nemt ud! Men hvad nu hvis den samme "key"
> anvendes i flere "php_files"?
>
> På forhånd tak
>
> Frank
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
>  - Pædagogiske tutorials på dansk
>  - Kom godt i gang med koderne
> KLIK HER! =>http://www.html.dk/tutorials

Behøver du at knytte en post i db'en til en bestemt fil? Hvis du
skulle bruge samme key i forskellige filer?

Ellers forstår jeg ikke helt dit spørgsmål.

Lakridserne

Frank (07-10-2008)
Kommentar
Fra : Frank


Dato : 07-10-08 09:29

Lakridserne wrote in dk.edb.internet.webdesign.serverside.php:

> Behøver du at knytte en post i db'en til en bestemt fil? Hvis du
> skulle bruge samme key i forskellige filer?
>
> Ellers forstår jeg ikke helt dit spørgsmål.
>
> Lakridserne


En given tekst kan jo anvendes i mange programmer og jeg der er ingen
grund til at vedligeholde den samme tekst flere gange.

Min ide er at lave en query, der indlæser alle entries til hver enkel
php-file.

Frank



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Kasper Johansen (07-10-2008)
Kommentar
Fra : Kasper Johansen


Dato : 07-10-08 08:54

Hej Frank


Frank wrote:
> Jeg skal til at lave understøttelse af flere sprog. Indtil nu har
> alle tekster været opbevaret i en række .inc files, som indlæses
> når der er brug for det. Jeg er lidt usikker på om min ide er god
> nok og om det eventuelt bliver for langsomt!
>
> Mit system består af en række php programmer, som hver genererer
> en eller flere ihtml files. Disse indeholder mine konstanter, -
> {xxxxx}, som skal trækkes ud.
>
> For at komme igang vil jeg først indlæse alle php programmer fra
> en given path. (Det har jeg ikke lige styr på!) Jeg skal kunne
> afvikle dette program igen og igen for at fange eventuelle nye
> programmer og opdateringer. Når nu programmerne er på plads skal
> jeg scanne hver enkelt og finde ihtml-file og konstanter, som
> skal ned ned i databasen.
>
> Lige nu planlægger jeg at oprette en table i min mysql database,
> som ser nogenlunde sådan her ud:
>
>    id, language, php_file, key, text....
>    
> Well, - det ser meget nemt ud! Men hvad nu hvis den samme "key"
> anvendes i flere "php_files"?

Har du prøvet at kigge på locales? Det bruges til at oversætte rigtig
mange websites, og der er utallige hjælpeprogrammer og lignende til det.
PHP har både dens egen locales-extension, og yderligere hvis du ikke har
adgang til den, så findes der også rene PHP frameworks (altså PHP-kode
du include'r) til at sætte det op.

Jeg kan blandt andet anbefale programmet POEdit, som kan bruges til at
oversætte dit site. Du kan også give programmet til folk der ikke kan
kode, så de kan oversætte forholdsvis simpelt.



--
Med venlig hilsen
Kasper Johansen

Frank (07-10-2008)
Kommentar
Fra : Frank


Dato : 07-10-08 09:37

Kasper Johansen wrote in dk.edb.internet.webdesign.serverside.php:
>
> Har du prøvet at kigge på locales? Det bruges til at oversætte rigtig
> mange websites, og der er utallige hjælpeprogrammer og lignende til det.
> PHP har både dens egen locales-extension, og yderligere hvis du ikke har
> adgang til den, så findes der også rene PHP frameworks (altså PHP-kode
> du include'r) til at sætte det op.
>
> Jeg kan blandt andet anbefale programmet POEdit, som kan bruges til at
> oversætte dit site. Du kan også give programmet til folk der ikke kan
> kode, så de kan oversætte forholdsvis simpelt.
>
>
>
> --
> Med venlig hilsen
> Kasper Johansen

Well, så er det jo et helt andet projekt!! Jeg er nød til at bruge noget tid
på at sætte mig ind i det!!!!

Frank

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Thomas Lindgaard (07-10-2008)
Kommentar
Fra : Thomas Lindgaard


Dato : 07-10-08 13:24

Frank wrote:
> Well, så er det jo et helt andet projekt!! Jeg er nød til at bruge noget tid
> på at sætte mig ind i det!!!!
>
> Frank

Hej

Jeg må lige give min stemme til dette forslag. Dog kræver det nok lidt
yderligere forklaring...

Det Kasper hentyder til er 'gettext'. Gettext er en extension til PHP,
som skal enables i php.ini. Se http://uk.php.net/gettext.

Når det er gjort får man functionen gettext() - man kan også bruge _().
Funktion tager en streng som argument. Hvis denne streng kan slås op i
gettexts liste af kendte strenge for det nuværende locale, så skrives
denne oversættelse ud - eller skrives argumentet selv ud.

Jeg har følgende gettext.php, som inkluderes i alle mine filer.

gettext.php:
<?php
switch ($_SESSION['language'])
{
case 'en':
$locale = 'en_US';
break;

case 'dk':
default:
$locale = 'da_DK';
break;
}
$domain = 'messages';

setlocale(LC_ALL, $locale);
bindtextdomain($domain, "./locale");
textdomain($domain);
putenv("LANGUAGE=$locale");
?>

I filer der skal skrive output gør man så følgende:

index.php:
<?php
$_SESSION['language'] = 'dk';
require './gettext.php';
print _('Denne tekst skal oversættes.');
?>

Det kræver naturligvis noget, som gettext kan slå strenge op i. Dette
laves med f.eks. poEdit. Man laver et projekt og sætte path i poEdit
settings til at pege på sine PHP-scripts, og så klikker man på knappen
'Update catalog'. Derefter læser poEdit ens PHP-scripts og finder alle
forekomster af gettext() og _(), og så er det bare at gå igang med
oversættelses-tuschen.

Gettext bruger filerne .po og .mo. Fornavnet bestemmes af bindtextdomain
- i koden herover er $domain sat til 'messages'. Med poEdit laver man
derfor messages.po, som blot er en tekstfil med noget header-info og en
række strenge med en tilhørende oversættelse. poEdit kan oversætte denne
til en binær messages.mo, som er den der bruges af gettext.

Disse filer skal ligge i en biblioteksstruktur som følgende:

\
|
+-index.php
+-gettext.php
|
+-locale
|
+-da_DK
| |
| \-LC_MESSAGES
| |
| +-messages.po
| \-messages.mo
|
\-en_US
|
\-LC_MESSAGES
|
+-messages.po
\-messages.mo

Det tager lidt tid at sætte op, men når der virker, så vil man aldrig se
sig tilbage :)

Håber ikke det blev beskrevet mere besværligt, end det er...

--
/Thomas

Christian Hansen (07-10-2008)
Kommentar
Fra : Christian Hansen


Dato : 07-10-08 18:58

Thomas Lindgaard wrote:
>
> Det Kasper hentyder til er 'gettext'. Gettext er en extension til PHP,
> som skal enables i php.ini. Se http://uk.php.net/gettext.

Ja ikke bare en extension til php, men defacto standarden for, hvordan
man laver sprogversionering af i hvert fald det meste oss.

Phps implementering af gettext er dog problematisk. Bla. kræver det vist
en genstart af apache, hvergang man skal indlæse en ny sprogfil. Om det
stadig er sådan ved jeg ikke, men det var det dengang vi skulle til at
lave sprogversioneringer. Derfor endte det med, at vi lavede vores egen
implementation af gettext, for det er smart med de po-filer. Der findes
et hav af programmer, der gør oversættelse nemt, når man har sådan nogle.

Mvh Christian

--
Christian Hansen
http://www.resource-it.dk/

Thomas Lindgaard (08-10-2008)
Kommentar
Fra : Thomas Lindgaard


Dato : 08-10-08 13:56

Christian Hansen wrote:
> Phps implementering af gettext er dog problematisk. Bla. kræver det vist
> en genstart af apache, hvergang man skal indlæse en ny sprogfil.
> [SNIP]
> Mvh Christian

Jeg mindes ikke, at jeg havde problemer med at skulle genstarte Apache,
da jeg legede med gettext - men det er i hvert fald tilfældet på den
IIS, jeg kører på lige nu.

--
Mvh.
/Thomas


Christian Hansen (08-10-2008)
Kommentar
Fra : Christian Hansen


Dato : 08-10-08 19:36

Thomas Lindgaard wrote:
> Jeg mindes ikke, at jeg havde problemer med at skulle genstarte Apache,
> da jeg legede med gettext - men det er i hvert fald tilfældet på den
> IIS, jeg kører på lige nu.


Det var en apache 1.3 tror jeg nok - det er ikke sikkert at problemet
eksisterer i apache2 - men som sagt, så er det længe siden, at jeg sidst
rodede med det - måske man skulle give det et skud igen næsten gang, det
er relevant :)

--
Christian Hansen
http://www.resource-it.dk/

Frank (13-10-2008)
Kommentar
Fra : Frank


Dato : 13-10-08 10:58

Jeg synes, det er nemmest med min oprindelige ide. Jeg tror, jeg har
styr på det meste nu.

Tak for jeres bidrag...

Frank

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

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

Månedens bedste
Årets bedste
Sidste års bedste