JavaEE
BeanValidation
hibernate-validator
5

Bean Validation (Hibernate Validator) の日本語メッセージを考えてみませんか?

このエントリについて

Java EE を構成する仕様の一つに Bean Validation があります。これはその名の通り、JavaBean のプロパティをバリデーションするためのもので、Java EE だけでなく、Spring Framework など様々な場所で利用されています。

Bean Validation の参照実装は Hibernate Validator です。この Hibernate Validator、バリデーションに引っ掛かった時に表示するメッセージリソースも様々な言語に翻訳されているのですが、GitHub の次のページを見ると分かるように何と日本語のメッセージリソースが未だに無いのです!

https://github.com/hibernate/hibernate-validator/tree/master/engine/src/main/resources/org/hibernate/validator

実は以前、Bean Validation の JavaFX 対応についての blog を書いたのですが、その blog を Hibernate Validator の開発者の方にも読んで頂き、日本語のメッセージリソースがまだ存在しないことをその時に教えてもらいました。

Twitter で本件について呼びかけも行った のですが、現時点で特にコントリビュートもなく、やはりここは言い出しっぺの法則ということで、自分がドラフトを作ってみました。

こういうのは個人でがっとプルリクを出すより、みんなで内容を考えたものをコントリビュートした方がいいのかなと思い、Qiita で公開して意見を募ることにしました (実は Qiita 初投稿) 。

日本語メッセージリソースのドラフト

javax.validation.constraints.AssertFalse.message     = false にしてください
javax.validation.constraints.AssertTrue.message      = true にしてください
javax.validation.constraints.DecimalMax.message      = ${inclusive == true ? 'or equal to ' : ''}{value} より小さな数値にしてください
javax.validation.constraints.DecimalMin.message      = ${inclusive == true ? 'or equal to ' : ''}{value} より大きな数値にしてください
javax.validation.constraints.Digits.message          = 数値は次の範囲にしてください (<整数 {integer} 桁>.<小数点以下 {fraction} 桁>)
javax.validation.constraints.Email.message           = 電子メールアドレスとして正しい形式にしてください
javax.validation.constraints.Future.message          = 未来の日付にしてください
javax.validation.constraints.FutureOrPresent.message = 現在もしくは未来の日付にしてください
javax.validation.constraints.Max.message             = {value} 以下のサイズにしてください
javax.validation.constraints.Min.message             = {value} 以上のサイズにしてください
javax.validation.constraints.Negative.message        = 0 より小さな値にしてください
javax.validation.constraints.NegativeOrZero.message  = 0 以下の値にしてください
javax.validation.constraints.NotBlank.message        = 空白は許可されていません
javax.validation.constraints.NotEmpty.message        = 空文字は許可されていません
javax.validation.constraints.NotNull.message         = null は許可されていません
javax.validation.constraints.Null.message            = null にしてください
javax.validation.constraints.Past.message            = 過去の日付にしてください
javax.validation.constraints.PastOrPresent.message   = 現在もしくは過去の日付にしてください
javax.validation.constraints.Pattern.message         = "{regexp}" のパターンにマッチさせてください
javax.validation.constraints.Positive.message        = 0 より大きな値にしてください
javax.validation.constraints.PositiveOrZero.message  = 0 以上の値にしてください
javax.validation.constraints.Size.message            = {min} から {max} の間のサイズにしてください

org.hibernate.validator.constraints.CreditCardNumber.message        = クレジットカードの番号が正しくありません
org.hibernate.validator.constraints.Currency.message                = 通貨が正しくありません ({value} の1種にしてください)
org.hibernate.validator.constraints.EAN.message                     = 正しくない {type} バーコードです
org.hibernate.validator.constraints.Email.message                   = 電子メールとして正しい形式にしてください
org.hibernate.validator.constraints.ISBN.message                    = 正しくない ISBN です
org.hibernate.validator.constraints.Length.message                  = {min} から {max} の間の長さにしてください
org.hibernate.validator.constraints.CodePointLength.message         = {min} から {max} の間の長さにしてください
org.hibernate.validator.constraints.LuhnCheck.message               = ${validatedValue} のチェックデジットが正しくありません (Luhn モデュラス10アルゴリズム)
org.hibernate.validator.constraints.Mod10Check.message              = ${validatedValue} のチェックデジットが正しくありません (モデュラス10)
org.hibernate.validator.constraints.Mod11Check.message              = ${validatedValue} のチェックデジットが正しくありません (モデュラス11)
org.hibernate.validator.constraints.ModCheck.message                = ${validatedValue} のチェックデジットが正しくありません (${modType} のチェックサムが失敗しました)
org.hibernate.validator.constraints.NotBlank.message                = 空白は許可されてません
org.hibernate.validator.constraints.NotEmpty.message                = 空文字は許可されていません
org.hibernate.validator.constraints.ParametersScriptAssert.message  = 次のスクリプト式 "{script}" を用いた評価結果が true になりませんでした
org.hibernate.validator.constraints.Range.message                   = {min} から {max} の間にしてください
org.hibernate.validator.constraints.SafeHtml.message                = 安全ではない HTML コンテンツです
org.hibernate.validator.constraints.ScriptAssert.message            = 次のスクリプト式 "{script}" による評価結果が true になりませんでした
org.hibernate.validator.constraints.UniqueElements.message          = 要素は全てユニークにしてください
org.hibernate.validator.constraints.URL.message                     = URL として正しい形式にしてください

org.hibernate.validator.constraints.br.CNPJ.message                 = ブラジル法人用税務登記番号 (CNPJ) が正しくありません
org.hibernate.validator.constraints.br.CPF.message                  = ブラジル個人用納税者番号 (CPF) が正しくありません
org.hibernate.validator.constraints.br.TituloEleitoral.message      = ブラジル投票者IDカード番号が正しくありません

org.hibernate.validator.constraints.pl.REGON.message                = ポーランド国内経済登録番号 (REGON) が正しくありません
org.hibernate.validator.constraints.pl.NIP.message                  = ポーランド納税者番号 (NIP) が正しくありません
org.hibernate.validator.constraints.pl.PESEL.message                = ポーランド個人ID番号 (PESEL) が正しくありません

org.hibernate.validator.constraints.time.DurationMax.message        = ${inclusive == true ? ' or equal to' : ''}${days == 0 ? '' : days == 1 ? ' 1 day' : ' ' += days += ' days'}${hours == 0 ? '' : hours == 1 ? ' 1 hour' : ' ' += hours += ' hours'}${minutes == 0 ? '' : minutes == 1 ? ' 1 minute' : ' ' += minutes += ' minutes'}${seconds == 0 ? '' : seconds == 1 ? ' 1 second' : ' ' += seconds += ' seconds'}${millis == 0 ? '' : millis == 1 ? ' 1 milli' : ' ' += millis += ' millis'}${nanos == 0 ? '' : nanos == 1 ? ' 1 nano' : ' ' += nanos += ' nanos'} より短い時間にしてください
org.hibernate.validator.constraints.time.DurationMin.message        = ${inclusive == true ? ' or equal to' : ''}${days == 0 ? '' : days == 1 ? ' 1 day' : ' ' += days += ' days'}${hours == 0 ? '' : hours == 1 ? ' 1 hour' : ' ' += hours += ' hours'}${minutes == 0 ? '' : minutes == 1 ? ' 1 minute' : ' ' += minutes += ' minutes'}${seconds == 0 ? '' : seconds == 1 ? ' 1 second' : ' ' += seconds += ' seconds'}${millis == 0 ? '' : millis == 1 ? ' 1 milli' : ' ' += millis += ' millis'}${nanos == 0 ? '' : nanos == 1 ? ' 1 nano' : ' ' += nanos += ' nanos'} より長い時間にしてください

原文は こちら になります。

このドラフトの扱いについて

このドラフトについて皆さんから意見を頂きたいと考えています。1ヶ月ほど様子を見て、皆さんから頂いた意見を反映したプルリクエストを出すつもりです。

特に次の点について意見を聞きたいなと思っています。

  • 全体的な語調
    • ですます調で揃えている点など
  • チェックデジットについてのメッセージ
    • 業界用語的にもっとふさわしいメッセージがありそう
  • ブラジルやポーランドといった国固有のバリデーションメッセージがある
    • 訳す必要あるかなあ? とも思いましたが、一応自分で調べた範囲で書いてみました
    • もし滞在経験者とかいたら是非ご意見を聞きたいです

というわけで皆さんどしどしご意見ください。