Cakephp本地化和国际化详解

黄舟
发布: 2016-12-20 09:22:47
原创
1324人浏览过

看过cakephp的程序例子的程序员都会发现,在controller或者view中,大多数输出都是用一个函数 __(”xxxx”) 来执的,

这个函数就相当与其他框架中的getText()函数,是根据key值和locale来动态获取相应的语言内容。


 1)什 么是 i18n,l10n
           首 先要先明白Localization & Internationalization两个单词,分别叫本地化和国际化. Localization 表示将 Web 应用转化以适应某种语言(或文化)的需求,而 Internationalization 表示 Web 应用可以被本地化的能力。Internationalization 和 localization 常被缩写为 i18n 和 l10n; 数字 18 和 10 是该单词的第一个字母到最后一个字母之间的字母数量

2)实现本地化语言文件

             任何需要本地化内容的 Controller 都需要首先引用 CakePHP 的 L10n 类。可以在AppController里进行导入,这样就能用于所有的Controller啦

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

//引用 L10n 类:    

立即学习PHP免费学习笔记(深入)”;

 App::import('Core', 'l10n');
登录后复制

class  ProductController extends AppController {     //... }  

 接着,你需要创建相应的语言文件 (文件名为default.po )来管理本地化内容。该文件包含一系列 string 和其 ID,易于组织管理和翻译内容,并保存在对应的语言文件夹下。比如:

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

/app/locale/eng/LC_MESSAGES/default.po (English)   

/app/locale/fre/LC_MESSAGES/default.po (French)
登录后复制

/app/locale/chi/LC_MESSAGES/default.po (Chinese)   

含有本地化内容的文件夹放在 CakePHP 安装目录 /app/locale 下。每种语言对应不同的 3 个字母代码,该代码符合 ISO 639-2 标准。(更多信息,请参考 Library of Congress Website,http://www.loc.gov/standards/iso639-2/php/code_list.php)
一旦你创建了该文件,就可以编辑本地化的内容了。注意每个字符串的键值必须唯一,且包含对应值。下面是简单是例子,

英语语言 default.po 文件的内容:

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

msgid    "purchase"   msgstr     "Please purchase a ball by selecting its name ."     

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

msgid     "search"      msgstr     "Click here to search our product database."   

对应中文语言default.po文件的内容:

 view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制

msgid    "purchase"   msgstr  "请通过选择名字来购买一个球。"  

msgid     "search"      msgstr     "点击搜索我们的产品列表。"
登录后复制
 view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
  

(其中,msgid用来标识字符串,在不同的语言文件中应该保持一致,而msgstr则为对应语言的内容)

.po 文件应用 UTF-8 编码,每个 msmstr 值须限定在 1014 个字符之内。如果你使用 Macintosh 电脑,编辑文件时请确保使用 Unix 换行符 (LF),否则文件将不会被正确地解析。你可轻松地使用 Poedit 来编辑 .po 文件,一个免费的编辑器。

3)设置应用的本地locale(此步可以省略,cakephp会根据用户的浏览器设置来使用相应的语言进行显示)

     1、 在config/core.php中使用configure::write:

 view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制

Configure::write('Config.language' , "chi");  

其中chi代表中文,英文应为eng。

     2、在php文件程序开始前中写入(例如在beforeFilter中根据用户的语言环境来设置相应的语言):

 view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制

$this->Session->write ("Config.language","chi");  

    3、使用以下代码来进行设置

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

App::import('Core', 'L10n');  

$l10n = & new L10n();  

  

$l10n->get('chi');  //设置locale为中文  

  

//然后使用_()函数来实现本地化  

_('msgid');  

4)实现本地化

    在需要实现本地化的地方,调用_()函数

1、直接输出字符串,没有返回值:

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

__("msgid"); 或者  _("msgid", false);  

 

2、间接输出字符串,有返回值:

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

__("msgid",true);  

 

3、还有input要加个label来使他出现中文。

view plaincopy
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

echo $form->input('name',array('label'=>__('msgid',true)));  

 5)没有覆盖的内容

    日期、货币格式的国际化可以直接用php中的setlocale函数来实现。

 以上就是Cakephp本地化和国际化详解 的内容,更多相关内容请关注PHP中文网(www.php.cn)! 

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号