Project

General

Profile

Bug(バグ) #1967

『言語:日本語』の状態でプロフィール登録・プロフィール変更の「"%value%" is too long」が翻訳されない

Added by Kiwa Sakai over 8 years ago. Updated about 8 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2011-03-23
Due date:
% Done:

100%

3.6 で発生するか:
Yes
3.8 で発生するか:
Unknown (未調査)

Description

内容

『言語:日本語』の状態でプロフィール登録・プロフィール変更に表示されるエラーメッセージ「"%value%" is too long」が翻訳されず、英語のまま表示される。

  • プロフィール登録では、
    • (1)ニックネーム
    • (2)性別
    • (3)誕生日
    • (4)都道府県
    • (5)自己紹介
    • (6)管理画面から追加した独自プロフィール
    • (7)秘密の質問
    • (8)秘密の質問への答え
    • (9)年齢の公開範囲
    • (10)パスワード
    • (11)パスワード再入力
  • プロフィール変更では、
    • (1)ニックネーム
    • (2)性別
    • (3)誕生日
    • (4)都道府県
    • (5)自己紹介
    • (6)管理画面から追加した独自プロフィール

があるが、この問題を受けるのは (1) のニックネーム(最大64文字長)のみのようである。

ニックネームに(半角全角問わず、その文字数が)64文字を超える文字列を設定しようとした場合、PC版、携帯版のどちらも

"あああああいいいいいうううううえええええおおおおおかかかかかきききききくくくくくけけけけけこここここさささささしししししすすすすす" is too long (64 characters max).

のようなエラーメッセージが表示される(上記は「あいうえおかきくけこさしす」の13文字を5個ずつ=65文字書いた例である。もちろんだが、1文字減らして64文字にするとエラーメッセージは表示されない)。

発生確認バージョン

OpenPNE 3.6beta8
OpenPNE 3.4.9.2

原因

form_member.ja.xml に該当ワードの翻訳がない。

修正内容

bug-1967.patch View - 修正パッチ (1.16 KB) Kiwa Sakai, 2011-03-23 12:18


Related issues

Related to OpenPNE 3 - Backport(バックポート) #1968: 『言語:日本語』の状態でプロフィール登録・プロフィール変更の「"%value%" is too long」が翻訳されない Fixed(完了) 2011-03-23
Related to OpenPNE 3 - Backport(バックポート) #1991: 『言語:日本語』の状態でプロフィール登録・プロフィール変更の「"%value%" is too long」が翻訳されない Fixed(完了) 2011-03-23

Associated revisions

Revision d904bbc4 (diff)
Added by Naoya Tozuka over 8 years ago

(fixes #1967) copy the translation catalogue item for '"%value%" is too long' to 'form_member' from 'messages'

History

#1 Updated by Kiwa Sakai over 8 years ago

修正パッチを添付します。

#2 Updated by Minoru Takai over 8 years ago

考えられる解決方法

pc_frontend/i18n 等にある messages.ja.xml の

      <trans-unit id="">
        <source>"%value%" is too long (%max_length% characters max).</source>
        <target>%max_length%文字以内で入力してください。</target>
      </trans-unit>

この部分を form_member.ja.xml にコピーする。

この問題の原因と背景

「"%value%" is too long」の翻訳は、 messages.ja.xml には記述されています。

messages.*.xml や form_member.*.xml はそれぞれ翻訳カタログと呼ばれるもので、i18n の機構による __() メソッドなどで翻訳がされる場合には、「指定されている1つのカタログ」によって翻訳が実行されます。

この問題が出る箇所は、カタログが form_member と指定されており、 messages カタログは読み込まれていません。

$ ack 'form_member' -C
lib/form/doctrine/MemberForm.class.php
30-    $this->widgetSchema->setLabel('name', '%nickname%');
31-    $this->widgetSchema->setNameFormat('member[%s]');
32:    $this->widgetSchema->getFormFormatter()->setTranslationCatalogue('form_member');
33-  }
34-

明示的にカタログを指定しない場合は、デフォルトのカタログとして messages カタログが読み込まれるようになっています。

今回は、当該の箇所で用いられる form_member カタログに「"%value%" is too long」の翻訳が記述されていなかったため、翻訳されない問題が生じています。

解決方法の妥当性について

form_member カタログに messages カタログと同一の翻訳を複製することで問題は解消できますが、これが好ましい方法なのかについては議論の余地があります。

同じ翻訳内容を複製する対応を行ってしまうと、その翻訳内容を変更したときに複製した他の全ての箇所で同様の修正を施す必要が生じてしまいます。保守性に問題を来たす可能性を十分考慮しなければなりません。

「"%value%" is too long」の翻訳をしたい箇所が複数あり、その箇所が互いに異なるカタログを用いていた場合(まさに今回の場合)は、それぞれのカタログに同じ翻訳内容を記述するしかないと判断しています。

これは、翻訳カタログを2つ以上読み込んだり、カタログ間で翻訳内容を継承する仕組みが(少なくとも現在の) symfony に用意されていないためです。

まとめ

解決方法の妥当性を検討した上で、form_member カタログへ翻訳を複製する方法で対応します。

上記の検討内容に誤りがある場合や、より適切な対応方法が考えられる場合はコメントを頂ければ幸いです。

#3 Updated by Naoya Tozuka over 8 years ago

  • Assignee set to Naoya Tozuka

#4 Updated by Naoya Tozuka over 8 years ago

  • Target version set to OpenPNE3.6beta9
  • 3.6 で発生するか set to Yes

#5 Updated by Naoya Tozuka over 8 years ago

  • Status changed from New(新規) to Accepted(着手)

#6 Updated by Naoya Tozuka over 8 years ago

  • Target version deleted (OpenPNE3.6beta9)
  • 3.6 で発生するか deleted (Yes)

#7 Updated by Naoya Tozuka over 8 years ago

messages以外のカタログを参照しつつmessagesカタログに含まれる翻訳語を引き当てたい場合に、参照する(messages以外の)カタログにも同一の記述をしなければならず不合理であり保守性に欠けますが、これは高井さんの指摘の通り現状のSymfony(sfMessageFormat)の実装:

  • カタログが指定されていない場合にはmessagesカタログを見に行く
  • カタログが指定されていて、かつそのカタログに翻訳語が存在しない場合には何もしない(代わりにmessagesカタログを見に行くようにはなっていない)

に起因するものであり、現時点ではここに修正を加えるのではなく、現状のsfMessageFormatの仕様を前提に(翻訳語のコピーで)対処する酒井・高井案を支持します。

#8 Updated by Naoya Tozuka over 8 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 d904bbc4b12c59c4b21aa245e3a4880440be2624 で適用されました。

#9 Updated by Naoya Tozuka over 8 years ago

更新履歴 commit:"e1557b055f62732feb62553175d9b110feec086e" で適用されました。

#10 Updated by Naoya Tozuka over 8 years ago

更新履歴 commit:"5b9de01f16e70d9eb993b8cd6cf2c9db2150ad34" で適用されました。

#11 Updated by Minoru Takai over 8 years ago

  • Target version set to OpenPNE 3.7.0
  • 3.6 で発生するか set to Yes

master ブランチのソースコードにて、動作テストおよびコードチェックを行いました。

動作テスト

  • 修正適用前(差分適用前に symfony cc して動作テスト)
    • PC版:プロフィール登録(メンバー登録)
      • (省略)
    • PC版:プロフィール変更(マイホームからプロフィール変更画面)
      • 【NG】翻訳されていない
    • 携帯版:プロフィール変更(マイホームからプロフィール変更画面)
      • 【NG】翻訳されていない
    • 携帯版:プロフィール登録(メンバー登録)
      • (省略)
  • 修正適用後(差分適用後に symfony cc して動作テスト)
    • PC版:プロフィール登録(メンバー登録)
      • (省略)
    • PC版:プロフィール変更(マイホームからプロフィール変更画面)
      • 【OK】想定する文言で翻訳されている
    • 携帯版:プロフィール変更(マイホームからプロフィール変更画面)
      • 【OK】想定する文言で翻訳されている
    • 携帯版:プロフィール登録(メンバー登録)
      • (省略)

上記は全て Firefox4 および FireMobileSimulator による確認です(携帯端末での実機テストはしていません:実機に依存するものではないため実機テストは不要だと判断しています)。

※ 上記のテストしか行っていませんが、 3.4.x 向けのテスト結果があり、修正による影響が十分想定できるため、上記のテストのみで十分だと判断しています。

以上、修正に問題はないと判断できます。

コードチェック

  • 修正内容自体
    • 想定した解決方法に従って、修正が施されている
    • コピーペーストのミスや余計な記述などは含まれていない
  • コーディング規約の観点
    • 翻訳の追加位置に特に問題はない(ファイルの末に追加している)
    • インデントも適切である(ハードタブが不適切に含まれたりスペース数に過不足はない)

上記は 3.4.x での修正で確認した内容と同一ですが、改めて master ブランチへの取り込み内容を確認した上で、修正内容に問題はないと判断しています。

#12 Updated by Minoru Takai over 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

#13 Updated by Minoru Takai over 8 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

note-11 のコードチェックと動作テストを以て、完了とします。

#14 Updated by Shingo Yamada about 8 years ago

  • 360対象 set to beta13

Also available in: Atom PDF