fuelphpのエラー文言を日本語化する

Posted by Tatsuyano on Tue, Jul 29, 2014
In
Tags php

config.phpに設定を追加

app/config/config.php

//'language'           => 'en', // Default language
//'language_fallback'  => 'en', // Fallback language when file isn't available for default language
//'locale'             => 'en_US', // PHP set_locale() setting, null to not set
'language'           => 'ja',
'language_fallback'  => 'en',
'locale'             => 'ja_JP.UTF-8',

langディレクトリに日本語用のディレクトリを作成

mkdir app/lang/ja
touch app/lang/ja/validation.php

validation.phpの設定は core/lang/en/validation.php を参照 設定されているkey(メソッド)は、core/classes/validation.phpで設定されている

<?php
return array(
    'required'         => '「:label」は必須です',
    'min_length'       => '「:label」は:param:1文字以上で入力してください',
    'max_length'       => '「:label」は:param:1文字以内で入力してください',
    'exact_length'     => '「:label」は:param:1文字で入力してください',
    'match_value'      => '「:label」は「:param:1」と一致していません',
    'match_pattern'    => '「:label」はパターン「:param:1」と一致しません',
    'match_field'      => '「:label」は「:param:1」と一致していません',
    'valid_email'      => '「:label」はメールアドレスが不正です',
    'valid_emails'     => '「:label」に不正なメールアドレスが含まれてます',
    'valid_url'        => '「:label」は不正なURLです',
    'valid_ip'         => '「:label」は不正なIPアドレスです',
    'numeric_min'      => '「:label」は:param:1以上で入力してください',
    'numeric_max'      => '「:label」は:param:1以内で入力してください',
    'valid_string'     => '「:label」は:param:1で入力する必要があります',
);

自前のvalidation(helperクラス)を作成する

mkdir app/classes/helper
touch app/classes/helper/myvalidation.php

app/classes/helper/myvalidation.php

<?php
class Helper_MyValidation
{
    /**
     * 数字をチェックするバリデーション
     *
     * @param  string val
     * @return bool   numeric or blank is 'true'.
     */
    public static function _validation_numeric_only($val)
    {
        mb_regex_encoding("UTF-8");
        return preg_match("/^[\d]*$/", $val) === 1;
    }
}

自作したメソッドのアラートを登録する

cat fuel/app/lang/ja/validation.php | grep numeric_only
'numeric_only'     => '「:label」は数字のみで入力してください',

controllerで自作のバリデーションの呼び出し

app/classes/controller/hoge.php

public function action_create()
{
  $val = Validation::forge();
  $val->add_callable('Helper_MyValidation');
  $val->add_field('name','名前','required|min_length[2]|max_length[30]');
  $val->add_field('email','Email','required|valid_email');
  $val->add_field('tel','電話番号','numeric_only');

どこでバリデーションを呼ぶべきか

modelかcontroller どちらに実装すべきかは迷いましたが、今回はcontrollerに実装するようにしました。 理由はfieldsetを使わないからです。

fieldsetは便利ですが、どうしても細かいところに手が届かないのと、デザイナーさんと分業するには、少し勝手が悪いかなあと思いました。

参考サイト

関連する記事