wyc
wyc

Reputation: 55263

How to simplify this php switch statement?

I would like to change this:

// use appropiate lang.xx.php file according to the value of the $lang
switch ($_SESSION['lang']) {
case 'en':
 $lang_file = 'lang.en.php';
 break;

case 'es':
 $lang_file = 'lang.es.php';
 break;

case 'zh-tw':
 $lang_file = 'lang.zh-tw.php';
 break;

case 'zh-cn':
 $lang_file = 'lang.zh-cn.php';
 break;

default:
 $lang_file = 'lang.en.php';
}

into something like this:

//include file for final output
 include_once 'languages/lang.'.$_SESSION['lang'].'php;

(I think the $lang_file variable becomes redundant if I do the include-final-output-thing above)

So that I can skip the whole switch part. I tried other combinations but they don't seem to work. Any suggestions?

Upvotes: 4

Views: 1355

Answers (4)

joar
joar

Reputation: 15887

This will work perfectly fine

$lang_file_tmp = 'lang.' . $_SESSION['lang'] . '.php';
if ( preg_match( '/^[a-zA-Z\-]{2,5}$/', $_SERSSION['lang'] ) && file_exists( $lang_file_tmp ) ) { 
    $lang_file = $lang_file_tmp;
} else {
    $lang_file = 'lang.en.php';
}

With this, you won't have to edit the code every time your're adding a new language and you will not have to worry about security.

Upvotes: 0

Gumbo
Gumbo

Reputation: 655129

You can do this:

switch ($_SESSION['lang']) {
case 'en':
case 'es':
case 'zh-tw':
case 'zh-cn':
    $lang_file = 'lang.'.$_SESSION['lang'].'.php';
    break;

default:
    $lang_file = 'lang.en.php';
}

Or you use an array and use in_array to see if the value is in the array:

$languages = array('en', 'es', 'zh-tw', 'zh-cn');
if (in_array($_SESSION['lang'], $languages)) {
    $lang_file = 'lang.'.$_SESSION['lang'].'.php';
} else {
    $lang_file = 'lang.en.php';
}

You even could omit en in both cases since it’s the default.

Upvotes: 18

wilksm
wilksm

Reputation: 56

Or:


$allowed   = array('en', 'es', 'zh-tw', 'zh-cn');
$lang_file = (in_array($_SESSION['lang'], $allowed))
           ? 'lang.'.$_SESSION['lang'].'.php' : 'lang.en.php';

Upvotes: 2

ZombieSheep
ZombieSheep

Reputation: 29953

$lang_file = 'lang.' . ($_SESSION['lang']) . 'php';
if(!file_exists($lang_file))
{
    $lang_file = 'lang.en.php';
}

although it isn't secure against injections. It does, however, allow you to add new language codes without modifying the code.

Upvotes: 2

Related Questions