private static function load() { if (!($map = Cache::get(self::CACHE_KEY . '_map'))) { $path = Environment::pathComponentsResource('i18n', 'resource', 'i18n', 'script', 'hans.json'); $map = json_decode(Io_File::valueOf($path)->getContent(), true); Cache::set(self::CACHE_KEY . '_map', $map); } self::$m_unicode =& $map['unicode']; self::$m_transformLatn =& $map['transform']['latin']; }
private function importScript($script_) { $target = Environment::pathComponentsResource('i18n', 'resource', 'i18n', 'script', "{$script_}.json"); $ranges = array_chunk(self::$m_unicodeRanges[$script_], 2); $range = []; foreach ($ranges as $r) { $range = array_merge($range, range(reset($r), end($r))); } $range = array_flip($range); $mapScript = []; $mapScriptUnicode =& $mapScript['unicode']; $mapScriptTransformations =& $mapScript['transform']; foreach (self::$m_scripts[$script_] as $transformation) { $mapScriptTransformations[$transformation] = []; $mapScriptTransformationsCurrent =& $mapScriptTransformations[$transformation]; $source = self::$m_sources[$script_][$transformation]; $source = Environment::pathComponentsResource('i18n', 'resource', 'cldr', $source); // TODO Implement Io_File_Xml $xml = new \SimpleXMLElement(Io_File::valueOf($source)->getContent()); /* @var $node \SimpleXMLElement */ foreach ($xml->xpath('//supplementalData/transforms/transform/tRule') as $node) { $string = (string) $node; $chars = ''; $trans = ''; if (91 === ord($string[0])) { $chars = mb_substr($string, 1, mb_strpos($string, chr(93)) - 1); $ldim = mb_strrpos($string, chr(226)); $trans = mb_substr($string, $ldim + 1, mb_strrpos($string, chr(59)) - $ldim - 1); } $len = mb_strlen($chars); for ($i = 0; $i < $len; $i++) { $char = mb_substr($chars, $i, 1); $dec = Character::unicodeDecimal($char); if (isset($range[$dec])) { $mapScriptUnicode[$dec] = " \"{$dec}\": \"{$char}\""; $mapScriptTransformationsCurrent[$dec] = " \"{$dec}\": \"{$trans}\""; } } } $string = implode(",\n", $mapScriptUnicode); } $transform = []; foreach ($mapScript['transform'] as $script => $transformations) { $transform[] = sprintf(' "%1$s":%3$s {%3$s%2$s%3$s }%3$s', $script, implode(",\n", $transformations), Io::LINE_SEPARATOR_DEFAULT); } $file = new Io_File($target, Io_File::CREATE | Io_File::WRITE | Io_File::TRUNCATE); if (false === $file->exists()) { $file->create(); } $file->open(); // XXX json_encode converts to unicode - which we dont want here - yet maybe implement an alternative Object_Marshaller_Json or Io_File_Json... $file->writeLine('{'); $file->writeLine(' "unicode":'); $file->writeLine(' {'); $file->writeLine(implode(",\n", $mapScript['unicode'])); $file->writeLine(' },'); $file->writeLine(' "transform":'); $file->writeLine(' {'); $file->write(implode(",\n", $transform)); $file->writeLine(' }'); $file->writeLine('}'); $file->close(); }