我怎样才能拥有这个 php 语言检测演示中每种语言内容的文件?

发布于 2024-08-23 01:42:31 字数 3968 浏览 2 评论 0原文

本教程是关于根据首选语言进行语言选择的浏览器。

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;
?>

现在我想根据 $lang 的值选择一个 lang.en.phplang.es.php(en、es 等)。我希望每种语言的内容都有自己的文件。

我认为这段代码可能有效:

// 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(示例):

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

我将该 switch 语句放在 session.php 文件的末尾,但无论我做什么,它都会卡住显示默认值语言(en)。

有什么建议吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

霓裳挽歌倾城醉 2024-08-30 01:42:31

尝试回显 $lang 并查看其值是什么 - 这样您就可以先看看这是否是问题所在?
另外,我建议您将开关替换为普通语言。

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

如果您想检查它是否是有效的语言,您可以将其与数组进行比较,或者首先检查文件是否存在。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文