gpt4 book ai didi

php - CodeIgniter 动态语言功能

转载 作者:可可西里 更新时间:2023-11-01 00:42:18 26 4
gpt4 key购买 nike

我是 Codeigniter,我需要为用户提供动态语言。

我在标题处添加了下拉菜单,我希望允许用户在前端更改网站的语言。

我试图在一个 Controller 中使用以下代码更改语言

$this->config->set_item('language','spanish');

但它不工作它不改变语言

我还尝试在我的一个 Controller 中使用以下代码进行 session

$mylanguage = $this->session->set_userdata(array('my_language',$dynamiclang));

并尝试访问配置文件中的这个变量,但它也不起作用。

帮助我完成这项工作。

最佳答案

终于成功制作多语言了

按照下面的步骤

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

我希望这会有所帮助。

关于php - CodeIgniter 动态语言功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31895341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com