/** * Returns an associative array of all parsed property files * * The associative array keys are based on Region Code (combination of language code and country code) * These are retrieved from the file name (see naming convention below). * If no country code is available, the language code will be repeated * * Example: Language-code is 'nl' and Country-Code is 'NL'. * The Region Code will be 'nl-NL' * Example: Language-code is 'de' and Country-Code is empty. * The Region Code will be 'de-de' * Example: Language-code is empty and Country-Code is 'uk'. * The Region Code will be 'uk' * * Array ( * ['fullname'] Full name of parsed file * ['filename'] File name without language or encoding information and no extension * ['rc'] Region-Code * ['lc'] Language-Code (optional) * ['cc'] Country-Code (optional) * ['enc'] File encoding (optional) * ['ext'] File extension * ['content'] Array ($key=>$value) * ) * */ public function parse() { $resources = array(); $files = gettext::getResourceFiles('i18n'); foreach ($files as $file) { preg_match_all(self::FILE_PATTERN, $file, $parts); $resource = array(); $resource['fullname'] = $parts[0][0]; $resource['filename'] = $parts[1][0]; $resource['lc'] = $parts[2][0]; $resource['cc'] = $parts[3][0]; $resource['ext'] = $parts[5][0]; $resource['content'] = $this->getResourcesFromFile(GETTEXT_ROOT . '/' . $file); if ($resource['lc'] == '' && $resource['cc'] == '') { $regionCode = ''; } else { if ($resource['lc'] != '' && $resource['cc'] == '') { $regionCode = $resource['lc'] . '-' . $resource['lc']; } else { if ($resource['lc'] != '' && $resource['cc'] != '') { $regionCode = $resource['lc'] . '-' . $resource['cc']; } else { if ($resource['lc'] == '' && $resource['cc'] != '') { $regionCode = $resource['cc']; } } } } $resource['rc'] = $regionCode; $resources[$regionCode] = $resource; } return $resources; }
<?php //Example of how to use this class require_once './gettext.php'; $gettext = new gettext(); $lines = $gettext->scan_dir(); echo count($lines) . ' lines have been collected and need to be translated <br>'; if ($gettext->create_po($lines)) { echo '"' . $gettext->file_name . '" file has been created in the same directory of this script find it at <a href="' . $gettext->file_name . '">download ' . $gettext->file_name . '</a>'; } else { echo 'Error could not create the file please check if you have the right permissions'; }
public function FrontendParamsResolve($context) { if (!gettext::addParameters()) { return; } $parser = gettext::getParser(); $languageCode = gettext::getRegionCode(); $resources = $parser->parse(); if ($parser instanceof i18nParser) { // Add properties to Parameter Pool if (isset($resources[$languageCode])) { $localizedResources = $resources[$languageCode]; } else { $localizedResources = $resources['']; } if (isset($localizedResources['content'])) { $content = $localizedResources['content']; if (is_array($content)) { foreach ($content as $name => $value) { $name = gettext::createValidParameterName($name); $context["params"][$name] = $value; } } } } }
public function grab(&$param_pool) { $result = new XMLElement($this->dsParamROOTELEMENT); $result->setAttribute('type', gettext::getParserType()); $parser = gettext::getParser(); $resources = $parser->parse(); if ($parser instanceof POParser) { foreach ($resources as $resource) { $resourceNode = new XMLElement('resource'); $resourceNode->setAttribute('regionCode', $resource['rc']); $resourceNode->setAttribute('languageCode', $resource['lc']); $resourceNode->setAttribute('countryCode', $resource['cc']); $content = $resource['content']; foreach ($content as $name => $context) { $contextNode = new XMLElement('context'); if ($name != '') { $contextNode->setAttribute('name', $name); } foreach ($context as $item) { $itemNode = new XMLElement('item'); $itemNode->appendChild(new XMLElement('msgid', $item['msgid'])); if (isset($item['msgid_plural'])) { $itemNode->appendChild(new XMLElement('msgid_plural', $item['msgid_plural'])); } if (is_array($item['msgstr'])) { for ($i = 0; $i < count($item['msgstr']); $i++) { $node = new XMLElement('msgstr', $item['msgstr'][$i]); $node->setAttribute('index', $i); $itemNode->appendChild($node); } } else { $itemNode->appendChild(new XMLElement('msgstr', $item['msgstr'])); } $contextNode->appendChild($itemNode); } $resourceNode->appendChild($contextNode); } $result->appendChild($resourceNode); } /* $localizedResources = $resources[$languagCode]; $content = $localizedResources['content']['']; foreach($content as $item) { $name = gettext::createValidParameterName($item['msgid']); $value = $item['msgstr']; $context["params"][$name] = $value; } */ } else { if ($parser instanceof i18nParser) { foreach ($resources as $resource) { $resourceNode = new XMLElement('resource'); $resourceNode->setAttribute('regionCode', $resource['rc']); $resourceNode->setAttribute('languageCode', $resource['lc']); $resourceNode->setAttribute('countryCode', $resource['cc']); $content = $resource['content']; foreach ($content as $name => $value) { if (empty($value)) { if (isset($resources['']['content'][$name])) { $value = $resources['']['content'][$name]; } $value = empty($value) ? $name : $value; } $itemNode = new XMLElement('item', $value); $itemNode->setAttribute('name', $name); $resourceNode->appendChild($itemNode); } $result->appendChild($resourceNode); } } } return $result; }