アドミン・ジェネレータのフォームラベルの':'をi18nから除外する
アドミン・ジェネレータの作成するeditフォームは、デフォルトで国際化対応してくれてます。それはいいんですが、フォームの各項目のラベルにつく":"まで、__()で括って国際化対応文字列にしちゃってます。
このままでmessages.ja.xmlを作ると、いちいち"my_field_name"と"my_field_name:"を、別々のtrans-unitとして記述するハメになります。
そこで、テンプレートをちょっと変更することにしました。
カスタマイズの準備は、アドミン・ジェネレータのテーマをカスタマイズ/検索フィルタに書いたとおり。
まず、検索フィルタの部分を変更します。
カスタマイズするテーマのtemplate/templates/_filters.php を次のように変更します。
変更前:
<div class="form-row"> <label for="filters_<?php echo $column->getName() ?>">[?php echo __('<?php echo str_replace("'", "\\'", $this->getParameterValue('list.fields.'.$column->getName().'.name')) ?>:') ?]</label>
変更後:
<div class="form-row"> <label for="filters_<?php echo $column->getName() ?>">[?php echo __('<?php echo str_replace("'", "\\'", $this->getParameterValue('list.fields.'.$column->getName().'.name')) ?>') . ':' ?]</label>
次は編集画面側です。
_edit_form.phpを変更すればよいのかと思いきや、どうやら":"をラベルにつけるのは、actionクラスでやっています。
template/actions/actions.class.php に次のようなメソッドがあります。このメソッドの後半で":"を付け加えてます。
protected function getLabels() { return array( <?php foreach ($this->getColumnCategories('edit.display') as $category): ?> <?php foreach ($this->getColumns('edit.display', $category) as $name => $column): ?> '<?php echo $this->getSingularName() ?>{<?php echo $column->getName() ?>}' => '<?php $label_name = str_replace("'", "\\'", $this->getParameterValue('edit.fields.'.$column->getName().'.name')); echo $label_name ?><?php if ($label_name): ?>:<?php endif ?>', <?php endforeach; ?> <?php endforeach; ?> ); }
":"はなくても構わないので、付け加える部分のif文を削除します。
protected function getLabels() { return array( <?php foreach ($this->getColumnCategories('edit.display') as $category): ?> <?php foreach ($this->getColumns('edit.display', $category) as $name => $column): ?> '<?php echo $this->getSingularName() ?>{<?php echo $column->getName() ?>}' => '<?php $label_name = str_replace("'", "\\'", $this->getParameterValue('edit.fields.'.$column->getName().'.name')); echo $label_name ?>', <?php endforeach; ?> <?php endforeach; ?> ); }
どうしても":"を付けたければ、さらに _edit_form.php をカスタマイズすればよいでしょう。
それにしても、こういう細かいところは、やはり翻訳を必要としないところではあまり気にならないんでしょうね。もうちょっと気を使ってコーディングしてくれたらと思います。