Translation Script Probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick B

Patrick B

30/09/2014 17:16:42
Quote Anchor link
Hallo, ik heb een klein probleempje met het vertalen van mijn website.
De translatie werkt prima maar zodra je navigeert naar een andere pagina moet je opnieuw de taal aanklikken.
Mijn vraag was om deze translatie keuze vast te houden zodat elke pagina in de juiste taal verschijnt.


Demo :
http://joeytest321.webuda.com/

Files

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
de.txt

index.php
page1.php
page2.php

class.translation.php


de.txt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
Translation=bersetzer
Home=Zuhause
Page 1=Seite 1
Page 2=Seite 2
Bye=Freilos
Mouse=Maus


class.translation.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
class Translator {

    private $language    = 'en';
    private $lang         = array();
    
    public function __construct($language){
        $this->language = $language;
    }

    
    private function findString($str) {
        if (array_key_exists($str, $this->lang[$this->language])) {
            echo $this->lang[$this->language][$str];
            return;
        }

        echo $str;
    }

    
    private function splitStrings($str) {
        return explode('=',trim($str));
    }

    
    public function __($str) {    
        if (!array_key_exists($this->language, $this->lang)) {
            if (file_exists($this->language.'.txt')) {
                $strings = array_map(array($this,'splitStrings'),file($this->language.'.txt'));
                foreach ($strings as $k => $v) {
                    $this->lang[$this->language][$v[0]] = $v[1];
                }

                return $this->findString($str);
            }

            else {
                echo $str;
            }
        }

        else {
            return $this->findString($str);
        }
    }
}

?>


index.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
require_once('class.translation.php');

if(isset($_GET['lang']))
    $translate = new Translator($_GET['lang']);
else
    $translate = new Translator('en');
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title><?php $translate->__('Translation'); ?></title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15"/>
    </head>
    <body>    
    <a title="Deutsch" href="?lang=de"><img src="img/de.png" alt="Deutsch" ></a>
    <a title="English" href="?lang=en"><img src="img/us.png" alt="English" ></a>
    
    <a title="Home" href="index.php"><?php $translate->__('Home'); ?></a>
    <a title="Home" href="page1.php"><?php $translate->__('Page 1'); ?></a>
    <a title="Home" href="page2.php"><?php $translate->__('Page 2'); ?></a>
    
    
        <h1><?php $translate->__('Home'); ?></h1>
        <h3><?php $translate->__('Bye'); ?></h3>
        <h3><?php $translate->__('Mouse'); ?></h3>                    
    </body>
</html>


page1.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
require_once('class.translation.php');

if(isset($_GET['lang']))
    $translate = new Translator($_GET['lang']);
else
    $translate = new Translator('en');
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title><?php $translate->__('Translation'); ?></title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15"/>
    </head>
    <body>    
    <a title="Deutsch" href="?lang=de"><img src="img/de.png" alt="Deutsch" ></a>
    <a title="English" href="?lang=en"><img src="img/us.png" alt="English" ></a>
    
    <a title="Home" href="index.php"><?php $translate->__('Home'); ?></a>
    <a title="Home" href="page1.php"><?php $translate->__('Page 1'); ?></a>
    <a title="Home" href="page2.php"><?php $translate->__('Page 2'); ?></a>
    
    
        <h1><?php $translate->__('Page 1'); ?></h1>
        <h3><?php $translate->__('Bye'); ?></h3>
        <h3><?php $translate->__('Mouse'); ?></h3>                    
    </body>
</html>


page2.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
require_once('class.translation.php');

if(isset($_GET['lang']))
    $translate = new Translator($_GET['lang']);
else
    $translate = new Translator('en');
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title><?php $translate->__('Translation'); ?></title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15"/>
    </head>
    <body>    
    <a title="Deutsch" href="?lang=de"><img src="img/de.png" alt="Deutsch" ></a>
    <a title="English" href="?lang=en"><img src="img/us.png" alt="English" ></a>
    
    <a title="Home" href="index.php"><?php $translate->__('Home'); ?></a>
    <a title="Home" href="page1.php"><?php $translate->__('Page 1'); ?></a>
    <a title="Home" href="page2.php"><?php $translate->__('Page 2'); ?></a>
    
    
        <h1><?php $translate->__('Page 2'); ?></h1>
        <h3><?php $translate->__('Bye'); ?></h3>
        <h3><?php $translate->__('Mouse'); ?></h3>                    
    </body>
</html>


Zit al een tijdje met dit probleem, advies of hulp is meer dan welkom.

Gr Joey
Gewijzigd op 30/09/2014 17:25:47 door Patrick B
 
PHP hulp

PHP hulp

19/04/2024 05:50:59
 
Peter  Flos

Peter Flos

30/09/2014 17:34:33
Quote Anchor link
Je kunt 2 dingen doen:

1) Een waarde (GET) in de link blijven geven
2) Een sessie starten met de gekozen taal erin. Dat wordt dan iets als:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
session_start();
if(!isset($_SESSION['language'])){
    $_SESSION['language'] = 'en';
}

if(isset($_GET['lang'])){
    $_SESSION['language'] = $_GET['lang'];
}

if($_SESSION['language'] == 'en'){
    $translate = new Translator('en');
}

if($_SESSION['language'] == 'de'){
    $translate = new Translator('de');
}

?>
Gewijzigd op 30/09/2014 17:34:51 door Peter Flos
 

30/09/2014 23:04:56
Quote Anchor link
Joey, ik zou ook geen txt bestanden gebruiken voor je teksten. Ik zou een php bestand hebben waar de taal in een array staat.

Ik zou zeker iets met een sessie doen of in de url altijd te taal neerzetten. Dit wordt door veel websites gebruikt.
Je kan dan een scriptje schrijven die ophaalt wat er in de link staat en dit in een sessie neerzet, dan heb je dubbelop.

Voorbeeld en_lang.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
// Manier 1
$lang = array
(
    'menu_link_1'    => 'Home',
    'menu_link_2'    => 'Page 2',
);


// Manier 2
$lang['menu_link_1']        = 'Home';
$lang['menu_link_2']        = 'Page 2';
?>


Zo houdt je dynamiek in je pagina's/talen en kan je ook nog eens wat PHP erdoor gooien.
Om de bepaalde teksten op te halen kan je een functie als dit gebruiken.
Voorbeeld functions.php (zorg dat deze altijd ingeladen wordt op je website)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if(!function_exists('textvar'))
{
    function
textvar($identifier, $lang=null)
    {

        // Even kijken of we een taal hebben in de sessie, zo nee dan pakken we engels als standaard
        if(is_null($lang))
        {

            $lang = (isset($_SESSION['language']) ? $_SESSION['language'] : 'en';
        }

        
        // We werken met een array van een bepaalde taal dus deze gaan we nu includen
        include_once("map_met_talen/{$lang}_lang.php");
        
        // We weten dat alles met $lang begint we hoeven alleen nog maar de identifier te selecteren en dit terug te geven
        return $lang[$identifier];
    }
}

?>


Uitleg staat in de code, mocht je vragen dan leg ik het nog graag even uit
Gewijzigd op 01/10/2014 01:41:30 door
 
Frank Nietbelangrijk

Frank Nietbelangrijk

01/10/2014 00:47:13
Quote Anchor link
En voor de bezoeker die voor de aller eerste keer op je website komt en dus nog geen kans heeft gehad om zijn/haar taal te kiezen uit de talen die jij aanbiedt op je website kun je uitvissen welke talen als accepted meegegeven worden door de browser.

Hier even een functie die de 'beste' taal uitkiest uit de talen die je aanbiedt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

function getBestLanguage($available, $default)
{

    $accepted = array();
    foreach(explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $a)
    {

        $accepted[strtolower(substr($a, 0, 2))] = '';
    }

    $accepted = array_keys($accepted);
    
    foreach($accepted as $a)
    {

        if(in_array($a, $available))
            return $a;
    }

    
    return $default;
}


// geef op welke talen je wilt ondersteunen op je website
$aangebodenTalenOpDezeWebsite = array('en','nl', 'fr', 'de');

// geef op welke taal getoond moet worden indien er geen matches zijn
$standaardTaal = 'en';

echo getBestLanguage($aangebodenTalenOpDezeWebsite, $standaardTaal);

?>
 
Patrick B

Patrick B

07/10/2014 05:38:37
Quote Anchor link
Super bedankt allemaal, session_start oplossing werkt perfect.
Ik moet nog even kijken of het lukt om geen .txt bestanden meer te gebruiken en over te stappen naar arrays.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.