class IcuResFileLoader in Plug 7
IcuResFileLoader loads translations from a resource bundle.
@author stealth35
Hierarchy
- class \Symfony\Component\Translation\Loader\IcuResFileLoader implements LoaderInterface
Expanded class hierarchy of IcuResFileLoader
1 file declares its use of IcuResFileLoader
- IcuResFileLoaderTest.php in lib/Symfony/ translation/ Tests/ Loader/ IcuResFileLoaderTest.php 
File
- lib/Symfony/ translation/ Loader/ IcuResFileLoader.php, line 24 
Namespace
Symfony\Component\Translation\LoaderView source
class IcuResFileLoader implements LoaderInterface {
  /**
   * {@inheritdoc}
   */
  public function load($resource, $locale, $domain = 'messages') {
    if (!stream_is_local($resource)) {
      throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
    }
    if (!is_dir($resource)) {
      throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
    }
    try {
      $rb = new \ResourceBundle($locale, $resource);
    } catch (\Exception $e) {
      // HHVM compatibility: constructor throws on invalid resource
      $rb = null;
    }
    if (!$rb) {
      throw new InvalidResourceException(sprintf('Cannot load resource "%s"', $resource));
    }
    elseif (intl_is_failure($rb
      ->getErrorCode())) {
      throw new InvalidResourceException($rb
        ->getErrorMessage(), $rb
        ->getErrorCode());
    }
    $messages = $this
      ->flatten($rb);
    $catalogue = new MessageCatalogue($locale);
    $catalogue
      ->add($messages, $domain);
    if (class_exists('Symfony\\Component\\Config\\Resource\\DirectoryResource')) {
      $catalogue
        ->addResource(new DirectoryResource($resource));
    }
    return $catalogue;
  }
  /**
   * Flattens an ResourceBundle.
   *
   * The scheme used is:
   *   key { key2 { key3 { "value" } } }
   * Becomes:
   *   'key.key2.key3' => 'value'
   *
   * This function takes an array by reference and will modify it
   *
   * @param \ResourceBundle $rb       the ResourceBundle that will be flattened
   * @param array           $messages used internally for recursive calls
   * @param string          $path     current path being parsed, used internally for recursive calls
   *
   * @return array the flattened ResourceBundle
   */
  protected function flatten(\ResourceBundle $rb, array &$messages = array(), $path = null) {
    foreach ($rb as $key => $value) {
      $nodePath = $path ? $path . '.' . $key : $key;
      if ($value instanceof \ResourceBundle) {
        $this
          ->flatten($value, $messages, $nodePath);
      }
      else {
        $messages[$nodePath] = $value;
      }
    }
    return $messages;
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| IcuResFileLoader:: | protected | function | Flattens an ResourceBundle. | |
| IcuResFileLoader:: | public | function | Loads a locale. Overrides LoaderInterface:: | 1 | 
