SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

Zend Framework入門(12):
フォームのカスタマイズ - Zend_Form -(後編)

Zend Frameworkによる実践的なPHPアプリケーション開発 12

  • X ポスト
  • このエントリーをはてなブックマークに追加

エラーメッセージの日本語化

 最後に、フォームに間違った値を入力した場合に表示されるメッセージを日本語で表示する方法について説明します。これらのメッセージは通常は英語で表示されますが、Zend_Translateモジュールを使うことで"翻訳"された状態で出力することができます。

 ここでは単純な例として、上のサンプルであったメッセージを日本語化することにします。サンプルでは Alnum バリデータ、Regexバリデータ、そしてNotEmptyバリデータ(setRequired) が使われていました。それぞれが出しうるエラーは次のとおりです。

サンプルで出力されうるエラー
バリデータ エラーメッセージ
Alnum '%value%' has not only alphabetic and digit characters
Regex '%value%' does not match against pattern '%pattern%'
NotEmpty Value is empty, but a non-empty value is required

 どのようなバリデータがどのようなメッセージを出力するかについては、各バリデータクラスの_messageTemplates変数を調べることでわかります。

 ここで、AlnumとRegexの出力するエラーがフォームの内容やユーザの入力に左右されるため、変数(%で囲まれた %value% と %pattern%)を含むことに注意して下さい。なお %value% はユーザからの入力、 %pattern% が Regexに与えられた引数です。

 さて、この英語のメッセージを日本語に翻訳してくれる仕組みがZend_Translateです。Zend_Translateには、あらかじめ元のメッセージと対応する翻訳されたメッセージを登録しておけば、必要に応じて翻訳されたメッセージを出力してくれます。

 次の例ではIndexControllerのinitメソッドでZend_Translateのインスタンスを作成し、このインスタンスを利用するようZend_Formを設定する方法を示しています(リスト11)。

リスト11 エラーメッジージの翻訳(サンプルのIndexController.phpより)
...
    public function init()
    {
    $adapter = new Zend_Translate('array',
          array('Value is empty, but a non-empty value is required' =>
            'ここの値が空です。',
            "'%value%' has not only alphabetic and digit characters" =>
            "'%value%' に英数字以外の文字が含まれています",
            "'%value%' does not match against pattern '%pattern%'" =>
            "'%value%' は '%pattern%' にマッチしません。",
            )
                      , 'ja');
    Zend_Form::setDefaultTranslator($adapter);
    ...
    }

 Zend_Translateを作成する方法にはいくつかありますが、今回の例では一番手軽なarrayを利用しました。これは、原文と翻訳された文を組にしたarrayを利用して作成します。次に、Zend_FormのクラスメソッドsetDefaultTranslatorで作成したZend_Translateのインスタンスを登録します。この方法では、エラーメッセージ以外にもZend_Translateでマッチするメッセージがあった場合には翻訳されます。これでエラーのある入力に対する出力は図6のようになります。

図6 日本語化されたエラーメッセージ
日本語化されたエラーメッセージ

 なお、翻訳の範囲には他にもエラーメッセージのみ・特定のフォームやフォーム要素のみに限定することも可能です(リスト12)。

リスト12 翻訳の範囲の指定
//エラーメッセージのみ
Zend_Validate_Abstract::setDefaultTranslator($adapter);

//フォームのみ
Zend_Form::setDefaultTranslator($adapter);

//特定のフォームのみ
$form->setTranslator($adapter);

//特定のフォーム要素のみ
$element->setTranslator($adapter);

まとめ

 今回はZend_Formの機能について詳細に触れてみました。次回はZend_Layoutを紹介する予定です。Zend_Layoutはいわゆるレイアウト機能を提供するモジュールで、ビューモデルを更に二段階に分けて提供します。

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3185 2008/11/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング