summaryrefslogtreecommitdiff
path: root/bin/importgettext.sh
diff options
context:
space:
mode:
Diffstat (limited to 'bin/importgettext.sh')
-rwxr-xr-xbin/importgettext.sh196
1 files changed, 0 insertions, 196 deletions
diff --git a/bin/importgettext.sh b/bin/importgettext.sh
deleted file mode 100755
index 285f5680f..000000000
--- a/bin/importgettext.sh
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/env php
-<?php
-/*
- +-----------------------------------------------------------------------+
- | bin/importgettext.sh |
- | |
- | This file is part of the Roundcube Webmail client |
- | Copyright (C) 2011, The Roundcube Dev Team |
- | Licensed under the GNU General Public License |
- | |
- | PURPOSE: |
- | Import localizations from gettext PO format |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-*/
-
-define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
-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 = <<<EOF
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | localization/%s/%-51s|
- | |
- | Language file of the Roundcube Webmail client |
- | Copyright (C) %s, The Roundcube Dev Team |
- | Licensed under the GNU General Public License |
- | |
- +-----------------------------------------------------------------------+
- | Author: %-62s|
- +-----------------------------------------------------------------------+
-*/
-
-$%s = array();
-
-EOF;
-
- $author = preg_replace('/\s*<Unknown>/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;
-}
-
-
-?>