CodeIgniter Forums

Full Version: Language problem
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi everybody;

I create a website using both english, french and spanish languages as a user may choose.
This work perfectly at the homegage since I don't use language helper (I use post and session).

My problem appear later at a form page. I followed the Language Class tutorial ( and created dedicated files:

all of them filled respectively with things like:
//for french
$lang['pas_de_compte'] => "Je n'ai pas encore de compte";
$lang['a_compte']  => "J'ai déjà un compte";

//for english
$lang['pas_de_compte'] => "I have no account yet";
$lang['a_compte']  => "I already have an account";

// for spanish
$lang['pas_de_compte'] = "Aun no tengo cuenta";
$lang['a_compte'] = "Ya tengo una cuenta";

I catch the language used by the Connect.php controller with:
$langue = $this->session->userdata('langue');
$idiom=['fr'=>'french', 'en'=>'english', 'es' => 'spanish'];

My problem is that when I use :
        $this->lang->load('connect', $idiom[$langue]);
the language file is correctly found but the array of keys/values is printed directly in the HTML as a whole file instead of  filling each label or text field. Things happen the same when I use that in the view instead of the controller.

I don't understand why nor how to fix it.
code result:
<!DOCTYPE html>
 <link rel="shortcut icon" type="image/x-icon" href="../fond.png" />
   <meta http-equiv="content-type" content="text/html; charset=UTF-8">
   <link rel="stylesheet" href="../style.css">

$lang['a_compte']  => "J'ai déjà un compte";
$lang['nom']  => "Nom";

// ... all the pairs key/value from accept_lang.php

<caption>se connecter</caption>
<tr><th colspan="2">
<label for="deja[0]"></label><input type="radio" name="deja" id="deja[0]" value=0 checked onclick="toggle()">
<input type="radio" name="deja"  id="deja[1]" value=1 onclick="toggle()"><label for="deja[1]"></label></td></tr>

<tr><td><label for="nom" class="obligatoire"></label></td><td>
<input type="input" name="nom" value="" size="50" /></td></tr>
// -- all the fields from the form


As you cas see, the lang file is found, its key/value array is printed without being requested, and the labels are printed but empty.
You are loading the languages wrong.

PHP Code:

// should be
// you only load the language you need not an array.
$idiom 'english';
How do you fetch the translations in your view? I suspect you have an error that outputs the $lang array. See this page for the correct syntax for the lang() helper:
(06-27-2019, 03:04 AM)InsiteFX Wrote: [ -> ]You are loading the languages wrong.

PHP Code:

// should be
// you only load the language you need not an array.
$idiom 'english';
Thank you for your answer but the array is not the problem.
$langue values 'fr' or 'en' or 'es', so $idiom[$langue] values 'french' or 'english' or 'spanish', witch is correct since the language file is correctly found.
(06-28-2019, 05:37 AM)includebeer Wrote: [ -> ]How do you fetch the translations in your view? I suspect you have an error that outputs the $lang array. See this page for the correct syntax for the lang() helper:

Thank you for your answer. I can not verify immediately since I changed my code including the complete array of translation in my view (old fashion way,boring but efficient) to not keep being blocked with that problem. I know this solution is not the elegant one so I will try to go back to the 'state of the art' solution a little bit later, including what you mention.
What's the purpose of including all key/value pairs in the view?
You didn't enclose it in php tags. Anything in a view without php, html or javascript tags, will be literally visible on the page (as plain text).