Skip to content
Snippets Groups Projects
Commit fe0c128c authored by Dries Buytaert's avatar Dries Buytaert
Browse files

- Patch #504506 by andypost: Drupal.formatPlural incorrectly handle complex plural rules.

parent 24b02d36
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
...@@ -1637,35 +1637,12 @@ function _locale_rebuild_js($langcode = NULL) { ...@@ -1637,35 +1637,12 @@ function _locale_rebuild_js($langcode = NULL) {
} }
// Construct the array for JavaScript translations. // Construct the array for JavaScript translations.
// We sort on plural so that we have all plural forms before singular forms. // Only add strings with a translation to the translations array.
$result = db_query("SELECT s.lid, s.source, t.plid, t.plural, t.translation FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid AND t.language = :language WHERE s.location LIKE '%.js%' AND s.textgroup = :textgroup ORDER BY t.plural DESC", array(':language' => $language->language, ':textgroup' => 'default')); $result = db_query("SELECT s.lid, s.source, t.translation FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid AND t.language = :language WHERE s.location LIKE '%.js%' AND s.textgroup = :textgroup AND t.translation IS NOT NULL", array(':language' => $language->language, ':textgroup' => 'default'));
$translations = $plurals = array(); $translations = array();
foreach ($result as $data) { foreach ($result as $data) {
// Only add this to the translations array when there is actually a translation. $translations[$data->source] = $data->translation;
if (!empty($data->translation)) {
if ($data->plural) {
// When the translation is a plural form, first add it to another array and
// wait for the singular (parent) translation.
if (!isset($plurals[$data->plid])) {
$plurals[$data->plid] = array($data->plural => $data->translation);
}
else {
$plurals[$data->plid] += array($data->plural => $data->translation);
}
}
elseif (isset($plurals[$data->lid])) {
// There are plural translations for this translation, so get them from
// the plurals array and add them to the final translations array.
$translations[$data->source] = array($data->plural => $data->translation) + $plurals[$data->lid];
unset($plurals[$data->lid]);
}
else {
// There are no plural forms for this translation, so just add it to
// the translations array.
$translations[$data->source] = $data->translation;
}
}
} }
// Construct the JavaScript file, if there are translations. // Construct the JavaScript file, if there are translations.
......
...@@ -216,7 +216,7 @@ Drupal.formatPlural = function (count, singular, plural, args) { ...@@ -216,7 +216,7 @@ Drupal.formatPlural = function (count, singular, plural, args) {
else { else {
args['@count[' + index + ']'] = args['@count']; args['@count[' + index + ']'] = args['@count'];
delete args['@count']; delete args['@count'];
return Drupal.t(plural.replace('@count', '@count[' + index + ']')); return Drupal.t(plural.replace('@count', '@count[' + index + ']'), args);
} }
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment