在使用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. JS存取Cookie值

    一:存Cookie //存Cookie document.cookie = "id=" + escape(value); 二:取Cookie //提取Cookie值 functio ...

  2. MFC编程入门之二十三(常用控件:按钮控件的编程实例)

    上一节讲了按钮控件Button.Radio Button和Check Box的基本用法,本节继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件开发中如何使用. 因为Button控件在前 ...

  3. 转:OSGi 入门篇:模块层

    OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...

  4. npm install报错Error: ENOENT

    E:\projects\ueditor\ueditor1_4_3_3-src>npm installError: ENOENT, stat 'C:\Users\Lucas\AppData\Roa ...

  5. java.lang.Class<T> -- 反射机制

    1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  6. ArcGIS创建tpk切片缓存

    一. 背景知识 1. tpk是什么? 从地图或底图生成切片,并将切片进行打包从而创建单个压缩的 .tpk 文件.切片包(.tpk)是在地图或栅格数据集中能作为 Web 切片或 Web 高程图层发布的一 ...

  7. pyhon——进程线程、与协程基础概述

    一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...

  8. angularjs路由

    需要引入angular.js,angular-ui-router.min.js <ul> <li><a href="#home">首页</ ...

  9. 检查失败,<master>分支有过其他更新,请先在本地合并<master>分支的代码

  10. ShellExecute调用另外一个进程(demo为一个控制led的一段代码)

     public enum ShowCommands : int         {             SW_HIDE = 0,             SW_SHOWNORMAL = 1,    ...