drau89457 2010-02-28 08:32
浏览 47

如何在这个php语言检测演示中获得每种语言内容的文件?

This tutorial is about language selection according to preferred language on browser.

lang.php:

<?php

function dlang($Var)
{
 if(empty($GLOBALS[$Var]))
 {
  $GLOBALS[$Var]=(!empty($GLOBALS['_SERVER'][$Var]))?
  $GLOBALS['_SERVER'][$Var]:
  (!empty($GLOBALS['HTTP_SERVER_VARS'][$Var]))?
  $GLOBALS['HTTP_SERVER_VARS'][$Var]:'';
 }
}

function language()
{
 // Detect HTTP_ACCEPT_LANGUAGE & HTTP_USER_AGENT.
 dlang('HTTP_ACCEPT_LANGUAGE');
 dlang('HTTP_USER_AGENT');

 $_AL=strtolower($GLOBALS['HTTP_ACCEPT_LANGUAGE']);
 $_UA=strtolower($GLOBALS['HTTP_USER_AGENT']);

 // Try to detect Primary language if several languages are accepted.
 foreach($GLOBALS['_LANG'] as $K)
 {
  if(strpos($_AL, $K)===0)
   return $K;
 }

 // Try to detect any language if not yet detected.
 foreach($GLOBALS['_LANG'] as $K)
 {
  if(strpos($_AL, $K)!==false)
   return $K;
 }
 foreach($GLOBALS['_LANG'] as $K)
 {
  if(preg_match("/[\[\( ]{$K}[;,_\-\)]/",$_UA))
   return $K;
 }

 // Return default language if language is not yet detected.
 return $GLOBALS['_DLANG'];
}

// Define default language.
$GLOBALS['_DLANG']='es';

// Define all available languages.
// WARNING: uncomment all available languages

$GLOBALS['_LANG'] = array(
'es',
'en',
'zh'
);
?>

session.php:

<?php
//proc all page display
include('lang.php'); //language detector
class Session
{
 var $lang;         //Username given on sign-up
 var $url;          //The page url current being viewed
    var $referrer;     //Last recorded site page viewed

 /* Class constructor */
   function Session(){
      $this->time = time();
      $this->startSession();
   }

   function cf($filename){//function to clean a filename string so it is a valid filename
     $fp = explode('/',$filename);
  $num = count($fp);
  return $fp[$num-1];
 }

   /**
    * startSession - Performs all the actions necessary to 
    * initialize this session object. Tries to determine if the
    * the user has logged in already, and sets the variables 
    * accordingly. Also takes advantage of this page load to
    * update the active visitors tables.
    */
   function startSession(){
     session_start();   //Tell PHP to start the session

  /* Set referrer page */
      if(isset($_SESSION['url'])){
         $this->referrer = $search = $this->cf($_SESSION['url']);
      }else{
         $this->referrer = "/";
      }

      /* Set current url */
      $this->url = $_SESSION['url'] = $this->cf($_SERVER['PHP_SELF']);

   /* Set user-determined language: */
    //set up languages array:
    $langs = array('en','es','zh');
  //
   if(isset($_GET['lang'])){
    if(in_array($_GET['lang'],$langs)){
   $this->lang =  $_SESSION['lang'] = $_GET['lang'];
  }
   }
   if(!isset($_SESSION['lang']) || !in_array($_SESSION['lang'],$langs)){
      $this->lang = $_SESSION['lang'] = language();
   }
 }
};
/**
 * Initialize session object - This must be initialized before
 * the form object because the form uses session variables,
 * which cannot be accessed unless the session has started.
 */
$session = new Session;
?>

Now I want to choose a lang.en.php or a lang.es.php according to the value of $lang (en, es, etc...). I want each language's content to have its own file.

I think this code might work:

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

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

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

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

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

 include_once 'languages/'.$lang_file;
?>

lang.en.php (sample):

<?php
$lang = array(
 'tagline_h2' => 'English Tagline',

I placed that switch statement at the end of the session.php file, but no matter what I do, its stuck displaying the default language (en).

Any suggestions?

  • 写回答

1条回答 默认 最新

  • douju1852 2010-02-28 08:59
    关注

    Try echoing $lang and seeing what its value is -- so you could see if that's the problem first? Also, I suggest you replace the switch with a plain

    include_once("languages/lang.$lang.php");

    If you want to check if it's a valid language you could compare it against and array or check if the file exists first.

    评论

报告相同问题?

悬赏问题

  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大