文件内容:

/include/language.php

  1. <?php
  2. $languages = array ();
  3. $languages ['zh-cn'] ["name"] = "china";
  4. $languages ["zh-cn"] ["image"] = "flag1.jpg";
  5. $languages ["en"] ["name"] = "english";
  6. $languages ["en"] ["image"] = "flag2.jpg";
  7. class Language {
  8. public $language_area;
  9. public $language_country;
  10. public $language_dir;
  11. public $dir;
  12. public function __construct() {
  13. $this->dir = str_replace ( "\\", "/", dirname ( __FILE__ ) ) . "/language/";
  14. $this->initDefaultLanguage ();
  15. if (empty ( $this->language_country ) && ! empty ( $this->language_area )) {
  16. $this->language_country = substr ( $this->language_area, 0, strpos ( $this->language_area, "-" ) );
  17. }
  18. $this->initLanguageDir ();
  19. }
  20. /*
  21. 取得语言文件的绝对路径
  22. */
  23. public function getFileDir($file) {
  24. $dir = $this->dir;
  25. if (file_exists ( $this->getLanguageDir () . $file )) {
  26. return $this->getLanguageDir () . $file;
  27. } else if (file_exists ( $dir . $this->language_area . "/" . $file )) {
  28. return $dir . $this->language_area . "/" . $file;
  29. } else if (file_exists ( $dir . $this->language_country . "/" . $file )) {
  30. return $dir . $this->language_country . "/" . $file;
  31. } else if (file_exists ( $dir . "en/" . $file )) {
  32. return $dir . "en/" . $file;
  33. } else {
  34. return false;
  35. }
  36. }
  37. /*
  38. 取得当前使用语言的文件夹
  39. */
  40. public function getLanguageDir() {
  41. return $this->language_dir;
  42. }
  43. /*
  44. 初始化语言文件夹
  45. */
  46. private function initLanguageDir() {
  47. $dir = $this->dir;
  48. if (file_exists ( $dir . $this->language_area ) && ! empty ( $this->language_area )) {
  49. $this->language_dir = $dir . $this->language_area . "/";
  50. } else if (file_exists ( $dir . $this->language_country ) && ! empty ( $this->language_country )) {
  51. $this->language_dir = $dir . $this->language_country . "/";
  52. } else {
  53. $this->language_dir = $dir . "en/";
  54. }
  55. }
  56. /*
  57. 初始化默认语言
  58. */
  59. public function initDefaultLanguage() {
  60. if ($this->getCookieLanguage ()) {
  61. return;
  62. }
  63. $language = $_SERVER ['HTTP_ACCEPT_LANGUAGE'];
  64. preg_match_all ( "/[\w-]+/", $language, $language );
  65. $this->language_area = $language [0] [0];
  66. @$this->language_country = $language [0] [1];
  67. $this->setCookieLanguage ();
  68. }
  69. /*
  70. 从cookie中导入语言种类
  71. */
  72. public function getCookieLanguage() {
  73. if (! @empty ( $_COOKIE ['lang'] )) {
  74. $language = $_COOKIE ['lang'];
  75. if (strpos ( $language, "-" )) {
  76. $this->language_area = $language;
  77. } else {
  78. $this->language_country = $language;
  79. }
  80. return true;
  81. }
  82. return false;
  83. }
  84. /*
  85. 把当前的语言种类放到cookie中
  86. */
  87. public function setCookieLanguage($lang = "") {
  88. if (empty ( $lang )) {
  89. $lang = $this->language_area;
  90. }
  91. if (empty ( $lang )) {
  92. $lang = $this->language_country;
  93. }
  94. if (empty ( $lang )) {
  95. return false;
  96. }
  97. setcookie ( "lang", $lang, time () + 365 * 24 * 3600, "/", $this->getDomain () );
  98. return true;
  99. }
  100. public function getDomain() {
  101. if (empty ( $this->domain )) {
  102. $domain = $_SERVER ['SERVER_NAME'];
  103. if (strcasecmp ( $domain, "localhost" ) === 0) {
  104. $this->domain = $domain;
  105. return $this->domain;
  106. }
  107. if (preg_match ( "/^(\d+\.){3}\d+$/", $domain, $domain_temp )) {
  108. $this->domain = $domain_temp [0];
  109. return $this->domain;
  110. }
  111. preg_match_all ( "/\w+\.\w+$/", $domain, $domain );
  112. $this->domain = $domain [0] [0];
  113. return $this->domain;
  114. } else {
  115. return $this->domain;
  116. }
  117. }
  118. }
  119. ?>

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

  1. <?php
  2. $language_message["china"]="中文";
  3. $language_message["english"]="英文";
  4. ?>

/include/language/en/language.php

  1. <?php
  2. $language_message["china"]="china";
  3. $language_message["english"]="english";
  4. ?>

/chang_language.php

  1. <?php
  2. include_once 'header.php';
  3. include_once 'header.tpl';
  4. $language_file=$lang->getFileDir("language.php");
  5. include($language_file);
  6. ?>
  7. <script language="javascript">
  8. var domain="<?php echo $lang->getDomain();?>";
  9. var cur_language="<?php echo $current_language;?>";
  10. function change_language(lan)
  11. {
  12. alert("lan");
  13. setCookie("lang",lan,1,"/",domain,false);
  14. if(cur_language==lan)
  15. {
  16. return ;
  17. }
  18. <?php if(!$_POST){ ?>
  19. document.location.reload();
  20. <?php } ?>
  21. }
  22. // writeCookie("myCookie", "my name", 24);
  23. // Stores the string "my name" in the cookie "myCookie" which expires after 24 hours.
  24. function setCookie( name, value, expires, path, domain, secure ) {
  25. var today = new Date();
  26. today.setTime( today.getTime() );
  27. if ( expires ) {
  28. expires = expires * 1000 * 60 * 60 * 24;
  29. }
  30. var expires_date = new Date( today.getTime() + (expires) );
  31. document.cookie = name+'='+escape( value ) +
  32. ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
  33. ( ( path ) ? ';path=' + path : '' ) +
  34. ( ( domain ) ? ';domain=' + domain : '' ) +
  35. ( ( secure ) ? ';secure' : '' );
  36. }
  37. </script>
  38. <ul>
  39. <?php
  40. foreach($languages as $key=>$value)
  41. {
  42. echo '<li><a href="javascript://" onclick="change_language(\'',$key,'\')"';
  43. echo '>',$language_message[$languages[$key]["name"]],' <img src="data:images/',$languages[$key]["image"],'" border="0"/></a></li>';
  44. }
  45. ?>
  46. </ul>

/header.php

  1. <?php
  2. include_once (dirname ( __FILE__ ) . "/include/language.php");
  3. $lang = new Language ( );
  4. //print_r($lang->language_area);
  5. $current_language = getCurrentLanguage ();
  6. //print_r($current_language);
  7. function getCurrentLanguage() {
  8. global $lang, $languages;
  9. if (array_key_exists ( $lang->language_area, $languages )) {
  10. return $lang->language_area;
  11. } else if (array_key_exists ( $lang->language_country, $languages )) {
  12. return $lang->language_country;
  13. } else {
  14. return "en";
  15. }
  16. }
  17. ?>

/header.tpl

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

/test_language.php

  1. <?php
  2. include_once 'header.php';
  3. include_once 'header.tpl';
  4. $language_file = $lang->getFileDir ( "speak_language.php" );
  5. require_once ($language_file);
  6. print_r($speak_language_message);
  7. ?>

php多语言切换---转载的更多相关文章

  1. vue中实现国际化--语言切换(转载)

    https://segmentfault.com/a/1190000011800593

  2. vue 国际化i18n 多语言切换

    安装 npm install vue-i18n 新建一个文件夹 i18n ,内新建 en.js zh.js index.js 三个文件 准备翻译信息 en.js export default { ho ...

  3. vue-i18n vue-cli项目中实现国际化 多语言切换功能 一

    vue-cli项目中引入vue-i18n 安装: npm install vue-i18n可参考vue-i18n官网文档 main.js中引入: import Vue from 'vue' impor ...

  4. 动态语言切换(续)-designer中的retranslateUi(带源码)

    本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息.原文链接.原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途. 谢谢合作.原文链接:动态语言切换(续)-designer中 ...

  5. DataGrid 列头实现国际化语言切换

    <DataGrid> <DataGrid.Columns> <DataGridTextColumn Binding="{x:Null}" Width= ...

  6. Android app应用多语言切换功能实现

    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...

  7. ABP的语言切换

    在ABP官网http://www.aspnetboilerplate.com/创建一个Multi Page Web Application项目并打开,在Web项目下可以找到一个Controllers/ ...

  8. iOS 语言切换、本地化,国际化

    什么是本地化处理? 本地化处理就是我们的应用程序有可能发布到世界的很多国家去,因为每个国家应用的语言是不一样的,所以我们要把我们的应用程序的语言要进行本地化处理一下. 本地化处理需要处理那些文件? ( ...

  9. 【转】Android 语言切换过程分析

    最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog. ...

随机推荐

  1. [C#]使用GroupJoin将两个关联的集合进行分组

    本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 本文使用的开发环境是VS2017及dotNet4.0,写此随笔的目的是给自己及新开发人员作为参 ...

  2. python随机图片验证码的生成

    Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 from PIL import Im ...

  3. javascript的BOM,DOM对象

    BOM对象 window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个window对象.功能上讲: 控制浏览器窗口的.使用上讲: window对象不需要创建对象,直接使 ...

  4. Cesium基础使用介绍

    前言 最近折腾了一下三维地球,本文简单为大家介绍一款开源的三维地球软件--Cesium,以及如何快速上手Cesium.当然三维地球重要的肯定不是数据显示,这只是数据可视化的一小部分,重要的应该是背后的 ...

  5. 一个web图片热点生成工具(winform开发) 附源码

    给图片加热点是web开发中经常用到的一个功能.这方面的工具也不少. 为了更好的满足自己的需求,写了一个winform程序. 可以方便的给图片加热点,更方便灵活! 源码下载 http://downloa ...

  6. CCF-201412-2-Z字形扫描

    问题描述 试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zi ...

  7. 超简单的php缓存类

    <?php class Cache { private $dir = "data/cache/";//定义缓存目录 private $key='c_a_sss'; // 文件 ...

  8. Centos7 下安装Docke

    为什么 要用centos7呢. 现在哪个企业用的是centos7呀.不都是老版本么. 对咱们是新技术.所以只有新系统才可以用.因为docker要求服务CentOS6以上,kernel 版本必须2.6. ...

  9. oracle中 merge into 的用法

    很多时候我们需要通过筛选条件同时对表进行 更新,插入,删除 等操作.这样如果我们单一的去操作表会显得很麻烦,下面会说到这个merge  into 的用法会极大的优化我们操作表的时间和代码量. 举例,先 ...

  10. python3 scrapy+Crontab部署过程

    背景 最近有时间想学习下python3+scrapy,于是决定写一个小程序来练练手. 开发环境:MacOS High Sierra(10.13.1)+python3+scrapy. 开发工具:PyCh ...