在使用Zend_Framework建立网站,若网站在以后的使用中面向国际,这时就需要实现网站的多语言国际化问题。使用Zend_Framework开发的网站需要进行多语言的开发时,就需要用到了Zend_Translate这个解决方案。

Zend_Translate解决方案提供了很多关于多语言使用的适配器,有Array,ini,Csv,Gettext等等,这样的话我们需要根据不同的需求选择不同的适配器,在本项目中选择的是gettext适配器,之所以选择该适配器是应为该格式的文件有专门的软件,因此操作使用起来很方便,它不像其他的Array 和Xml文件看起来很是混乱。使用gettext文件需要一个专门的软件进行相关的编写,该软件为PoEdit使用该软件进行编写文件是很方面的。
那么怎使用PoEdit进行相关的文件的创建呢?
打开该软件,进行相关的界面语言的配置,选择中文界面,然后点击“文件”菜单,“新建”,然后选择要翻译的语言,这里我选择的是中文,然后选择保存,之后会生成一个计算机可读的二进制文件,这里本项目中是zh_CN.mo新建的文件时zh_CN.po,*.po文件是人可读可编辑的文件,用相关的文本编辑器打开,这里我使用的是Sublime Text2打开的,打开之后可进行相关的编辑:
msgid "Hello"
msgstr "你好"

这样一个po文件就编写好了,然后进行保存,这里有一些小问题就是在保存的时候会出现一些小的问题,这一方面是文件没有配好的缘故,这里需要进行的配置是打开刚刚新建好的zh_CN.po文件,然后打开编目>>属性菜单,

如图所示,然后在源路径下进行设定,在源路径下,有个基础路径,该基础路径是PoEdit在进行文件扫描的时候要用到的,当一切设置完成之后进行点击确定,然后若设置正确的话下图中的更新就可用:

否则不可用,然后进行翻译,在翻译之前可进行翻译验证,检查是否有错误,检查无误后就可以开始进行正常的配置了。

在Zend_Framework中还需要进行多语言的配置。首先在application文件夹下的application.ini文件中需要进行如下的配置:
;============Zend_Translate
resources.locale.default="zh_CN"
resources.translate.registry_key="Zend_Translate"
resources.translate.adapter="gettext"
resources.translate.options.scan="filename"
resources.translate.locale="zh_CN"
resources.translate.data = APPLICATION_PATH"/langs/"

上面的文件的意思如下,首先,resource.locale.default="zh_CN"是指系统默认语言环境,下面的registry_key是指使用Zend_Translate,translate.adapter="gettext"是表明使用的是gettext适配器,最后的那个translate.data=APPLICATION_PATH"/langs/"是说明相关的语言文件所在的位置,这样在ini文件中就把最基础的相关参数配置好了,接下来是进行Bootstrap.php,也就是引导文件中进行相关的配置,Bootstrap.php中需要写入如下的代码:

 1 public function _initTranslate() 
2 {

3 //首先读取相关的配置文件
$options=$this->getOption("resources");
$options=$options["translate"];
if(!isset($options["data"])){
throw new Zend_Application_Resources_Exception("No translation resources provided");
}
$adapter=isset($options["adapter"])?$options["adapter"]:Zend_Translate::AN_GETTEXT;
$session=new Zend_Session_Namespace("locale");
if($session->locale){
$locale=$secsson->locale;
}else{
$locale=isset($options["locale"])?$option["locale"]:new Zend_Local(Zend_Locale::BROWSER);
$session->locale=$locale;
}
$date=$options["data"];
$translateOptions=isset($options["option"])?$options["option"]:array();
$translate=new Zend_Translate($adapte,$locale,$data,$translateOptions);
Zend_Registry::set("Zend_Translate",$translate);
}

以上的就是相关的关于多语言的相关的一些配置上面的配置完成之后就需要进行使用了,在controller中的使用方法是如下代码:

public function indexAction()
{
//首先取得已经注册了的键值
$translate=Zend_Registry::get("Zend_Translate");
$translate->_('msgid');
}

视图文件中的使用为:

<h4><?php echo $this->translate('translate') ?></h4>

Zend_Frameowrk中进行多语言国际化的相关的配置和使用的更多相关文章

  1. Java同步和异步过程中消息语言国际化处理策略

    在Java后端做消息内容的语言国际化处理时可以通过Spring中MessageSource接口的来实现,但是MessageSource接口需要用到Locale对象, 而Locale类又是根据前端传过来 ...

  2. 第九篇:在SOUI中使用多语言翻译

    为UI在不同地区显示不同的语言是产品国际化的一个重要要求. 在SOUI中实现了一套类似QT的多语言翻译机制:布局XML不需要调整,程序代码也不需要调整,只需要为不同地区的用户提供不同的语言翻译文件即可 ...

  3. jquery/vue/react前端多语言国际化翻译方案指南

    ❝ 本文章共3470字,预计阅读时间5-10分钟. ❞ 国际化-前言 每个开发者能希望编写的程序可以让全世界的用户使用,它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素.换种说法,「应用程序 ...

  4. 学习PHP中有趣的字符集国际化验证功能

    今天的内容非常简单,不过也很有趣.不知道大家有没有经历过这样的事情,就是在某些字体下,0 和 O 不好区分,1 和 l 也是很难看清楚.当然,现在大部分的编辑器和 IDE 的默认字体都是会选择那些比较 ...

  5. [原创]java WEB学习笔记69:Struts2 学习之路-- 消息处理与国际化,概述,配置国际资源文件,访问国际化消息,通过超链接切换语言

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. (三)Qt语言国际化

    Vs 2010+ Qt5 实现语言国际化 创建一个工程,cpp代码如下: 1.创建工程 #include "languageinternationalized.h" #includ ...

  7. i18next-页面层语言国际化js框架介绍

    因为工作需要,最近研究了下网站语言国际化的问题,根据当前项目架构,寻求一种较好的解决方案.首先总结下项目中语言切换实现方式大概有以下几种: 1,一种语言一套页面,如:index_CN.html,ind ...

  8. iOS语言国际化

    参考网站:http://blog.sina.com.cn/s/blog_7b9d64af0101jncz.html   语言国际化:根据系统不同的语言自动切换 Xcode6.2   一.在不同语言下工 ...

  9. 今天给大家分享一下Android中的资源与国际化的问题

    摘要:该文章将向大家分享Android中的资源与国际化的问题. 今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layo ...

随机推荐

  1. Oracle创建数据库

    Oracle创建数据库有三种方式:一.使用DBCA(Database Configuration Assistant 数据库配置助手):二.使用 create database指令:三.在安装数据库软 ...

  2. HTML 在安卓手机端软键盘弹出顶起页面布局的解决办法

    $('body').height($('body')[0].clientHeight); 以上是背景即BODY被顶起的解决办法. 如果是footer被顶起,则可以用判断解决, $('input').f ...

  3. [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 980  Solved: 450[Submit][ ...

  4. Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法

    VirtualBox新建虚拟机时报错,不能为虚拟机打开一个新任务的原因 解决办法如下 1.保证bios里的virtualization technology的选项开启,不同电脑BIOS设置可能会不一样 ...

  5. ANdroid URL

    1 Android开源项目和工具分类 http://blog.csdn.net/shimiso/article/details/40889361 2 分享45个android实例源码 http://w ...

  6. Baltic2008联合内阁

    Description      N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如 ...

  7. JQuery筛选器全系列介绍

    jQuery提供了强大的选择器让我们获取对象.在这边,我人为地将jQuery选择器分为两大部分:选择对象和筛选条件.选择对象表示要获取什么对象,筛选条件是对获取的对象进行筛选,最终留下符合某些特征的对 ...

  8. Python之路 day2 字符编码及转换

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa import sys print("sys default encodin ...

  9. Oracle笔记二

    一.数据库语言分类  二.DML之数据插入 把一个表中的数据查询出来插入另外一个表中. create table student(id number,name varchar2(20),age num ...

  10. Python下载进度条

    import dialog,e32,appuifw def ru(x):return x.decode('utf8') def qu(): appuifw.note(ru('已取消')) wait.c ...