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>
戻る