CodeIgniter 表单验证多语言标签
Posted
技术标签:
【中文标题】CodeIgniter 表单验证多语言标签【英文标题】:CodeIgniter form validation multilanguage labels 【发布时间】:2012-08-17 14:08:03 【问题描述】:我目前正在开发一个可以用 3 种不同语言查看的网站。我已将所有文本放入语言文件中,几乎所有内容都按预期工作。
诸如分页配置之类的东西我已经放入配置文件并放入application/config
,如下所示:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['num_links'] = 2;
$config['full_tag_open'] = '<p class="pagination">';
$config['full_tag_close'] = '</p>';
$config['first_link'] = '« ' . lang('first');
$config['last_link'] = lang('last') . ' »';
而且效果很好,但我已经为我的表单验证配置文件尝试了相同的方法,如下所示:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
'login' => array(
array(
'field' => 'login_email',
'label' => lang('emailaddress'),
'rules' => 'trim|required|valid_email|min_length[6]'
),
array(
'field' => 'login_password',
'label' => lang('password'),
'rules' => 'trim|required'
),
),
但这似乎不起作用。看起来这个配置文件是在语言文件/库之前加载的。 老实说,目前我真的不知道如何解决这个问题,除了再次从配置文件中取出所有内容并将其放入控制器中,但我宁愿不这样做。
任何想法如何解决这个问题?
【问题讨论】:
如果有帮助,请检查此***.com/questions/1328420/… @HappyApe 谢谢,但我已经看到了,我已经使用了语言库和帮助程序。问题是表单验证配置文件似乎在所有语言内容之前加载。 【参考方案1】:如果您在定义表单验证规则时检查字段转换是如何完成的(参见下面的示例并考虑第二个参数):
$this->form_validation->set_rules('first_name', 'lang:first_name', 'required');
您可以在实际代码中看到您做错了什么。 而不是:
array(
'field' => 'login_password',
'label' => lang('password'),
'rules' => 'trim|required'
),
要走的路是:
array(
'field' => 'login_password',
'label' => 'lang:password',
'rules' => 'trim|required'
),
【讨论】:
有没有像这样使用自定义翻译助手功能的选项?我有一个扩展默认翻译的trans
函数。试过trans:password
,但没用。
太棒了!这确实是一个不错的解决方案【参考方案2】:
@Krishna Raj K 我像你一样使用 trans 函数。我已经修好了。 我使用wiredesignz hmvc的另一件事。 MY_Form_validation.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/** application/libraries/MY_Form_validation **/
class MY_Form_validation extends CI_Form_validation
public $CI;
protected function _translate_fieldname($fieldname)
// Do we need to translate the field name? We look for the prefix 'trans:' to determine this
if (sscanf($fieldname, 'trans:%s', $line) === 1 )
return trans($line);
return $fieldname;
模型中的规则
'parent_id' => array(
'field'=>'parent_id',
'label'=>'trans:main.taxonomy.column.parent_id.name',
'rules'=>'is_natural_no_zero',
),
在控制器中,你必须按照这个顺序加载
//helper
$this->load->helper(array('array','form','anhtocon','trans'));
//library
$this->load->library(array('Nested_set','form_validation'));
$this->form_validation->CI =& $this;
//model
$this->load->model('taxonomy_model');
【讨论】:
以上是关于CodeIgniter 表单验证多语言标签的主要内容,如果未能解决你的问题,请参考以下文章