プロジェクト

全般

プロフィール

Bug(バグ) #4104

kaoru n さんがほぼ8年前に更新

h3. Overview (現象) 

 #2909 にて、文字数チェックを追加したがエラーメッセージが日本語に翻訳されない。 

 h3. Causes (原因) 

 https://github.com/openpne/OpenPNE3/blob/master/apps/pc_backend/modules/mail/actions/actions.class.php#L69 
 <pre> 
 <code class="php">$this->getUser()->setFlash('error', (string)$this->form->getErrorSchema(), false);</code> 
 </pre> 
 https://github.com/openpne/OpenPNE3/blob/master/apps/pc_backend/templates/layout.php#L44 
 <pre> 
 <code class="php"><p id="flashError" class="flash"><?php echo __($sf_user->getFlash('error')) ?></p></code> 
 </pre> 
 のようにフラッシュメッセージにてエラーメッセージを表示しようとしていた。 
 フラッシュメッセージにて表示する際に翻訳を試みているが、既に編集された文字列であるため翻訳されない。 文字列チェック時のエラーメッセージは 
 https://github.com/openpne/OpenPNE3/blob/master/lib/vendor/symfony/lib/validator/sfValidatorString.class.php#L41-L42 
 <pre> 
 <code class="php">$this->addMessage('max_length', '"%value%" is too long (%max_length% characters max).'); 
 $this->addMessage('min_length', '"%value%" is too short (%min_length% characters min).');</code> 
 </pre> 
 のように、文字数を都度置換して生成されるが、setFlash() の時点で置換済みであるため、layout.php#L44 にて翻訳できない。 

 h3. Way to fix (修正内容) 

 下記のように renderGlobalErrors() または renderError() を使用して表示するように変更する。 
 <pre> 
 <code class="diff">--- a/apps/pc_backend/modules/mail/actions/actions.class.php 
 +++ b/apps/pc_backend/modules/mail/actions/actions.class.php 
 @@ -66,7 +66,6 @@ class mailActions extends sfActions 
          $this->getUser()->setFlash('notice', 'Saved.'); 
          $this->redirect('@mail_template_specified?name='.$this->name); 
        } 
 -        $this->getUser()->setFlash('error', (string)$this->form->getErrorSchema(), false); 
      } 
    } 

 --- a/apps/pc_backend/modules/mail/templates/templateSuccess.php 
 +++ b/apps/pc_backend/modules/mail/templates/templateSuccess.php 
 @@ -70,10 +70,14 @@ 
  <h3><?php echo __($rawConfig[$_currentTarget][$_currentKey]['caption']) ?></h3> 

  <?php echo $form->renderFormTag(url_for('@mail_template_specified?name='.$name), array('method' => 'post')); ?> 
 +<?php echo $form->renderGlobalErrors() ?> 
  <?php echo $form->renderHiddenFields(); ?> 
  <?php if (isset($form['title'])): ?> 
 -<?php echo $form['title']->renderLabel() ?> <?php echo $form['title']->render(array('class' => 'title')) ?> 
 +<?php echo $form['title']->renderLabel() ?> 
 +<?php echo $form['title']->renderError() ?> 
 +<?php echo $form['title']->render(array('class' => 'title')) ?> 
  <?php endif; ?> 
 +<?php echo $form['template']->renderError() ?> 
  <?php echo $form['template']->render(array('rows' => 30, 'cols' => 72)) ?> 

  <input type="submit" value="<?php echo __('Save') ?>"></code> 
 </pre> 

戻る