From a97822eb8bc9de904ec51df11526a506e19f017f Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sat, 15 Jun 2019 09:00:03 +0200 Subject: [PATCH] Remove importgettext.sh and exportgettext.sh scripts --- bin/exportgettext.sh | 235 ------------------------------------------- bin/importgettext.sh | 198 ------------------------------------ 2 files changed, 433 deletions(-) delete mode 100755 bin/exportgettext.sh delete mode 100755 bin/importgettext.sh diff --git a/bin/exportgettext.sh b/bin/exportgettext.sh deleted file mode 100755 index e2f866854..000000000 --- a/bin/exportgettext.sh +++ /dev/null @@ -1,235 +0,0 @@ -#!/usr/bin/env php - | - +-----------------------------------------------------------------------+ -*/ - -define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); -require INSTALL_PATH.'program/include/clisetup.php'; - -if ($argc < 2) { - die("Usage: " . basename($argv[0]) . " SRCDIR DESTDIR\n"); -} - -$srcdir = unslashify(realpath($argv[1])); -$destdir = unslashify($argv[2]); -$layout = 'launchpad'; # or 'narro'; -$langcode_map = array( - 'hy_AM' => 'hy', - 'ar_SA' => 'ar', - 'az_AZ' => 'az', - 'bg_BG' => 'bg', - 'bs_BA' => 'bs', - 'ca_ES' => 'ca', - 'cs_CZ' => 'cs', - 'cy_GB' => 'cy', - 'da_DK' => 'da', - 'et_EE' => 'et', - 'el_GR' => 'el', - 'eu_ES' => 'eu', - 'fa_IR' => 'fa', - 'ga_IE' => 'ga', - 'ka_GE' => 'ka', - 'gl_ES' => 'gl', - 'he_IL' => 'he', - 'hi_IN' => 'hi', - 'hr_HR' => 'hr', - 'ja_JP' => 'ja', - 'ko_KR' => 'ko', - 'km_KH' => 'km', - 'ms_MY' => 'ms', - 'mr_IN' => 'mr', - 'ml_IN' => 'ml', - 'pl_PL' => 'pl', - 'si_LK' => 'si', - 'sl_SI' => 'sl', - 'sq_AL' => 'sq', - 'sr_CS' => 'sr', - 'sv_SE' => 'sv', - 'uk_UA' => 'uk', - 'vi_VN' => 'vi', -); - - -// converting roundcube localization dir -if (is_dir($srcdir.'/en_US')) { - load_en_US($srcdir.'/en_US'); - - foreach (glob($srcdir.'/*') as $locdir) { - if (is_dir($locdir)) { - $lang = basename($locdir); - //echo "$locdir => $destdir$lang\n"; - convert_dir($locdir, $destdir . ($layout != 'launchpad' ? $lang : '')); - } - } -} -// converting single localization directory -else if (is_dir($srcdir)) { - if (is_file($srcdir.'/en_US.inc')) // plugin localization - load_en_US($srcdir.'/en_US.inc'); - else - load_en_US(realpath($srcdir.'/../en_US')); // single language - convert_dir($srcdir, $destdir); -} -// converting a single file -else if (is_file($srcdir)) { - //load_en_US(); - convert_file($srcdir, $destdir); -} - - -/** - * Load en_US localization which is used to build msgids - */ -function load_en_US($fn) -{ - $texts = array(); - - if (is_dir($fn)) { - foreach (glob($fn.'/*.inc') as $ifn) { - include($ifn); - $texts = array_merge($texts, (array)$labels, (array)$messages); - } - } - else if (is_file($fn)) { - include($fn); - $texts = array_merge($texts, (array)$labels, (array)$messages); - } - - $GLOBALS['en_US'] = $texts; -} - -/** - * Convert all .inc files in the given src directory - */ -function convert_dir($indir, $outdir) -{ - global $layout; - - if (!is_dir($outdir)) // attempt to create destination dir - mkdir($outdir, 0777, true); - - foreach (glob($indir.'/*.inc') as $fn) { - $filename = basename($fn); - - // create subdir for each template (launchpad rules) - if ($layout == 'launchpad' && preg_match('/^(labels|messages)/', $filename, $m)) { - $lang = end(explode('/', $indir)); - $destdir = $outdir . '/' . $m[1]; - if (!is_dir($destdir)) - mkdir($destdir, 0777, true); - $outfn = $destdir . '/' . $lang . '.po'; - } - else { - $outfn = $outdir . '/' . preg_replace('/\.[a-z0-9]+$/i', '', basename($fn)) . '.po'; - } - - convert_file($fn, $outfn); - } -} - -/** - * Convert the given Roundcube localization file into a gettext .po file - */ -function convert_file($fn, $outfn) -{ - global $layout, $langcode_map; - - $basename = basename($fn); - $srcname = str_replace(INSTALL_PATH, '', $fn); - $product = preg_match('!plugins/(\w+)!', $srcname, $m) ? 'roundcube-plugin-' . $m[1] : 'roundcubemail'; - $lang = preg_match('!/([a-z]{2}(_[A-Z]{2})?)[./]!', $outfn, $m) ? $m[1] : ''; - $labels = $messages = $seen = array(); - - if (is_dir($outfn)) - $outfn .= '/' . $basename . '.po'; - - // launchpad requires the template file to have the same name as the directory - if (strstr($outfn, '/en_US') && $layout == 'launchpad') { - $a = explode('/', $outfn); - array_pop($a); - $templ = end($a); - $a[] = $templ . '.pot'; - $outfn = join('/', $a); - $is_pot = true; - } - // launchpad is very picky about file names - else if ($layout == 'launchpad' && preg_match($regex = '!/([a-z]{2})_([A-Z]{2})!', $outfn, $m)) { - if ($shortlang = $langcode_map[$lang]) - $outfn = preg_replace($regex, '/'.$shortlang, $outfn); - else if ($m[1] == strtolower($m[2])) - $outfn = preg_replace($regex, '/\1', $outfn); - } - - include($fn); - $texts = array_merge($labels, $messages); - - // write header - $header = <<\\n" -"Language: %s\\n" -"Content-Type: text/plain; charset=UTF-8\\n" -"Content-Transfer-Encoding: 8bit\\n" -EOF; - - $out = sprintf($header, $srcname, $product, $is_pot ? "POT-Creation-Date" : "PO-Revision-Date", date('c'), $shortlang ? $shortlang : $lang); - $out .= "\n"; - - $messages = array(); - foreach ((array)$texts as $label => $msgstr) { - $msgid = $is_pot ? $msgstr : ($GLOBALS['en_US'][$label] ?: $label); - $messages[$msgid][] = $label; - } - - foreach ($messages as $msgid => $labels) { - $out .= "\n"; - foreach ($labels as $label) - $out .= "#: $srcname:$label\n"; - $msgstr = $texts[$label]; - $out .= 'msgid ' . gettext_quote($msgid) . "\n"; - $out .= 'msgstr ' . gettext_quote(!$is_pot ? $msgstr : '') . "\n"; - } - - if ($outfn == '-') - echo $out; - else { - echo "$fn\t=>\t$outfn\n"; - file_put_contents($outfn, $out); - } -} - -function gettext_quote($str) -{ - $out = ""; - $lines = explode("\n", wordwrap(stripslashes($str))); - $last = count($lines) - 1; - foreach ($lines as $i => $line) - $out .= '"' . addcslashes($line, '"') . ($i < $last ? ' ' : '') . "\"\n"; - return rtrim($out); -} - -?> diff --git a/bin/importgettext.sh b/bin/importgettext.sh deleted file mode 100755 index fde141c3d..000000000 --- a/bin/importgettext.sh +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/env php - | - +-----------------------------------------------------------------------+ -*/ - -define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); -require INSTALL_PATH.'program/include/clisetup.php'; - -if ($argc < 2) { - die("Usage: " . basename($argv[0]) . " SRCDIR\n"); -} - -$srcdir = unslashify(realpath($argv[1])); - -if (is_dir($srcdir)) { - $out = import_dir($srcdir); -} -else if (is_file($srcdir)) { - $out = import_file($srcdir); -} - -// write output files -foreach ($out as $outfn => $texts) { - $lang = preg_match('!/([a-z]{2}(_[A-Z]{2})?)[./]!', $outfn, $m) ? $m[1] : ''; - $varname = strpos($outfn, 'messages.inc') !== false ? 'messages' : 'labels'; - - $header = <</i', '', $texts['_translator']); - $output = sprintf($header, $lang, $varname.'.inc', date('Y'), $author, $varname); - - foreach ($texts as $label => $value) { - if (is_array($value)) { var_dump($outfn, $label, $value); exit; } - if ($label[0] != '_' && strlen($value)) - $output .= sprintf("\$%s['%s'] = '%s';\n", $varname, $label, strtr(addcslashes($value, "'"), array("\r" => '', "\n" => '\n'))); - } - - $output .= "\n"; - $dir = dirname($outfn); - @mkdir($dir, 0755, true); - if (file_put_contents($outfn, $output)) - echo "-> $outfn\n"; -} - - -/** - * Convert all .po files in the given src directory - */ -function import_dir($indir) -{ - $out = array(); - foreach (glob($indir.'/*.po') as $fn) { - $out = array_merge_recursive($out, import_file($fn)); - } - return $out; -} - -/** - * Convert the given .po file into a Roundcube localization array - */ -function import_file($fn) -{ - $out = array(); - $lines = file($fn); - $language = ''; - $translator = ''; - - // get language code from file name - if (preg_match('/-([a-z_]+).po$/i', $fn, $m)) - $language = expand_langcode($m[1]); - - $is_header = true; - $msgid = null; - $msgstr = ''; - $dests = array(); - foreach ($lines as $i => $line) { - $line = trim($line); - - // parse header - if ($is_header && $line[0] == '"') { - list($key, $val) = explode(": ", preg_replace('/\\\n$/', '', trim($line, '"')), 2); - switch (strtolower($key)) { - case 'language': - $language = expand_langcode($val); - break; - case 'last-translator': - $translator = $val; - break; - } - } - - // empty line - if ($line == '') { - if ($msgid && $dests) { - foreach ($dests as $dest) { - list($file, $label) = explode(':', $dest); - $out[$file][$label] = $msgstr; - $out[$file]['_translator'] = $translator; - } - } - - $msgid = null; - $msgstr = ''; - $dests = array(); - } - - // meta line - if ($line[0] == '#') { - $value = trim(substr($line, 2)); - if ($line[1] == ':') - $dests[] = str_replace('en_US', $language, $value); - } - else if (strpos($line, 'msgid') === 0) { - $msgid = gettext_decode(substr($line, 6)); - - if (!empty($msgid)) - $is_header = false; - } - else if (strpos($line, 'msgstr') === 0) { - $msgstr = gettext_decode(substr($line, 7)); - } - else if ($msgid && $line[0] == '"') { - $msgstr .= gettext_decode($line); - } - else if ($msgid !== null && $line[0] == '"') { - $msgid .= gettext_decode($line); - } - } - - if ($msgid && $dests) { - foreach ($dests as $dest) { - list($file, $label) = explode(':', $dest); - $out[$file][$label] = $msgstr; - $out[$file]['_translator'] = $translator; - } - } - - return $language ? $out : array(); -} - - -function gettext_decode($str) -{ - return stripslashes(trim($str, '"')); -} - -/** - * Translate two-chars language codes to our internally used language identifiers - */ -function expand_langcode($lang) -{ - static $rcube_language_aliases, $rcube_languages; - - if (!$rcube_language_aliases) - include(INSTALL_PATH . 'program/localization/index.inc'); - - if ($rcube_language_aliases[$lang]) - return $rcube_language_aliases[$lang]; - else if (strlen($lang) == 2 && !isset($rcube_languages[$lang])) - return strtolower($lang) . '_' . strtoupper($lang); - else - return $lang; -} - - -?>