I need a help with my php code. I don't know how to imrove it. On my website viewer can choose language between polish (pl) and english (en) and I want to put spanish (es) but I don't know how to do that.
Please help.
<?php
$lang = $_COOKIE['lang'];
if (!is_null($_GET['lang']) && !empty($_GET['lang'])) {
$lang = $_GET['lang'];
}
switch ($lang) {
case 'pl':
setcookie('lang', 'pl');
include('pl.php');
break;
case 'en':
setcookie('lang', 'en');
include('en.php');
break;
case 'es':
setcookie('lang', 'es');
include('es.php');
break;
}
?>
Improved:
<?php
session_start();
$lang = isset($_SESSION['lang']) ? $_SESSION['lang'] : 'en';
if (isset($_GET['lang']) && in_array($_GET['lang'], array('en', 'esp', 'br')))
$_SESSION['lang'] = $lang = $_GET['lang'];
include_once $lang.'.php';
var_dump($_lng['welcome']);
en.php
<?php
$_lng = array(
'welcome' => 'Welcome',
'save' => 'Save',
'cancel' => 'Cancel',
);
br.php
<?php
$_lng = array(
'welcome' => 'Bem-vindo(a)',
'save' => 'Salvar',
'cancel' => 'Cancelar',
);
Thats kind of tedious and repetitive tasks are the reason to use frameworks, but keeping simple:
Trans.php
<?php
class Trans
{
public static function translate($key, $language = 'es')
{
$catalog = include __DIR__ . DIRECTORY_SEPARATOR . 'i18n' . DIRECTORY_SEPARATOR . $language . '.php';
return (isset($catalog[$key]))?$catalog[$key]:$key;
}
}
translatable.php
<?php
require 'Trans.php';
$lang = isset($_GET['lang'])?$_GET['lang']:'es';
echo Trans::translate('hello_world_from_cuba', $lang);
i18n/en.php files look like this:
<?php
return array(
'hello_world_from_cuba' => "Hello World From Cuba.",
);
i18n/es.php
<?php
return array(
'hello_world_from_cuba' => "Hola Mundo desde Cuba.",
);
Access translatable.php using web browser (http://localhost/translator/translatable.php
). CodeIgniter and Kohana has more complex translators but basically are the same above... In your case you get language from cookie/session I got it from $_GET but still working...