Cakephp本地化和国际化详解

黄舟
Libérer: 2023-03-03 16:14:02
original
1164 Les gens l'ont consulté

看过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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

//引用 L10n 类:

 App::import('Core', 'l10n');
Copier après la connexion

class ProductController extends AppController { //... }


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

view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

/app/locale/fre/LC_MESSAGES/default.po (French)
Copier après la connexion

/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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

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

 view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

msgid     "search"      msgstr     "点击搜索我们的产品列表。"
Copier après la connexion
 view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

  

  

  

  

  

  

  

  

  

  

  

  

  

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

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

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

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

 view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

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

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

 view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

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

view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

$l10n = & new L10n();

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

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

_('msgid');

4)实现本地化

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

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

view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

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

view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

__("msgid",true);

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

view plaincopy
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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


 5)没有覆盖的内容

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

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


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal