我是Codeigniter,我需要用户使用动态语言。
我在标题中添加了下拉菜单,我希望允许用户在前端更改网站的语言。
我试图用一个控制器中的以下代码更改语言
if(jQuery("input:radio[name=type]").is(":checked")){
// do stuff
}
但它没有改变它的语言
我还尝试在我的一个控制器中使用以下代码进行会话
$this->config->set_item('language','spanish');
并尝试在配置文件中访问此变量,但它也无效。
帮助我完成这项工作。
答案 0 :(得分:4)
最后我获得成功制作多语言
按照以下步骤
MY_Lang.php
文件夹中的 application\core
个文件
MY_Lang.php
<?php
(defined('BASEPATH')) OR exit('No direct script access allowed');
class MY_Lang extends CI_Lang
{
function __construct() {
global $URI, $CFG, $IN;
$config =& $CFG->config;
$index_page = $config['index_page'];
$lang_ignore = $config['lang_ignore'];
$default_abbr = $config['language_abbr'];
$lang_uri_abbr = $config['lang_uri_abbr'];
#exit('my_lang');
#print_r($URI);
/*if($index_page=='es')
{
#$config['index_page'] = 'es';
#$config['lang_uri_abbr'] = 'es';
#$IN->set_cookie('user_lang', 'es', $config['sess_expiration']);
#$URI->uri_string = str_replace('es','en',$URI->uri_string);
}
else{
#$config['index_page'] = 'en';
#$config['lang_uri_abbr'] = 'en';
#$IN->set_cookie('user_lang', 'en', $config['sess_expiration']);
}
/* get the language abbreviation from uri */
$uri_abbr = $URI->segment(1);
#$uri_abbr='es';
/* adjust the uri string leading slash */
#print $URI->uri_string;
$URI->uri_string = preg_replace("|^\/?|", '/', $URI->uri_string);
if ($lang_ignore) {
if (isset($lang_uri_abbr[$uri_abbr])) {
/* set the language_abbreviation cookie */
$IN->set_cookie('user_lang', $uri_abbr, $config['sess_expiration']);
} else {
/* get the language_abbreviation from cookie */
$lang_abbr = $IN->cookie($config['cookie_prefix'].'user_lang');
}
if (strlen($uri_abbr) == 2) {
/* reset the uri identifier */
$index_page .= empty($index_page) ? '' : '/';
// exit('654');
/* remove the invalid abbreviation */
$URI->uri_string = preg_replace("|^\/?$uri_abbr\/?|", '', $URI->uri_string);
/* redirect */
header('Location: '.$config['base_url'].$index_page.$URI->uri_string);
exit;
}
} else {
/* set the language abbreviation */
$lang_abbr = $uri_abbr;
}
/* check validity against config array */
if (isset($lang_uri_abbr[$lang_abbr])) {
/* reset uri segments and uri string */
//$URI->_reindex_segments(array_shift($URI->segments)); # this is commented becasue this is giving error : @$hok : 09/August/2015
$URI->uri_string = preg_replace("|^\/?$lang_abbr|", '', $URI->uri_string);
/* set config language values to match the user language */
$config['language'] = $lang_uri_abbr[$lang_abbr];
$config['language_abbr'] = $lang_abbr;
/* if abbreviation is not ignored */
if ( ! $lang_ignore) {
/* check and set the uri identifier */
$index_page .= empty($index_page) ? $lang_abbr : "/$lang_abbr";
/* reset the index_page value */
$config['index_page'] = $index_page;
}
/* set the language_abbreviation cookie */
$IN->set_cookie('user_lang', $lang_abbr, $config['sess_expiration']);
} else {
/* if abbreviation is not ignored */
if ( ! $lang_ignore) {
/* check and set the uri identifier to the default value */
$index_page .= empty($index_page) ? $default_abbr : "/$default_abbr";
if (strlen($lang_abbr) == 2) {
/* remove invalid abbreviation */
$URI->uri_string = preg_replace("|^\/?$lang_abbr|", '', $URI->uri_string);
}
/*echo '<pre>';
print_r($_SERVER);
print_r($config['base_url'].$index_page.$URI->uri_string);
exit;*/
$q = $_SERVER['QUERY_STRING'];
if($q)
$q = "/?".$q;
/* redirect */
header('Location: '.$config['base_url'].$index_page.$URI->uri_string.$q);
exit;
}
/* set the language_abbreviation cookie */
$IN->set_cookie('user_lang', $default_abbr, $config['sess_expiration']);
}
log_message('debug', "Language_Identifier Class Initialized");
}
}
/* translate helper */
function t($line) {
global $LANG;
//print_r($LANG);
// exit;
return ($t = $LANG->line($line)) ? $t : $line;
}
function _t($line,$params=array()) {
global $LANG;
if($params){
echo str_replace(array_keys($params),array_values($params),($t = $LANG->line($line)) ? $t : $line);
}
else
echo ($t = $LANG->line($line)) ? $t : $line;
} ?>
并在config.php中添加了以下内容
$config['language'] = "english";
/* default language abbreviation */
$config['language_abbr'] = "en";
/* set available language abbreviations */
$config['lang_uri_abbr'] = array("en" => "english","es" => "spanish","ca" => "catalan");
/* hide the language segment (use cookie) */
$config['lang_ignore'] = TRUE;
在route.php
中添加了以下代码$route['^en/(.+)$'] = "$1";
$route['^es/(.+)$'] = "$1";
$route['^ca/(.+)$'] = "$1";
$route['^(\w{2})$'] = $route['default_controller'];
$route['^(\w{2})/(.+)$'] = "$2";
并在语言文件夹中添加语言文件,如下所示
language/catalan
language/spanish
language/english
我希望这会有所帮助。
答案 1 :(得分:0)
您是否尝试在控制器中添加此内容?
$this->load->helper('language');
答案 2 :(得分:0)
在cookie中加载当前语言,并使用cookie中的语言值加载语言文件 用户选择语言时的示例使用以下函数将当前语言设置为cookie
function language($lang = false) {
if($this->input->get('lang')){ $lang = $this->input->get('lang'); }
$folder = 'application/language/';
$languagefiles = scandir($folder);
if(in_array($lang, $languagefiles)){
$cookie = array(
'name' => 'lang',
'value' => $lang,
'expire' => '31536000',
'prefix' => 'my_',
'secure' => false
);
$this->input->set_cookie($cookie);
}
$this->config->set_item('language', $lang);
redirect($_SERVER["HTTP_REFERER"]);
}
然后在主自定义控制器的构造函数上,或者如果您只是扩展CI_Controller,然后在每个控制器的构造函数上加载语言文件等
$this->lang->load('language_filename', get_cookie('my_lang'));
你已经完成了