无法在cakephp中更改表单字段名称

时间:2013-03-04 11:51:27

标签: cakephp

我在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中如何工作。

谢谢!

1 个答案:

答案 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之间还有其他一些变化,所以在所有情况下,通过阅读手册让自己熟悉整个概念。