仕事でvalid_stringのparam部分のエラーメッセージを日本語化しなければならなかったので、コードを書いた。
今後の参考に慣ればと思い、書き残しておく。
方針
-
core
を拡張する -
lang
ファイルを使う
コード
もういきなりコード紹介
拡張したcoreのコード
app/classes/core/validation/error.php
<?php
class Validation_Error extends Fuel\Core\Validation_Error
{
public static function _init()
{
parent::_init();
\Lang::load('validation_params', true);
}
protected function _replace_tags($msg)
{
// あとでもとに戻すためにコピーしておく
$params = $this->params;
if ($this->rule === 'valid_string')
{
foreach ($this->params as $key => $val)
{
foreach ($val as $k => $v)
{
// ここで param:1 の部分を日本語化
$this->params[$key][$k] = \Lang::get('validation_params.' . $this->rule . '.' . $v) ?: $v;
}
}
}
$msg = parent::_replace_tags($msg);
$this->params = $params;
return $msg;
}
}
作った言語ファイル
app/lang/ja/validation_params.php
<?php
return array(
'valid_string' => array(
'numeric' => '整数',
),
);
bootstrapで読み込む
app/bootstrap.php
<?php
// ...
Autoloader::add_classes(array(
// ...
'Validation_Error' => APPPATH . 'classes/core/validation/error.php',
));
おしまい
念のため最低限必要なときだけ翻訳して、あとは戻すことで影響を最小限にした。
そもそも別のruleとかにしておけばこんなにめんどくさい事はしなくていいんだけど...。