0

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

谢谢!

4

1 回答 1

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

例如,要进行“荷兰语”翻译(语言环境“nld”),此文件:

app/Locale/nld/LC_MESSAGES/default.po

应该创建,包含:

msgid  "hello"
msgstr "hallo"

现在,通过将语言环境切换为“nld”(例如在beforeFilter()您的 AppController 中;

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

于 2013-03-04T15:37:35.460 回答