/**
  * {@inheritdoc}
  */
 public function generateData(GeneratorConfig $config)
 {
     $filesystem = new Filesystem();
     $localeScanner = new LocaleScanner();
     $reader = new IntlBundleReader();
     $writers = $config->getBundleWriters();
     $tempDir = sys_get_temp_dir() . '/icu-data-' . $this->dirName;
     // Prepare filesystem directories
     foreach ($writers as $targetDir => $writer) {
         $filesystem->remove($targetDir . '/' . $this->dirName);
         $filesystem->mkdir($targetDir . '/' . $this->dirName);
     }
     $filesystem->remove($tempDir);
     $filesystem->mkdir($tempDir);
     $locales = $this->scanLocales($localeScanner, $config->getSourceDir());
     $this->compileTemporaryBundles($this->compiler, $config->getSourceDir(), $tempDir);
     $this->preGenerate();
     foreach ($locales as $locale) {
         $localeData = $this->generateDataForLocale($reader, $tempDir, $locale);
         if (null !== $localeData) {
             foreach ($writers as $targetDir => $writer) {
                 $writer->write($targetDir . '/' . $this->dirName, $locale, $localeData);
             }
         }
     }
     $rootData = $this->generateDataForRoot($reader, $tempDir);
     if (null !== $rootData) {
         foreach ($writers as $targetDir => $writer) {
             $writer->write($targetDir . '/' . $this->dirName, 'root', $rootData);
         }
     }
     $metaData = $this->generateDataForMeta($reader, $tempDir);
     if (null !== $metaData) {
         foreach ($writers as $targetDir => $writer) {
             $writer->write($targetDir . '/' . $this->dirName, 'meta', $metaData);
         }
     }
     // Clean up
     $filesystem->remove($tempDir);
 }
Example #2
0
    echo '[5/6] libicuio.so...';
    cd($sourceDir . '/io');
    run('make 2>&1 && make install 2>&1');
    echo " ok.\n";
    echo '[6/6] genrb...';
    cd($sourceDir . '/tools/genrb');
    run('make 2>&1 && make install 2>&1');
    echo " ok.\n";
}
$genrb = $buildDir . '/bin/genrb';
$genrbEnv = 'LD_LIBRARY_PATH=' . $buildDir . '/lib ';
echo "Using {$genrb}.\n";
$icuVersionInDownload = get_icu_version_from_genrb($genrbEnv . ' ' . $genrb);
echo "Preparing resource bundle compilation (version {$icuVersionInDownload})...\n";
$compiler = new GenrbCompiler($genrb, $genrbEnv);
$config = new GeneratorConfig($sourceDir . '/data', $icuVersionInDownload);
$baseDir = dirname(__DIR__) . '/data';
//$txtDir = $baseDir.'/txt';
$jsonDir = $baseDir;
//$phpDir = $baseDir.'/'.Intl::PHP;
//$resDir = $baseDir.'/'.Intl::RB_V2;
$targetDirs = array($jsonDir);
$workingDirs = array($jsonDir);
//$config->addBundleWriter($txtDir, new TextBundleWriter());
$config->addBundleWriter($jsonDir, new JsonBundleWriter());
echo "Starting resource bundle compilation. This may take a while...\n";
$filesystem->remove($workingDirs);
foreach ($workingDirs as $targetDir) {
    $filesystem->mkdir(array($targetDir . '/' . Intl::CURRENCY_DIR, $targetDir . '/' . Intl::LANGUAGE_DIR, $targetDir . '/' . Intl::LOCALE_DIR, $targetDir . '/' . Intl::REGION_DIR, $targetDir . '/' . Intl::SCRIPT_DIR));
}
// We don't want to use fallback to English during generation
 /**
  * {@inheritdoc}
  */
 public function generateData(GeneratorConfig $config)
 {
     $filesystem = new Filesystem();
     $localeScanner = new LocaleScanner();
     $writers = $config->getBundleWriters();
     // Prepare filesystem directories
     foreach ($writers as $targetDir => $writer) {
         $filesystem->remove($targetDir . '/' . $this->dirName);
         $filesystem->mkdir($targetDir . '/' . $this->dirName);
     }
     $locales = $localeScanner->scanLocales($config->getSourceDir() . '/locales');
     $aliases = $localeScanner->scanAliases($config->getSourceDir() . '/locales');
     // Flip to facilitate lookup
     $flippedLocales = array_flip($locales);
     // Don't generate names for aliases (names will be generated for the
     // locale they are duplicating)
     $displayLocales = array_diff_key($flippedLocales, $aliases);
     ksort($displayLocales);
     // Generate a list of (existing) locale fallbacks
     $fallbackMapping = $this->generateFallbackMapping($displayLocales, $aliases);
     $localeNames = array();
     // Generate locale names for all locales that have translations in
     // at least the language or the region bundle
     foreach ($displayLocales as $displayLocale => $_) {
         $localeNames[$displayLocale] = array();
         foreach ($locales as $locale) {
             try {
                 // Generate a locale name in the language of each display locale
                 // Each locale name has the form: "Language (Script, Region, Variant1, ...)
                 // Script, Region and Variants are optional. If none of them is
                 // available, the braces are not printed.
                 if (null !== ($name = $this->generateLocaleName($locale, $displayLocale))) {
                     $localeNames[$displayLocale][$locale] = $name;
                 }
             } catch (MissingResourceException $e) {
             } catch (ResourceBundleNotFoundException $e) {
             }
         }
     }
     // Process again to de-duplicate locales and their fallback locales
     // Only keep the differences
     foreach ($displayLocales as $displayLocale => $_) {
         $fallback = $displayLocale;
         while (isset($fallbackMapping[$fallback])) {
             $fallback = $fallbackMapping[$fallback];
             $localeNames[$displayLocale] = array_diff($localeNames[$displayLocale], $localeNames[$fallback]);
         }
         // If no names remain to be saved for the current locale, skip it
         if (0 === count($localeNames[$displayLocale])) {
             continue;
         }
         foreach ($writers as $targetDir => $writer) {
             $writer->write($targetDir . '/' . $this->dirName, $displayLocale, array('Names' => $localeNames[$displayLocale]));
         }
     }
     // Generate aliases, needed to enable proper fallback from alias to its
     // target
     foreach ($aliases as $alias => $aliasOf) {
         foreach ($writers as $targetDir => $writer) {
             $writer->write($targetDir . '/' . $this->dirName, $alias, array('%%ALIAS' => $aliasOf));
         }
     }
     // Create root file which maps locale codes to locale codes, for fallback
     foreach ($writers as $targetDir => $writer) {
         $writer->write($targetDir . '/' . $this->dirName, 'meta', array('Locales' => $locales, 'Aliases' => $aliases));
     }
 }