动态切换语言PHP、Javascript、jQuery UI
我最近开始为我的网站实现语言选项。以下是它的基本工作原理:动态切换语言PHP、Javascript、jQuery UI,php,javascript,jquery,jquery-ui,Php,Javascript,Jquery,Jquery Ui,我最近开始为我的网站实现语言选项。以下是它的基本工作原理: if(isset($_GET['lang'])) { $langr= $_GET['lang']; $_SESSION['lang'] = $langr; setcookie('lang', $langr, time() + (3600 * 24 * 30)); } elseif(isset($_SESSION['lang'])) { $langr = $_SESSION['lang']; } elsei
if(isset($_GET['lang']))
{
$langr= $_GET['lang'];
$_SESSION['lang'] = $langr;
setcookie('lang', $langr, time() + (3600 * 24 * 30));
}
elseif(isset($_SESSION['lang']))
{
$langr = $_SESSION['lang'];
}
elseif(isset($_COOKIE['lang']))
{
$langr = $_COOKIE['lang'];
}
else
{
$langr = 'en';
}
switch ($langr)
{
case 'en':
$lang_file = $_SERVER['DOCUMENT_ROOT']."/includes/lang/en.php";
break;
case 'fr':
setlocale (LC_ALL, 'fr_FR.utf8','fra');
$lang_file = $_SERVER['DOCUMENT_ROOT']."/includes/lang/fr.php";
break;
default:
$lang_file = $_SERVER['DOCUMENT_ROOT']."/includes/lang/en.php";
}
include_once $lang_file;
它会在我的网站的每个页面顶部加载相应的语言文件。但是,在使用jQuery的UI日期选择器时,问题开始出现。我在网上找到了日期选择器的区域设置文件,并为其创建了一个单独的文件:
///jquery.ui.datepicker-fr.js file
jQuery(function($){
$.datepicker.regional['fr'] = {
closeText: 'Fermer',
prevText: 'Précédent',
nextText: 'Suivant',
currentText: 'Aujourd\'hui',
monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin',
'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
dayNamesMin: ['D','L','M','M','J','V','S'],
weekHeader: 'Sem.',
dateFormat: 'dd/mm/yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''};
$.datepicker.setDefaults($.datepicker.regional['fr']);
});
问题是每当检测到语言更改时,我需要动态加载
jquery.ui.datepicker-fr.js
,以便我的datepicker切换到法语。我当时想的是创建一个PHP函数,我会把它放在我的
中,它会回显我的文件,但问题是我的网页并非都是PHP,我觉得这不是一个非常有效的方法。关于如何做到这一点,还有其他想法吗?您认为这种方法怎么样
function getBaseURL()
{
var url = location.href;
var baseURL = url.substring(0, url.indexOf('/', 14));
if (baseURL.indexOf('http://localhost') != -1)
{
var url = location.href;
var pathname = location.pathname;
var index1 = url.indexOf(pathname);
var index2 = url.indexOf("/", index1 + 1);
var baseLocalUrl = url.substr(0, index2);
return baseLocalUrl + "/";
}
else
{
return baseURL + "/";
}
}
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
}
function getLang()
{
var lang = getCookie("lang");
switch(lang)
{
case "fr":
document.write("<script src='"+getBaseURL()+"js/lang/jquery.ui.datepicker-"+lang+".js'></script>");
break;
default:
document.write("");
}
}
getLang();
函数getBaseURL()
{
var url=location.href;
var baseURL=url.substring(0,url.indexOf('/',14));
if(baseURL.indexOf('http://localhost') != -1)
{
var url=location.href;
var pathname=location.pathname;
var index1=url.indexOf(路径名);
var index2=url.indexOf(“/”,index1+1);
var baseLocalUrl=url.substr(0,index2);
返回baseLocalUrl+“/”;
}
其他的
{
返回baseURL+“/”;
}
}
函数getCookie(c_名称)
{
变量i,x,y,ARRcookies=document.cookie.split(“;”);
对于(i=0;i使用.change()和.post()如何?您将lang的id添加到表单中,用户可以在其中更改语言
$('#lang').change(function(){
//link to your php file
var findlangfile = "<?php echo index.php/findlang.php;?>
$.post(findlangfile, {
lang: $('#lang').val(),
}, function(response){
// you do things
});
return false;
});
$('#lang')。更改(函数(){
//链接到您的php文件
var findlangfile=”
$.post(findlangfile{
lang:$('#lang').val(),
},功能(回应){
//你做事
});
返回false;
});
您需要在header.php中打勾,如下所示:
<script type="text/javascript>" src="/js/<?php if($_SESSION['lang'] == "en"){ echo 'datepicker-en.js'}else echo 'datepicker-fr.js'; ?>"></script>
<script src="/js/<?php echo 'datepicker-' . *COOKIE/SESSION VALUE, LIKE en* . '.js'; ?>"></script>
您可以使用jQuery cookie插件,这是一个很好的插件。然后对jQuery执行与php相同的过程。如果语言作为url参数提供,请使用插件设置cookie(使用上面的getBaseURL()函数获取语言值)。否则加载cookie,然后加载相应的javascript文件。类似于$('head')。追加(“我会这样做,有一个单独的PHP文件负责获取正确的JS文件,
这样,您也可以在计划HTML页面中使用它
<script type="text/javascript" src="/getCorrectJsFile.php"></script>
Moeed答案的改进版本:
您需要在header.php中设置一个复选框,如下所示:
<script type="text/javascript>" src="/js/<?php if($_SESSION['lang'] == "en"){ echo 'datepicker-en.js'}else echo 'datepicker-fr.js'; ?>"></script>
<script src="/js/<?php echo 'datepicker-' . *COOKIE/SESSION VALUE, LIKE en* . '.js'; ?>"></script>
为什么不让javascript读取cookie,然后在此基础上下载正确的本地化文件呢?我认为有效的方法可以是通过datepicker.js
提取lang cookie
信息并相应加载嗯,加载cookie将是一个选项..我假设所有页面都使用PHP不是一个选项,y我们唯一的其他选择是使用javascript加载语言特定的文件。
或者。您可以根据cookie重定向en文件到fr文件,也可以根据get值重定向。祝您好运,让我知道您的进展如何!