cakephp中的动态模型翻译

Posted

技术标签:

【中文标题】cakephp中的动态模型翻译【英文标题】:dynamic model translation in cakephp 【发布时间】:2010-08-18 02:36:28 【问题描述】:

我正在计划构建一个可以灵活翻译成多种语言的cakephp应用程序(需要翻译网页界面和表格内容)。我的问题是当向系统添加新语言时,所有表格都必须为表单中的每个字段提供翻译。

这是我的数据库架构。

创建表fields ( id int(11) NOT NULL AUTO_INCREMENT, table_id int(11) 默认为空, name varchar(50) 默认为空, language_id int(11) 默认“1”, label varchar(255) 默认为空, type varchar(20) 默认为空, required tinyint(1) 默认为空, properties varchar(100) 默认为空, 主键 (id) ) ENGINE=MyISAM AUTO_INCREMENT=13 默认字符集=latin1;

#

languages 表的结构:

#

创建表languages ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) 非空, state tinyint(1) 非空, label varchar(100) 默认为空, default tinyint(1) 默认为空, 主键 (id) ) ENGINE=MyISAM AUTO_INCREMENT=14 默认字符集=latin1;

#

tables 表的结构:

#

创建表tables ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) 默认为空, description varchar(100) 默认为空, 主键 (id) ) ENGINE=MyISAM AUTO_INCREMENT=3 默认字符集=latin1;

#

translations 表的结构:

#

创建表translations ( id int(11) NOT NULL AUTO_INCREMENT, field_id varchar(50) 非空, value varchar(255) 非空, record_id int(11) 默认为空, 主键 (id) ) ENGINE=MyISAM 默认字符集=latin1;

#

fields 表的数据(限制 0,500)

#

插入fieldsidtable_idnamelanguage_idlabeltyperequiredproperties)值 (1,1,'name',1,'Nombre','text',NULL,NULL), (2,1,'name',2,'Name','text',NULL,NULL), (3,2,'name',1,'Name','text',NULL,NULL), (4,2,'country_id',1,'Country','select',NULL,NULL), (5,2,'address',1,'Address','rich',NULL,NULL), (6,2,'tel',1,'电话','文本',NULL,NULL), (7,2,'fax',1,'Fax','text',NULL,NULL), (8,2,'网站',1,'网站','文本',NULL,NULL), (9,2,'email',1,'Email','text',NULL,NULL), (10,2,'图片',1,'图片','上传',NULL,NULL), (11,2,'to',1,'To country','select',NULL,NULL), (12,2,'latlng',1,'经纬度','text',NULL,NULL);

提交;

#

languages 表的数据(限制 0,500)

#

插入languagesidnamestatelabeldefault)值 (1,'En',0,'English',NULL), (3,'Fr',0,'France',NULL), (2,'Es',1,'西班牙语',NULL);

提交;

#

tables 表的数据(限制 0,500)

#

插入tablesidnamedescription)值 (1,'国家','国家'), (2,'大使馆','大使馆');

当我想向例如使馆表添加新记录时,表单助手需要根据语言表中激活的语言数量有许多名为“名称”的字段。

请帮忙。

谢谢你

【问题讨论】:

【参考方案1】:

你试过Translate behavior吗?查找“实用 CakePHP 项目”一书。那里有一章“翻译故事”可能对您有用。

【讨论】:

是的,但它不符合我的要求。在管理员中,我需要为每条记录添加多个翻译的能力。我不想一一翻译每个语言。 你熟悉croogo吗?如果没有,您可以查看代码。它使用插件(翻译)将管理员中的翻译添加到节点(与您希望做的一样),如果我没记错的话,它还使用翻译行为。此外,它只对所有翻译(i18n)使用一个表,这可能会大大简化事情。

以上是关于cakephp中的动态模型翻译的主要内容,如果未能解决你的问题,请参考以下文章

布局中的 CakePHP 动态菜单内容

CakePHP 中的多级模型关联

cakephp 中的正确模型关联

Cakephp 3 先保存翻译。之后的原始实体

CakePHP:向表单添加字段(动态)

CakePHP 3.x 如果管理员,我需要检查模型中的前缀