Translation Script Probleem
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
de.txt
Code (php)
1
2
3
4
5
6
2
3
4
5
6
Translation=bersetzer
Home=Zuhause
Page 1=Seite 1
Page 2=Seite 2
Bye=Freilos
Mouse=Maus
Home=Zuhause
Page 1=Seite 1
Page 2=Seite 2
Bye=Freilos
Mouse=Maus
class.translation.php
Code (php)
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
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);
}
}
}
?>
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)
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
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>
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)
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
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>
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)
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
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>
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
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Gewijzigd op 30/09/2014 17:34:51 door Peter Flos
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)
1
2
3
4
5
6
7
8
9
10
11
12
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';
?>
// 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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];
}
}
?>
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
Hier even een functie die de 'beste' taal uitkiest uit de talen die je aanbiedt:
Code (php)
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
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);
?>
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);
?>
Ik moet nog even kijken of het lukt om geen .txt bestanden meer te gebruiken en over te stappen naar arrays.