diff --git a/includes/locale.inc b/includes/locale.inc index 0db4d4a..72e4668 100644 --- a/includes/locale.inc +++ b/includes/locale.inc @@ -978,7 +978,7 @@ function _locale_import_one_string($op, $value = NULL, $mode = NULL, $lang = NUL // data untouched or if we don't have an existing plural formula. $header = _locale_import_parse_header($value['msgstr']); - // Get the plural formula and update in database. + // Get and store the plural formula if available. if (isset($header["Plural-Forms"]) && $p = _locale_import_parse_plural_forms($header["Plural-Forms"], $file->uri)) { list($nplurals, $plural) = $p; db_update('languages') @@ -989,15 +989,6 @@ function _locale_import_one_string($op, $value = NULL, $mode = NULL, $lang = NUL ->condition('language', $lang) ->execute(); } - else { - db_update('languages') - ->fields(array( - 'plurals' => 0, - 'formula' => '', - )) - ->condition('language', $lang) - ->execute(); - } } $header_done = TRUE; } diff --git a/modules/locale/locale.test b/modules/locale/locale.test index db0bead..fdafd72 100644 --- a/modules/locale/locale.test +++ b/modules/locale/locale.test @@ -793,6 +793,23 @@ class LocaleImportFunctionalTest extends DrupalWebTestCase { // This import should not have changed number of plural forms. $this->assert(db_query("SELECT plurals FROM {languages} WHERE language = 'fr'")->fetchField() == 2, t('Plural numbers untouched.')); + $this->importPoFile($this->getPoFileWithBrokenPlural(), array( + 'langcode' => 'fr', + 'mode' => 1, // Existing strings are kept, only new strings are added. + )); + + // Attempt to import broken .po file as well to prove that this + // will not overwrite the proper plural formula imported above. + $this->assert(db_query("SELECT plurals FROM {languages} WHERE language = 'fr'")->fetchField() == 2, t('Broken plurals: plural numbers untouched.')); + + $this->importPoFile($this->getPoFileWithMissingPlural(), array( + 'langcode' => 'fr', + 'mode' => 1, // Existing strings are kept, only new strings are added. + )); + + // Attempt to import .po file which has no plurals and prove that this + // will not overwrite the proper plural formula imported above. + $this->assert(db_query("SELECT plurals FROM {languages} WHERE language = 'fr'")->fetchField() == 2, t('No plurals: plural numbers untouched.')); + + // Try importing a .po file with overriding strings, and ensure existing // strings are overwritten. $this->importPoFile($this->getOverwritePoFile(), array( @@ -1072,6 +1089,42 @@ msgstr "" EOF; } + + /** + * Returns a .po file with a missing plural formula. + */ + function getPoFileWithMissingPlural() { + return <<< EOF +msgid "" +msgstr "" +"Project-Id-Version: Drupal 7\\n" +"MIME-Version: 1.0\\n" +"Content-Type: text/plain; charset=UTF-8\\n" +"Content-Transfer-Encoding: 8bit\\n" + +msgid "Monday" +msgstr "Ponedjeljak" +EOF; + } + + /** + * Returns a .po file with a broken plural formula. + */ + function getPoFileWithBrokenPlural() { + return <<< EOF +msgid "" +msgstr "" +"Project-Id-Version: Drupal 7\\n" +"MIME-Version: 1.0\\n" +"Content-Type: text/plain; charset=UTF-8\\n" +"Content-Transfer-Encoding: 8bit\\n" +"Plural-Forms: broken, will not parse\\n" + +msgid "Monday" +msgstr "lundi" +EOF; + } + } /**