php - 如何覆盖 i18n 文件中的默认文本?

标签 php internationalization symfony-1.4

我需要覆盖 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 文件,我如何覆盖此值?

最佳答案

如果是关于语言选择器,我猜您正在使用sfWidgetFormI18nChoiceLanguage。因此,最简单的方法是创建您自己的 wdiget (这将是当前 wdiget 的 c/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

关于php - 如何覆盖 i18n 文件中的默认文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863737/

相关文章:

php - Doctrine/Symfony 乱序生成迁移

php - 从 MySQL 解码 JSON

PHP如何将HTML页面中的多个表单发布到另一个PHP页面

ios - 快速将本地化字符串添加到 UITextView

email - 电子邮件地址是否允许包含非字母数字字符?

php - 上传的 docx 文件变成 zip

php - 适用于 iOS 的网络框架是什么?

javascript - 具有多个属性的可克隆文件输入

asp.net - 全局化、本地化、国际化 : Add Languages (French, 等)/asp.net 4.0/for dummies

binding - 在 Route 中使用 Play Framework : Reverse routing 中的对象