Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: i18n ei toimi

ZupaDupa [28.01.2007 14:14:30]

#

Yritän saada yksinkertaiselle sivustolle tuen monelle eri kielelle. Toteutan tämän käännöstiedostoilla, jotka ovat seuraavan tyyppisiä:

0;;teksti 0;#;
1;;teksti 1;#;
2;;teksti 2;#;
3;;teksti 3;#;

Eli ";#;" erottaa eri tekstiosiot ja ";;" tekstit ja niiden järjestysnumerot toisistaan. Seuraava funktio ladataan joka tiedoston alussa:

<?php
/* tähän tulee myöhemmin tarkistus, joka valitsee oikean kielen cookien, IP:n tai jonkin muun tiedon perusteella. testauksessa käytän vain englantia: */
$i18n_lang = "english";
$i18n_filename = "i18n/" . $i18n_lang . ".dat";
$i18n_file = fopen($i18n_filename, "r");
$i18n_data = fread($i18n_file, filesize( $i18n_filename ) );
fclose( $i18n_file );
$i18n_data = explode(";#;", $i18n_data);


function translation( $id ) {
    $text = "";
    $i = 0;

    while( $i < count($i18n_data) ) {
        $tmp = explode(";;", $i18n_data[$i]);
        if( $tmp[0] == $id ) {
            $text = $tmp[1];
            $i = count($i18n_data);
        }                                     // end if
        $i++;
    }                                      // end while
    return $text;
}                                       // end function

?>

Ja jokaisen tekstinpätkän sijasta sivuilla käytetään seuraavanlaista tekstin tulostustapaa:

<?php echo translation(1); ?>

Onglema tietenkin on jotta mikkään ei toimi :P huomaatteko jotain virhettä tai olisiko muita vinkkejä?

Antti Laaksonen [28.01.2007 14:42:24]

#

Kirjoita funktion alkuun:

global $i18n_data;

Funktion ulkopuoliset muuttujat täytyy määritellä näin, jotta niitä voi käyttää.

Tässä on hieman tehokkaampi toteutus, jossa kaikki käännökset siirretään taulukkoon $translation. Tässä taulukossa sanan numero on suoraan taulukon indeksi, jolloin käännöksiä voi hakea suoraan taulukosta.

// laitetaan käännökset taulukkoon
for ($i = 0; $i < count($i18n_data); $i++) {
    $osat = explode(";;", $i18n_data[$i]);
    $translation[trim($osat[0])] = $osat[1];
}

// näytetään käännös 1
echo $translation[1];

Tietysti käännöksen voi hakea myös funktion kautta, joka käyttää samaa taulukkoa.

ZupaDupa [28.01.2007 17:27:09]

#

Loistavaa. Kerkesinkin jo tehdä hieman testailuja ja totesin että jostain syystä tuo $i18n_data ei hyppää funktion sisään... ilmankos ei antanut virheilmoitustakaan :) Paljon kiitoksia!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta