? Drupal.installer.translation.patch Index: install.php =================================================================== RCS file: /cvs/drupal/drupal/install.php,v retrieving revision 1.8 diff -u -r1.8 install.php --- install.php 18 Aug 2006 18:58:44 -0000 1.8 +++ install.php 18 Aug 2006 20:40:17 -0000 @@ -131,7 +131,7 @@ if (!drupal_verify_install_file($settings_file, FILE_EXIST|FILE_READABLE|FILE_WRITABLE)) { drupal_set_message(st('The @drupal installer requires write permissions to %file during the installation process.', array('@drupal' => drupal_install_profile_name(), '%file' => $settings_file)), 'error'); - drupal_set_title('Drupal database setup'); + drupal_set_title(st('Drupal database setup')); print theme('install_page', ''); exit; } @@ -141,7 +141,7 @@ $db_user = $db_pass = $db_path = ''; } $output = drupal_get_form('install_settings_form', $profile, $settings_file, $db_url, $db_type, $db_prefix, $db_user, $db_pass, $db_host); - drupal_set_title('Database configuration'); + drupal_set_title(st('Database configuration')); print theme('install_page', $output); exit; } @@ -155,13 +155,13 @@ if (count($db_types) == 0) { $form['no_db_types'] = array( '#type' => 'markup', - '#value' => 'Your web server does not appear to support any common database types. Check with your hosting provider to see if they offer any databases that Drupal supports.', + '#value' => st('Your web server does not appear to support any common database types. Check with your hosting provider to see if they offer any databases that Drupal supports.', array('@drupal-databases' => 'http://drupal.org/node/270#database')), ); } else { $form['basic_options'] = array( '#type' => 'fieldset', - '#title' => 'Basic options', + '#title' => st('Basic options'), '#description' => st('

To set up your @drupal database, enter the following information.

', array('@drupal' => drupal_install_profile_name())), ); @@ -169,7 +169,7 @@ // Database type $form['basic_options']['db_type'] = array( '#type' => 'radios', - '#title' => 'Database type', + '#title' => st('Database type'), '#required' => TRUE, '#options' => drupal_detect_database_types(), '#default_value' => $db_type, @@ -191,7 +191,7 @@ // Database name $form['basic_options']['db_path'] = array( '#type' => 'textfield', - '#title' => 'Database name', + '#title' => st('Database name'), '#default_value' => $db_path, '#size' => 45, '#maxlength' => 45, @@ -202,7 +202,7 @@ // Database username $form['basic_options']['db_user'] = array( '#type' => 'textfield', - '#title' => 'Database username', + '#title' => st('Database username'), '#default_value' => $db_user, '#size' => 45, '#maxlength' => 45, @@ -212,7 +212,7 @@ // Database username $form['basic_options']['db_pass'] = array( '#type' => 'password', - '#title' => 'Database password', + '#title' => st('Database password'), '#default_value' => $db_pass, '#size' => 45, '#maxlength' => 45, @@ -221,27 +221,27 @@ $form['advanced_options'] = array( '#type' => 'fieldset', - '#title' => 'Advanced options', + '#title' => st('Advanced options'), '#collapsible' => TRUE, '#collapsed' => TRUE, - '#description' => 'These options are only necessary for some sites. If you\'re not sure what you should enter here, leave the default settings or check with your hosting provider.' + '#description' => st('These options are only necessary for some sites. If you\'re not sure what you should enter here, leave the default settings or check with your hosting provider.') ); // Database host $form['advanced_options']['db_host'] = array( '#type' => 'textfield', - '#title' => 'Database host', + '#title' => st('Database host'), '#default_value' => $db_host, '#size' => 45, '#maxlength' => 45, '#required' => TRUE, - '#description' => 'If your database is located on a different server, change this.', + '#description' => st('If your database is located on a different server, change this.'), ); // Database prefix $form['advanced_options']['db_prefix'] = array( '#type' => 'textfield', - '#title' => 'Database prefix', + '#title' => st('Database prefix'), '#default_value' => $db_prefix, '#size' => 45, '#maxlength' => 45, @@ -251,7 +251,7 @@ $form['save'] = array( '#type' => 'submit', - '#value' => 'Save configuration', + '#value' => st('Save configuration'), ); $form['errors'] = array(); @@ -361,7 +361,7 @@ drupal_maintenance_theme(); - drupal_set_title('Select an installation profile'); + drupal_set_title(st('Select an installation profile')); print theme('install_page', drupal_get_form('install_select_profile_form', $profiles)); exit; } @@ -388,7 +388,7 @@ } $form['submit'] = array( '#type' => 'submit', - '#value' => 'Save configuration', + '#value' => st('Save configuration'), ); return $form; } @@ -398,8 +398,8 @@ */ function install_no_profile_error() { drupal_maintenance_theme(); - drupal_set_title('No profiles available'); - print theme('install_page', '

We were unable to find any installer profiles. Installer profiles tell us what modules to enable and what schema to install in the database. A profile is necessary to continue with the installation process.

'); + drupal_set_title(st('No profiles available')); + print theme('install_page', st('

We were unable to find any installer profiles. Installer profiles tell us what modules to enable and what schema to install in the database. A profile is necessary to continue with the installation process.

')); exit; } @@ -411,8 +411,8 @@ global $base_url; drupal_maintenance_theme(); - drupal_set_title('Drupal already installed'); - print theme('install_page', ''); + drupal_set_title(st('Drupal already installed')); + print theme('install_page', st('', array('@base-url' => $base_url))); exit; } @@ -442,8 +442,7 @@ } else { // No more steps - $msg = drupal_set_message() ? 'Please review the messages above before continuing on to your new site.' : 'You may now visit your new site.'; - $output .= strtr('

'. $msg .'

', array('%url' => url(''))); + $output .= '

' . (drupal_set_message() ? st('Please review the messages above before continuing on to your new site.', array('@url' => url(''))) : st('You may now visit your new site.', array('@url' => url('')))) . '

'; } // Output page. print theme('maintenance_page', $output); Index: includes/install.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/install.inc,v retrieving revision 1.15 diff -u -r1.15 install.inc --- includes/install.inc 18 Aug 2006 18:58:44 -0000 1.15 +++ includes/install.inc 18 Aug 2006 20:40:18 -0000 @@ -549,11 +549,23 @@ * when the theme system is not available. */ function st($string, $args = array()) { + static $locale_strings = NULL; + + if (!isset($locale_strings)) { + $locale_strings = array(); + if (file_exists('./locale/installer.po')) { + require_once './includes/locale.inc'; + $file = (object) array('filepath' => './locale/installer.po'); + _locale_import_read_po('mem-store', $file); + $locale_strings = _locale_import_one_string('mem-report'); + } + } + require_once './includes/theme.inc'; $GLOBALS['theme'] = 'theme'; // Transform arguments before inserting them array_walk($args, '_st'); - return strtr($string, $args); + return strtr((!empty($locale_strings[$string]) ? $locale_strings[$string] : $string), $args); } /** Index: includes/locale.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/locale.inc,v retrieving revision 1.88 diff -u -r1.88 locale.inc --- includes/locale.inc 18 Aug 2006 18:58:44 -0000 1.88 +++ includes/locale.inc 18 Aug 2006 20:40:19 -0000 @@ -455,9 +455,12 @@ /** * Parses Gettext Portable Object file information and inserts into database * - * @param $file Object contains properties of local file to be imported - * @param $lang Language code - * @param $mode should existing translations be replaced? + * @param $file + * Drupal file object corresponding to the PO file to import + * @param $lang + * Language code + * @param $mode + * Should existing translations be replaced ('overwrite' or 'keep') */ function _locale_import_po($file, $lang, $mode) { // If not in 'safe mode', increase the maximum execution time: @@ -472,14 +475,14 @@ } // Get strings from file (returns on failure after a partial import, or on success) - $status = _locale_import_read_po($file, $mode, $lang); + $status = _locale_import_read_po('db-store', $file, $mode, $lang); if ($status === FALSE) { // error messages are set in _locale_import_read_po return FALSE; } // Get status information on import process - list($headerdone, $additions, $updates) = _locale_import_one_string('report', $mode); + list($headerdone, $additions, $updates) = _locale_import_one_string('db-report'); if (!$headerdone) { drupal_set_message(t('The translation file %filename appears to have a missing or malformed header.', array('%filename' => $file->filename)), 'error'); @@ -499,15 +502,21 @@ /** * Parses Gettext Portable Object file into an array * - * @param $file Object with properties of local file to parse + * @param $op + * Storage operation type: db-store or mem-store + * @param $file + * Drupal file object corresponding to the PO file to import + * @param $mode + * Should existing translations be replaced ('overwrite' or 'keep') + * @param $lang + * Language code * @author Jacobo Tarrio */ -function _locale_import_read_po($file, $mode, $lang) { +function _locale_import_read_po($op, $file, $mode = NULL, $lang = NULL) { - $message = theme('placeholder', $file->filename); $fd = fopen($file->filepath, "rb"); // File will get closed by PHP on return if (!$fd) { - drupal_set_message(t('The translation import failed, because the file %filename could not be read.', array('%filename' => $message)), 'error'); + _locale_import_message('The translation import failed, because the file %filename could not be read.', $file); return FALSE; } @@ -526,25 +535,25 @@ $current["#"][] = substr($line, 1); } elseif (($context == "MSGSTR") || ($context == "MSGSTR_ARR")) { // End current entry, start a new one - _locale_import_one_string($current, $mode, $lang); + _locale_import_one_string($op, $current, $mode, $lang); $current = array(); $current["#"][] = substr($line, 1); $context = "COMMENT"; } else { // Parse error - drupal_set_message(t('The translation file %filename contains an error: "msgstr" was expected but not found on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains an error: "msgstr" was expected but not found on line %line.', $file, $lineno); return FALSE; } } elseif (!strncmp("msgid_plural", $line, 12)) { if ($context != "MSGID") { // Must be plural form for current entry - drupal_set_message(t('The translation file %filename contains an error: "msgid_plural" was expected but not found on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains an error: "msgid_plural" was expected but not found on line %line.', $file, $lineno); return FALSE; } $line = trim(substr($line, 12)); $quoted = _locale_import_parse_quoted($line); if ($quoted === FALSE) { - drupal_set_message(t('The translation file %filename contains a syntax error on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains a syntax error on line %line.', $file, $lineno); return FALSE; } $current["msgid"] = $current["msgid"] ."\0". $quoted; @@ -552,17 +561,17 @@ } elseif (!strncmp("msgid", $line, 5)) { if ($context == "MSGSTR") { // End current entry, start a new one - _locale_import_one_string($current, $mode, $lang); + _locale_import_one_string($op, $current, $mode, $lang); $current = array(); } elseif ($context == "MSGID") { // Already in this context? Parse error - drupal_set_message(t('The translation file %filename contains an error: "msgid" is unexpected on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains an error: "msgid" is unexpected on line %line.', $file, $lineno); return FALSE; } $line = trim(substr($line, 5)); $quoted = _locale_import_parse_quoted($line); if ($quoted === FALSE) { - drupal_set_message(t('The translation file %filename contains a syntax error on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains a syntax error on line %line.', $file, $lineno); return FALSE; } $current["msgid"] = $quoted; @@ -570,11 +579,11 @@ } elseif (!strncmp("msgstr[", $line, 7)) { if (($context != "MSGID") && ($context != "MSGID_PLURAL") && ($context != "MSGSTR_ARR")) { // Must come after msgid, msgid_plural, or msgstr[] - drupal_set_message(t('The translation file %filename contains an error: "msgstr[]" is unexpected on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains an error: "msgstr[]" is unexpected on line %line.', $file, $lineno); return FALSE; } if (strpos($line, "]") === FALSE) { - drupal_set_message(t('The translation file %filename contains a syntax error on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains a syntax error on line %line.', $file, $lineno); return FALSE; } $frombracket = strstr($line, "["); @@ -582,7 +591,7 @@ $line = trim(strstr($line, " ")); $quoted = _locale_import_parse_quoted($line); if ($quoted === FALSE) { - drupal_set_message(t('The translation file %filename contains a syntax error on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains a syntax error on line %line.', $file, $lineno); return FALSE; } $current["msgstr"][$plural] = $quoted; @@ -590,13 +599,13 @@ } elseif (!strncmp("msgstr", $line, 6)) { if ($context != "MSGID") { // Should come just after a msgid block - drupal_set_message(t('The translation file %filename contains an error: "msgstr" is unexpected on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains an error: "msgstr" is unexpected on line %line.', $file, $lineno); return FALSE; } $line = trim(substr($line, 6)); $quoted = _locale_import_parse_quoted($line); if ($quoted === FALSE) { - drupal_set_message(t('The translation file %filename contains a syntax error on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains a syntax error on line %line.', $file, $lineno); return FALSE; } $current["msgstr"] = $quoted; @@ -605,7 +614,7 @@ elseif ($line != "") { $quoted = _locale_import_parse_quoted($line); if ($quoted === FALSE) { - drupal_set_message(t('The translation file %filename contains a syntax error on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains a syntax error on line %line.', $file, $lineno); return FALSE; } if (($context == "MSGID") || ($context == "MSGID_PLURAL")) { @@ -618,7 +627,7 @@ $current["msgstr"][$plural] .= $quoted; } else { - drupal_set_message(t('The translation file %filename contains an error: there is an unexpected string on line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename contains an error: there is an unexpected string on line %line.', $file, $lineno); return FALSE; } } @@ -626,133 +635,174 @@ // End of PO file, flush last entry if (($context == "MSGSTR") || ($context == "MSGSTR_ARR")) { - _locale_import_one_string($current, $mode, $lang); + _locale_import_one_string($op, $current, $mode, $lang); } elseif ($context != "COMMENT") { - drupal_set_message(t('The translation file %filename ended unexpectedly at line %line.', array('%filename' => $message, '%line' => $lineno)), 'error'); + _locale_import_message('The translation file %filename ended unexpectedly at line %line.', $file, $lineno); return FALSE; } } /** + * Sets an error message occured during locale file parsing. + * + * @param $message + * The message to be translated + * @param $file + * Drupal file object corresponding to the PO file to import + * @param $lineno + * An optional line number argument + */ +function _locale_import_message($message, $file, $lineno = NULL) { + $vars = array('%filename' => $file); + if (isset($lineno)) { + $vars['%lineno'] = $lineno; + } + $t = function_exists('installer_main') ? 'st' : 't'; + drupal_set_message($t($message, $vars), 'error'); +} + +/** * Imports a string into the database * - * @param $value Information about the string + * @param $op + * Operation to perform: 'db-store', 'db-report', 'mem-store' or 'mem-report' + * @param $value + * Details of the string stored + * @param $mode + * Should existing translations be replaced ('overwrite' or 'keep') + * @param $lang + * Language to store the string in * @author Jacobo Tarrio */ -function _locale_import_one_string($value, $mode, $lang = NULL) { +function _locale_import_one_string($op, $value = NULL, $mode = NULL, $lang = NULL) { static $additions = 0; static $updates = 0; static $headerdone = FALSE; + static $strings = array(); - // Report the changes made (called at end of import) - if ($value == 'report') { - return array($headerdone, $additions, $updates); - } - // Current string is the header information - elseif ($value['msgid'] == '') { - $hdr = _locale_import_parse_header($value['msgstr']); - - // Get the plural formula - if ($hdr["Plural-Forms"] && $p = _locale_import_parse_plural_forms($hdr["Plural-Forms"], $file->filename)) { - list($nplurals, $plural) = $p; - db_query("UPDATE {locales_meta} SET plurals = %d, formula = '%s' WHERE locale = '%s'", $nplurals, $plural, $lang); - } - else { - db_query("UPDATE {locales_meta} SET plurals = %d, formula = '%s' WHERE locale = '%s'", 0, '', $lang); - } - $headerdone = TRUE; - } - // Some real string to import - else { - $comments = filter_xss_admin(_locale_import_shorten_comments($value['#'])); - - // Handle a translation for some plural string - if (strpos($value['msgid'], "\0")) { - $english = explode("\0", $value['msgid'], 2); - $entries = array_keys($value['msgstr']); - for ($i = 3; $i <= count($entries); $i++) { - $english[] = $english[1]; - } - $translation = array_map('_locale_import_append_plural', $value['msgstr'], $entries); - $english = array_map('_locale_import_append_plural', $english, $entries); - foreach ($translation as $key => $trans) { - if ($key == 0) { - $plid = 0; + switch ($op) { + // Return stored strings + case 'mem-report': + return $strings; + + // Store string in memory (only supports single strings) + case 'mem-store': + $strings[$value['msgid']] = $value['msgstr']; + return; + + // Called at end of import to inform the user + case 'db-report': + return array($headerdone, $additions, $updates); + + // Store the string we got in the database + case 'db-store': + // We got header information + if ($value['msgid'] == '') { + $hdr = _locale_import_parse_header($value['msgstr']); + + // Get the plural formula + if ($hdr["Plural-Forms"] && $p = _locale_import_parse_plural_forms($hdr["Plural-Forms"], $file->filename)) { + list($nplurals, $plural) = $p; + db_query("UPDATE {locales_meta} SET plurals = %d, formula = '%s' WHERE locale = '%s'", $nplurals, $plural, $lang); } - $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english[$key])); - if ($loc->lid) { // a string exists - $lid = $loc->lid; - // update location field - db_query("UPDATE {locales_source} SET location = '%s' WHERE lid = %d", $comments, $lid); - $trans2 = db_fetch_object(db_query("SELECT lid, translation, plid, plural FROM {locales_target} WHERE lid = %d AND locale = '%s'", $lid, $lang)); - if (!$trans2->lid) { // no translation in current language - db_query("INSERT INTO {locales_target} (lid, locale, translation, plid, plural) VALUES (%d, '%s', '%s', %d, %d)", $lid, $lang, filter_xss_admin($trans), $plid, $key); - $additions++; - } // translation exists - else if ($mode == 'overwrite' || $trans2->translation == '') { - db_query("UPDATE {locales_target} SET translation = '%s', plid = %d, plural = %d WHERE locale = '%s' AND lid = %d", filter_xss_admin($trans), $plid, $key, $lang, $lid); - if ($trans2->translation == '') { - $additions++; + else { + db_query("UPDATE {locales_meta} SET plurals = %d, formula = '%s' WHERE locale = '%s'", 0, '', $lang); + } + $headerdone = TRUE; + } + + // Some real string to import + else { + $comments = filter_xss_admin(_locale_import_shorten_comments($value['#'])); + + // Handle a translation for some plural string + if (strpos($value['msgid'], "\0")) { + $english = explode("\0", $value['msgid'], 2); + $entries = array_keys($value['msgstr']); + for ($i = 3; $i <= count($entries); $i++) { + $english[] = $english[1]; + } + $translation = array_map('_locale_import_append_plural', $value['msgstr'], $entries); + $english = array_map('_locale_import_append_plural', $english, $entries); + foreach ($translation as $key => $trans) { + if ($key == 0) { + $plid = 0; } - else { - $updates++; + $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english[$key])); + if ($loc->lid) { // a string exists + $lid = $loc->lid; + // update location field + db_query("UPDATE {locales_source} SET location = '%s' WHERE lid = %d", $comments, $lid); + $trans2 = db_fetch_object(db_query("SELECT lid, translation, plid, plural FROM {locales_target} WHERE lid = %d AND locale = '%s'", $lid, $lang)); + if (!$trans2->lid) { // no translation in current language + db_query("INSERT INTO {locales_target} (lid, locale, translation, plid, plural) VALUES (%d, '%s', '%s', %d, %d)", $lid, $lang, filter_xss_admin($trans), $plid, $key); + $additions++; + } // translation exists + else if ($mode == 'overwrite' || $trans2->translation == '') { + db_query("UPDATE {locales_target} SET translation = '%s', plid = %d, plural = %d WHERE locale = '%s' AND lid = %d", filter_xss_admin($trans), $plid, $key, $lang, $lid); + if ($trans2->translation == '') { + $additions++; + } + else { + $updates++; + } + } } + else { // no string + db_query("INSERT INTO {locales_source} (location, source) VALUES ('%s', '%s')", $comments, filter_xss_admin($english[$key])); + $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english[$key])); + $lid = $loc->lid; + db_query("INSERT INTO {locales_target} (lid, locale, translation, plid, plural) VALUES (%d, '%s', '%s', %d, %d)", $lid, $lang, filter_xss_admin($trans), $plid, $key); + if ($trans != '') { + $additions++; + } + } + $plid = $lid; } } - else { // no string - db_query("INSERT INTO {locales_source} (location, source) VALUES ('%s', '%s')", $comments, filter_xss_admin($english[$key])); - $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english[$key])); - $lid = $loc->lid; - db_query("INSERT INTO {locales_target} (lid, locale, translation, plid, plural) VALUES (%d, '%s', '%s', %d, %d)", $lid, $lang, filter_xss_admin($trans), $plid, $key); - if ($trans != '') { - $additions++; - } - } - $plid = $lid; - } - } - // A simple translation - else { - $english = $value['msgid']; - $translation = $value['msgstr']; - $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english)); - if ($loc->lid) { // a string exists - $lid = $loc->lid; - // update location field - db_query("UPDATE {locales_source} SET location = '%s' WHERE source = '%s'", $comments, $english); - $trans = db_fetch_object(db_query("SELECT lid, translation FROM {locales_target} WHERE lid = %d AND locale = '%s'", $lid, $lang)); - if (!$trans->lid) { // no translation in current language - db_query("INSERT INTO {locales_target} (lid, locale, translation) VALUES (%d, '%s', '%s')", $lid, $lang, filter_xss_admin($translation)); - $additions++; - } // translation exists - else if ($mode == 'overwrite') { //overwrite in any case - db_query("UPDATE {locales_target} SET translation = '%s' WHERE locale = '%s' AND lid = %d", filter_xss_admin($translation), $lang, $lid); - if ($trans->translation == '') { - $additions++; + // A simple translation + else { + $english = $value['msgid']; + $translation = $value['msgstr']; + $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english)); + if ($loc->lid) { // a string exists + $lid = $loc->lid; + // update location field + db_query("UPDATE {locales_source} SET location = '%s' WHERE source = '%s'", $comments, $english); + $trans = db_fetch_object(db_query("SELECT lid, translation FROM {locales_target} WHERE lid = %d AND locale = '%s'", $lid, $lang)); + if (!$trans->lid) { // no translation in current language + db_query("INSERT INTO {locales_target} (lid, locale, translation) VALUES (%d, '%s', '%s')", $lid, $lang, filter_xss_admin($translation)); + $additions++; + } // translation exists + else if ($mode == 'overwrite') { //overwrite in any case + db_query("UPDATE {locales_target} SET translation = '%s' WHERE locale = '%s' AND lid = %d", filter_xss_admin($translation), $lang, $lid); + if ($trans->translation == '') { + $additions++; + } + else { + $updates++; + } + } // overwrite if empty string + else if ($trans->translation == '') { + db_query("UPDATE {locales_target} SET translation = '%s' WHERE locale = '%s' AND lid = %d", $translation, $lang, $lid); + $additions++; + } } - else { - $updates++; + else { // no string + db_query("INSERT INTO {locales_source} (location, source) VALUES ('%s', '%s')", $comments, $english); + $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english)); + $lid = $loc->lid; + db_query("INSERT INTO {locales_target} (lid, locale, translation) VALUES (%d, '%s', '%s')", $lid, $lang, filter_xss_admin($translation)); + if ($translation != '') { + $additions++; + } } - } // overwrite if empty string - else if ($trans->translation == '') { - db_query("UPDATE {locales_target} SET translation = '%s' WHERE locale = '%s' AND lid = %d", $translation, $lang, $lid); - $additions++; } } - else { // no string - db_query("INSERT INTO {locales_source} (location, source) VALUES ('%s', '%s')", $comments, $english); - $loc = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $english)); - $lid = $loc->lid; - db_query("INSERT INTO {locales_target} (lid, locale, translation) VALUES (%d, '%s', '%s')", $lid, $lang, filter_xss_admin($translation)); - if ($translation != '') { - $additions++; - } - } - } - } + } // end of db-store operation } /** @@ -780,10 +830,13 @@ /** * Parses a Plural-Forms entry from a Gettext Portable Object file header * - * @param $pluralforms A string containing the Plural-Forms entry - * @param $filename A string containing the filename - * @return An array containing the number of plurals and a - * formula in PHP for computing the plural form + * @param $pluralforms + * A string containing the Plural-Forms entry + * @param $filename + * A string containing the filename + * @return + * An array containing the number of plurals and a + * formula in PHP for computing the plural form * @author Jacobo Tarrio */ function _locale_import_parse_plural_forms($pluralforms, $filename) {