我在CakePHP中有这个表单:
echo $form->input('name', array('label' => $j['contact_name']));
echo $form->input('email', array('class' => 'disabled', 'label' => $j['contact_mail']));
echo $form->end(__('Submit', true));
我有两种不同的语言,所以我想将名称更改为名称,但是当我这样做时,它不起作用。任何人都可以帮助我在CakePHP中如何工作。
谢谢!
答案 0 :(得分:4)
您必须使用CakePHP的“本地化”功能
http://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html
基本上,任何应使用当前语言翻译的字符串都应通过__()
方法进行回应,例如echo __('hello')
此示例中的字符串'hello'是要本地化(翻译)的字符串。 CakePHP使用GNU语言环境文件来定义您的翻译。在这些文件中是“对”字符串,称为msgid
(要翻译的字符串/消息)和msgstr
(翻译后的字符串)。每种语言('locale')都有自己的翻译文件,位于:
app/Locale/[locale]/LC_MESSAGES/default.po
例如,要拥有'荷兰'翻译(locale'nld'),此文件:
app/Locale/nld/LC_MESSAGES/default.po
应该创建,包含:
msgid "hello"
msgstr "hallo"
现在,通过将语言环境切换为'nld'(例如在AppController的beforeFilter()
中;
Configure::write('Config.language', 'nld');
将使用'nld'语言环境和此行;
echo _('hello');
将输出:
hallo
在您的情况下,设置标签将是这样的;
echo $this->Form->input('name', array('label' => __('hello')));
重要强>
旧版本(在CakePHP 2.x之前)'回显'翻译后的字符串,而不是返回翻译后的字符串。要在CakePHP 1.x中返回已翻译的字符串,您需要将'true'作为第二个参数传递; echo __('hello', true);
.po文件中的字符串区分大小写,例如Hello !== hello
区域设置文件适用于应用程序中的“短”固定文本,而不是用于转换用户输入的大块文本或“动态”文本。虽然 可以在这些情况下使用它,但它不是设计的。
CakePHP 2.x和1.x之间还有其他一些变化,所以在所有情况下,通过阅读手册让自己熟悉整个概念。