`
conkeyn
  • 浏览: 1519979 次
  • 性别: 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部分通常会包含一...

    php切换地区php切换地区php切换地区php切换地区

    在PHP开发中,实现“地区切换”功能是一项常见的需求,特别是在构建多语言或跨国网站时。这个功能允许用户根据自己的地理位置或个人偏好选择不同的地区设置,如语言、货币、税率等。以下是一些关于如何在PHP中实现...

Global site tag (gtag.js) - Google Analytics