2013-03-04 77 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