`
conkeyn
  • 浏览: 1522930 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

php 多语言切换

    博客分类:
  • PHP
阅读更多

目录结构:

 

//============================================

文件内容:

/include/language.php

 

<?php
$languages = array ();
$languages ['zh-cn'] ["name"] = "china";
$languages ["zh-cn"] ["image"] = "flag1.jpg";
$languages ["en"] ["name"] = "english";
$languages ["en"] ["image"] = "flag2.jpg";
class Language {
	public $language_area;
	public $language_country;
	public $language_dir;
	public $dir;
	public function __construct() {
		$this->dir = str_replace ( "\\", "/", dirname ( __FILE__ ) ) . "/language/";
		$this->initDefaultLanguage ();
		if (empty ( $this->language_country ) && ! empty ( $this->language_area )) {
			$this->language_country = substr ( $this->language_area, 0, strpos ( $this->language_area, "-" ) );
		}
		$this->initLanguageDir ();
	}
	
	/*
	取得语言文件的绝对路径
	*/
	public function getFileDir($file) {
		$dir = $this->dir;
		if (file_exists ( $this->getLanguageDir () . $file )) {
			return $this->getLanguageDir () . $file;
		} else if (file_exists ( $dir . $this->language_area . "/" . $file )) {
			return $dir . $this->language_area . "/" . $file;
		} else if (file_exists ( $dir . $this->language_country . "/" . $file )) {
			return $dir . $this->language_country . "/" . $file;
		} else if (file_exists ( $dir . "en/" . $file )) {
			return $dir . "en/" . $file;
		} else {
			return false;
		}
	}
	/*
	取得当前使用语言的文件夹
	*/
	public function getLanguageDir() {
		return $this->language_dir;
	}
	
	/*
	初始化语言文件夹
	*/
	private function initLanguageDir() {
		$dir = $this->dir;
		if (file_exists ( $dir . $this->language_area ) && ! empty ( $this->language_area )) {
			$this->language_dir = $dir . $this->language_area . "/";
		} else if (file_exists ( $dir . $this->language_country ) && ! empty ( $this->language_country )) {
			$this->language_dir = $dir . $this->language_country . "/";
		} else {
			$this->language_dir = $dir . "en/";
		}
	}
	
	/*
	初始化默认语言
	*/
	public function initDefaultLanguage() {
		if ($this->getCookieLanguage ()) {
			return;
		}
		$language = $_SERVER ['HTTP_ACCEPT_LANGUAGE'];
		preg_match_all ( "/[\w-]+/", $language, $language );
		$this->language_area = $language [0] [0];
		@$this->language_country = $language [0] [1];
		$this->setCookieLanguage ();
	}
	
	/*
	从cookie中导入语言种类
	*/
	public function getCookieLanguage() {
		if (! @empty ( $_COOKIE ['lang'] )) {
			$language = $_COOKIE ['lang'];
			if (strpos ( $language, "-" )) {
				$this->language_area = $language;
			} else {
				$this->language_country = $language;
			}
			return true;
		}
		return false;
	}
	
	/*
	   把当前的语言种类放到cookie中
	*/
	public function setCookieLanguage($lang = "") {
		if (empty ( $lang )) {
			$lang = $this->language_area;
		}
		if (empty ( $lang )) {
			$lang = $this->language_country;
		}
		if (empty ( $lang )) {
			return false;
		}
		setcookie ( "lang", $lang, time () + 365 * 24 * 3600, "/", $this->getDomain () );
		return true;
	}
	
	public function getDomain() {
		if (empty ( $this->domain )) {
			$domain = $_SERVER ['SERVER_NAME'];
			if (strcasecmp ( $domain, "localhost" ) === 0) {
				$this->domain = $domain;
				return $this->domain;
			}
			if (preg_match ( "/^(\d+\.){3}\d+$/", $domain, $domain_temp )) {
				$this->domain = $domain_temp [0];
				return $this->domain;
			}
			preg_match_all ( "/\w+\.\w+$/", $domain, $domain );
			$this->domain = $domain [0] [0];
			return $this->domain;
		} else {
			return $this->domain;
		}
	}
}
?>
 

/include/language/zh-cn/language.php

<?php 
$language_message["china"]="中文";
$language_message["english"]="英文";
?>
 

/include/language/en/language.php

<?php 
$language_message["china"]="china";
$language_message["english"]="english";
?>

 /chang_language.php

<?php
include_once 'header.php';
include_once 'header.tpl';
$language_file=$lang->getFileDir("language.php");
include($language_file);
?>
<script language="javascript">
var domain="<?php echo $lang->getDomain();?>";
var cur_language="<?php echo $current_language;?>";
function change_language(lan)
{
	alert("lan");
    setCookie("lang",lan,1,"/",domain,false);
	 if(cur_language==lan)
	 {
		 return ;
	 }
	 <?php if(!$_POST){ ?>
	 document.location.reload();
	 <?php } ?>
}

// writeCookie("myCookie", "my name", 24);

// Stores the string "my name" in the cookie "myCookie" which expires after 24 hours.


function setCookie( name, value, expires, path, domain, secure ) {

	var today = new Date();
	
	today.setTime( today.getTime() );
	
	if ( expires ) {
	
	expires = expires * 1000 * 60 * 60 * 24;
	
	}
	
	var expires_date = new Date( today.getTime() + (expires) );
	
	document.cookie = name+'='+escape( value ) +
	
	( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
	
	( ( path ) ? ';path=' + path : '' ) +
	
	( ( domain ) ? ';domain=' + domain : '' ) +
	
	( ( secure ) ? ';secure' : '' );

}


</script>
<ul>
 <?php
foreach($languages as $key=>$value)
{
  echo '<li><a href="javascript://" onclick="change_language(\'',$key,'\')"';
   echo '>',$language_message[$languages[$key]["name"]],' <img src="images/',$languages[$key]["image"],'" border="0"/></a></li>';
}
?>
</ul>

 /header.php

<?php
include_once (dirname ( __FILE__ ) . "/include/language.php");
$lang = new Language ( );
//print_r($lang->language_area);
$current_language = getCurrentLanguage ();
//print_r($current_language);
function getCurrentLanguage() {
	global $lang, $languages;
	if (array_key_exists ( $lang->language_area, $languages )) {
		return $lang->language_area;
	} else if (array_key_exists ( $lang->language_country, $languages )) {
		return $lang->language_country;
	} else {
		return "en";
	}

}
?>

 /header.tpl

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>多语言测试</title>
<link href="css/css.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="javascript/prototype_1_6.js"></script>
</head>

 /test_language.php

<?php
include_once 'header.php';
include_once 'header.tpl';
$language_file = $lang->getFileDir ( "speak_language.php" );
require_once ($language_file);

print_r($speak_language_message);
?>
 

测试地址为:http://127.0.0.1/multiple_language/chang_language.php

localhost不能使用,正式域名及IP地址可以使用。

 

 

 

 

 

  • 大小: 24.2 KB
分享到:
评论
2 楼 mouse7956 2014-11-12  
好文章好文章
1 楼 dy804731771 2013-01-24  
好文章好文章

相关推荐

    ecshop多语言切换

    多语言切换功能是ECSHOP为满足全球用户需求而设计的重要特性,使得商家能够轻松地将网站内容转化为不同语言,吸引不同国家和地区的消费者。以下是如何在ECSHOP中实现多语言切换的详细步骤: 1. 修改`init.php`文件...

    PHPWEB中英多语言切换插件.

    PHPWEB中英多语言切换插件是为了解决这个问题而设计的,它允许用户轻松地在中文和英文之间切换,从而扩大网站的受众范围,提升用户体验。 首先,我们需要了解PHPWEB自助建站程序。PHPWEB是一个基于PHP和MySQL的开源...

    php简单实现多语言切换的方法

    在PHP中实现多语言切换是构建国际化网站的关键步骤,它允许你的网站内容适应不同国家和地区用户的语言需求。以下是一个简单的实现方法,分为几个关键部分: 1. **主程序代码**: 主程序代码中首先引入了`function....

    ecshop简单实现多语言切换

    本文将详细介绍如何在ECShop中实现多语言切换功能。 首先,理解ECShop的结构至关重要。ECShop的核心组成部分包括`themes`目录,这是存放主题和模板的地方;`includes`目录,包含了系统的主要配置文件和函数库。在...

    【CRMEB 单商户】支持多语言切换功能CRMEB-BZ v4.5(20220516)商城 完整包 支持二次开发 仅供学习使用

    首先,多语言切换功能的实现是通过语言包来完成的。在CRMEB系统中,每种语言都有对应的语言包,包含了所有用户界面的文本资源。这些语言包通常包含一系列的翻译文件,如`.json`或`.php`文件,用于存储各种界面元素的...

    ThinkPHP多语言的使用和配置

    #### 多语言自动识别与切换 ThinkPHP具备自动识别用户浏览器语言的功能,并据此加载相应的语言包。这意味着,当用户访问应用时,系统会自动检测用户的浏览器设置,并尝试加载匹配的语言包。 如果需要手动测试语言...

    php多语言版

    【PHP多语言版】是一个专为全球用户设计的版本,它包含了多种语言支持,使得非英语国家的用户也能轻松地理解和使用PHP环境。这个版本旨在消除语言障碍,为开发者提供更加便捷的编程体验,无论他们来自何处,都能无...

    PHP企业网站源码多语言版

    5. **多语言支持**:实现多语言功能通常会使用语言文件(如lang.php)存储不同语言的文本,通过检测用户浏览器设置或用户选择来切换语言环境。 6. **路由系统**:网站的URL管理,可能使用自定义路由规则,通过解析...

    php多语言实现

    在PHP开发中,实现多语言功能是常见的需求,特别是在构建具有全球用户基础的网站或应用时。虽然`gettext`是一个广泛使用的多语言支持工具,但并非唯一的选择。本实例将探讨如何在不依赖`gettext`的情况下,通过...

    php简洁实现多语言切换的方法_.docx

    在PHP中实现多语言切换是一种常见的需求,特别是在构建全球化网站时。以下是一个简洁的方法,通过使用会话(Session)和语言包来实现这一功能。 首先,我们来看一下主程序代码: ```php &lt;?php include "lib/...

    多站点语言切换器:WordPress插件:多站点语言切换器

    一个简单,功能强大且易于使用的插件,它将为WordPress安装增加多语言支持,即多个子域或文件夹(如果您需要跨多个域设置多个站点,则您还需要使用插件-只要这些域都托管在同一服务器上即可。) 多站点语言切换器使...

    PHP 国际化 多语言

    三、多语言切换 实现语言切换通常需要一个界面元素,如下拉菜单或按钮,供用户选择不同的语言。点击后,应更新用户的会话或Cookie,以便服务器知道用户的新语言偏好。然后,重新加载页面,显示相应语言的文本。 四...

    基于PHP实现系统多语言自动替换,语言包自动生成,可设置从中文转换多种语言包。.zip

    在这个项目中,可能采用了类似的方法,通过动态读取并应用语言包,实现多语言的快速切换。 其次,语言包自动生成是提高开发效率的重要工具。这通常涉及到文本提取和翻译过程。开发者可以通过分析源代码中的字符串,...

    tp5.0.10之前多语言修改lang.php文件

    使用tp5.0.10之前的版本的,进行多语言切换会出现问题,具体的解决问题的办法 ,应先正确的配置对多语言的配置文件 (略过),正确的话应该会取用cookie('think_var')中的值进行语言的切换,但问题就出在取cookie('...

    CAS单点登录多语言整合文档+源码

    这个压缩包文件包含的是关于CAS单点登录的多语言整合文档和源码,特别提到了PHP客户端和Java客户端的整合。 首先,我们来深入理解一下CAS的基本工作原理。当用户尝试访问受CAS保护的应用时,会被重定向到CAS服务器...

    PHP多语言翻译 和php的gettext函数类似

    7. **多语言切换**: 用户可以根据自己的需求在前端界面提供语言切换选项,通过改变PHP脚本中的语言环境设置来实现。 在提供的压缩包中,`index.php`可能是示例代码,`lang`可能包含不同的语言文件夹,每个文件夹...

    php图片轮切效果图片切换

    PHP是一种服务器端的脚本语言,它可以生成HTML代码并在客户端浏览器中呈现。在实现图片轮切效果时,PHP会生成包含HTML和JavaScript代码的页面,这些代码负责在浏览器端控制图片的显示和切换。 HTML部分通常会包含一...

    一个多语言cms

    【描述】:“php多语言CMS”强调了这个系统是使用PHP作为主要开发语言实现的。PHP是一种广泛应用的开源脚本语言,尤其适合于Web开发,能够快速构建动态、交互式的网站。多语言功能意味着该CMS不仅限于一种语言,而是...

Global site tag (gtag.js) - Google Analytics