2013-03-04 78 views
0

改变表单字段的名字,我有这种形式在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中工作。

谢谢!

+0

您是否需要更改输入的“名称”或可见的“标签”?值是否必须存储在数据库的不同列中? – thaJeztah 2013-03-04 14:23:32

+0

我只需要可见标签,名称为namn – Akaash 2013-03-04 14:59:40

+1

欢迎使用Stack Overflow。您可以使用[代码示例'{}'](http://i.stack.imgur.com/VYd26.png)工具栏按钮来格式化源代码。这次我为你做了。 – 2013-03-04 15:39:15

回答

4

你将不得不使用CakePHP的“本土化”特点

http://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html

基本上,应该在当前语言翻译任何字符串,应通过__()方法相呼应,例如echo __('hello')

本例中的字符串'hello'是要本地化(翻译)的字符串。 CakePHP使用GNU语言环境文件来定义您的翻译。在这些文件中,有一对字符串,称为msgid(要翻译的字符串/消息)和msgstr(翻译后的字符串)。每一种语言( '语言区域')都有自己的翻译文件,位于:

app/Locale/[locale]/LC_MESSAGES/default.po 

例如,有一个 '荷兰' 翻译(区域设置 '民盟'),此文件:

app/Locale/nld/LC_MESSAGES/default.po 

应创建,包含:

msgid "hello" 
msgstr "hallo" 

现在,通过在AppController中的beforeFilter()区域设置切换到 'NLD'(例如;

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

+0

msgstr“名称*” msgstr“我的文件在.po文件中有同样的东西,但我不知道为什么它不翻译.....#:/views/themed/pages/contact.ctp:39 ”msgid“Name *” msgstr“ Namn *“ – Akaash 2013-03-04 15:48:47

+0

Ehm,你说msgid和msgstr在你的.ctp文件中?你确定'*'是'标签'的一部分,而不是一个单独的文本/元素?请一次开始一步,例如,用一个简单的'你好'来翻译并继续。 – thaJeztah 2013-03-04 16:13:06