2013年10月29日火曜日

久しぶりにCakePHPを見てディスりたくなったのでディスる i18n


CakePHP 2.4.1 を使う事になりました。 template エンジンは smarty だよね?ふむふむ・・・ふむふむ・・・あー、CakePHPとsmarty を混合して使うのは、しんどそうだからやめておこう。

 それじゃ、Locale のあたりでも・・・。ほむほむ cake.pot ファイルとか、綺麗に分かれて作成されてて、これは感心感心と思ったのもつかの間の事。誰か日本語の cake.po 公開してないの???
どれどれ・・・ふむふむ・・・おおーっ・・・おおぇえええ?
ひとつも無い、誰も CakePHPを使ってないようです。はぁあああ?

 どれどれ、default.po でも見ますかね・・・
msgid "The Hoge has been saved."
msgstr ""

msgid "The Hoge could not be saved. Please, try again."
msgstr ""

msgid "The Hoge has been deleted."
msgstr ""

msgid "The Hoge could not be deleted. Please, try again."
msgstr ""

msgid "New Hoge"
msgstr ""

msgid "Edit Hoge"
msgstr ""

msgid "The Fuge has been saved."
msgstr ""

msgid "The Fuge could not be saved. Please, try again."
msgstr ""

msgid "The Fuge has been deleted."
msgstr ""

msgid "The Fuge could not be deleted. Please, try again."
msgstr ""

msgid "New Fuge"
msgstr ""

msgid "Edit Fuge"
msgstr ""

...以下延々と続く
 馬鹿なの?DRYの原則もクソもないでしょコレ?以下のように置き換え可能でしょうが?
msgid "The %s has been saved."
msgstr ""

msgid "The %s could not be saved. Please, try again."
msgstr ""

msgid "The %s has been deleted."
msgstr ""

msgid "The %s could not be deleted. Please, try again."
msgstr ""

msgid "New %s"
msgstr ""

msgid "Edit %s"
msgstr ""
 という事で直しましたさ。template /cake/lib/Cake/Console/Templates/default/views/index.ctp こんな感じで・・・けど、もう bake した後で、結構手を入れてるみたいなんで後の祭りみたいです(ToT)
<?php
/**
 *
 * PHP 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       Cake.Console.Templates.default.views
 * @since         CakePHP(tm) v 1.2.0.5234
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */
?>
<div class="<?php echo $pluralVar; ?> index">
 <h2><?php echo "<?php echo __('{$pluralHumanName}'); ?>"; ?></h2>
 <table cellpadding="0" cellspacing="0">
 <tr>
 <?php foreach ($fields as $field): ?>
  <th><?php echo "<?php echo \$this->Paginator->sort('{$field}'); ?>"; ?></th>
 <?php endforeach; ?>
  <th class="actions"><?php echo "<?php echo __('Actions'); ?>"; ?></th>
 </tr>
 <?php
 echo "<?php foreach (\${$pluralVar} as \${$singularVar}): ?>\n";
 echo "\t<tr>\n";
  foreach ($fields as $field) {
   $isKey = false;
   if (!empty($associations['belongsTo'])) {
    foreach ($associations['belongsTo'] as $alias => $details) {
     if ($field === $details['foreignKey']) {
      $isKey = true;
      echo "\t\t<td>\n\t\t\t<?php echo \$this->Html->link(\${$singularVar}['{$alias}']['{$details['displayField']}'], array('controller' => '{$details['controller']}', 'action' => 'view', \${$singularVar}['{$alias}']['{$details['primaryKey']}'])); ?>\n\t\t</td>\n";
      break;
     }
    }
   }
   if ($isKey !== true) {
    echo "\t\t<td><?php echo h(\${$singularVar}['{$modelClass}']['{$field}']); ?>&nbsp;</td>\n";
   }
  }

  echo "\t\t<td class=\"actions\">\n";
  echo "\t\t\t<?php echo \$this->Html->link(__('View'), array('action' => 'view', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n";
  echo "\t\t\t<?php echo \$this->Html->link(__('Edit'), array('action' => 'edit', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n";
  echo "\t\t\t<?php echo \$this->Form->postLink(__('Delete'), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), null, __('Are you sure you want to delete # %s?', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n";
  echo "\t\t</td>\n";
 echo "\t</tr>\n";

 echo "<?php endforeach; ?>\n";
 ?>
 </table>
 <p>
 <?php echo "<?php
 echo \$this->Paginator->counter(array(
 'format' => __('Page {:page} of {:pages}, showing {:current} records out of {:count} total, starting on record {:start}, ending on {:end}')
 ));
 ?>"; ?>
 </p>
 <div class="paging">
 <?php
  echo "<?php\n";
  echo "\t\techo \$this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled'));\n";
  echo "\t\techo \$this->Paginator->numbers(array('separator' => ''));\n";
  echo "\t\techo \$this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled'));\n";
  echo "\t?>\n";
 ?>
 </div>
</div>
<div class="actions">
 <h3><?php echo "<?php echo __('Actions'); ?>"; ?></h3>
 <ul>
  <li><?php echo "<?php echo \$this->Html->link(__('New %s',__('" . $singularHumanName . "')), array('action' => 'add')); ?>"; ?></li>
<?php
 $done = array();
 foreach ($associations as $type => $data) {
  foreach ($data as $alias => $details) {
   if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) {
    echo "\t\t<li><?php echo \$this->Html->link(__('List %s',__('" . Inflector::humanize($details['controller']) . "')), array('controller' => '{$details['controller']}', 'action' => 'index')); ?> </li>\n";
    echo "\t\t<li><?php echo \$this->Html->link(__('New %s',__('" . Inflector::humanize(Inflector::underscore($alias)) . "')), array('controller' => '{$details['controller']}', 'action' => 'add')); ?> </li>\n";
    $done[] = $details['controller'];
   }
  }
 }
?>
 </ul>
</div>
あ、肝心の cake.po ですが、そもそも template がドメインを意識して書かれてない\(^o^)/オワタ

0 件のコメント: