2

Symfony の i18n 部分に固有のデフォルト テキストをオーバーライドする必要があります。

これらのファイルは に保存されlib/vendor/symfony/lib/i18n/dataます。それらには、特定の文化の国名、月、指標などが含まれています。

のスナップショットは次のes.datとおりです。

a:19:{s:9:"Countries";a:278:{i:1;s:9:"Américas";i:2;s:6:"Caribe";i:3;s:17:"Europa meridional";i:5;s:11:"Suramérica";i:0;s:8:"Oceanía";i:9;

に変更portugués de Brasilする必要がありportugués (Brasil)ます。ファイルを変更することは推奨されていないため、.datこの値を上書きするにはどうすればよいですか?

4

1 に答える 1

2

言語セレクターについての場合は、sfWidgetFormI18nChoiceLanguage. したがって、最も簡単な方法は、独自の wdiget (現在のものの ac/p になります) を作成して、すべての選択肢内で必要な値を置き換えることです。新しいウィジェットを作成しますlib/widget/myWidgetFormI18nChoiceLanguage.class.php:

class myWidgetFormI18nChoiceLanguage extends sfWidgetFormChoice
{
  protected function configure($options = array(), $attributes = array())
  {
    parent::configure($options, $attributes);

    $this->addOption('culture');
    $this->addOption('languages');
    $this->addOption('add_empty', false);

    // populate choices with all languages
    $culture = isset($options['culture']) ? $options['culture'] : 'en';

    $languages = sfCultureInfo::getInstance($culture)->getLanguages(isset($options['languages']) ? $options['languages'] : null);

    $addEmpty = isset($options['add_empty']) ? $options['add_empty'] : false;
    if (false !== $addEmpty)
    {
      $languages = array_merge(array('' => true === $addEmpty ? '' : $addEmpty), $languages);
    }

    // change the language here based on the iso code
    $languages['pt_BR'] = 'portugués (Brasil)';

    $this->setOption('choices', $languages);
  }
}

iso_code の表示方法を変更したい場合 ( i18n ヘルパーを使用する場合format_language) は、同じことができます。独自のヘルパー ( など/lib/helper/myi18NHelper.php) を次のように作成します。

function format_language($language_iso, $culture = null)
{
  $c = sfCultureInfo::getInstance($culture === null ? sfContext::getInstance()->getUser()->getCulture() : $culture);
  $languages = $c->getLanguages();

  // change the language here based on the iso code
  $languages['pt_BR'] = 'portugués (Brasil)';

  return isset($languages[$language_iso]) ? $languages[$language_iso] : '';
}

次に、次のように呼び出すことができます。

<?php use_helper('myi18N') ?>

<?php echo format_language('pt_BR') ?>

編集:

sfWidgetFormI18nChoiceLanguageこの新しいウィジェットを使用する場合は、フォーム クラスを更新し、単純に に置き換えmyWidgetFormI18nChoiceLanguageます。

于 2012-10-15T04:50:49.707 に答える