[Translation] Fix InvalidArgumentException when using untranslated plural forms from .po files
This commit is contained in:
parent
7ac01bc723
commit
fea815b2f5
@ -49,10 +49,16 @@ class MessageSelector
|
|||||||
*/
|
*/
|
||||||
public function choose($message, $number, $locale)
|
public function choose($message, $number, $locale)
|
||||||
{
|
{
|
||||||
preg_match_all('/(?:\|\||[^\|])++/', $message, $parts);
|
$parts = array();
|
||||||
|
if (preg_match('/^\|++$/', $message)) {
|
||||||
|
$parts = explode('|', $message);
|
||||||
|
} elseif (preg_match_all('/(?:\|\||[^\|])++/', $message, $matches)) {
|
||||||
|
$parts = $matches[0];
|
||||||
|
}
|
||||||
|
|
||||||
$explicitRules = array();
|
$explicitRules = array();
|
||||||
$standardRules = array();
|
$standardRules = array();
|
||||||
foreach ($parts[0] as $part) {
|
foreach ($parts as $part) {
|
||||||
$part = trim(str_replace('||', '|', $part));
|
$part = trim(str_replace('||', '|', $part));
|
||||||
|
|
||||||
if (preg_match('/^(?P<interval>'.Interval::getIntervalRegexp().')\s*(?P<message>.*?)$/xs', $part, $matches)) {
|
if (preg_match('/^(?P<interval>'.Interval::getIntervalRegexp().')\s*(?P<message>.*?)$/xs', $part, $matches)) {
|
||||||
@ -76,7 +82,7 @@ class MessageSelector
|
|||||||
if (!isset($standardRules[$position])) {
|
if (!isset($standardRules[$position])) {
|
||||||
// when there's exactly one rule given, and that rule is a standard
|
// when there's exactly one rule given, and that rule is a standard
|
||||||
// rule, use this rule
|
// rule, use this rule
|
||||||
if (1 === count($parts[0]) && isset($standardRules[0])) {
|
if (1 === count($parts) && isset($standardRules[0])) {
|
||||||
return $standardRules[0];
|
return $standardRules[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,6 +128,10 @@ class MessageSelectorTest extends TestCase
|
|||||||
array("This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1),
|
array("This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1),
|
||||||
// esacape pipe
|
// esacape pipe
|
||||||
array('This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0),
|
array('This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0),
|
||||||
|
// Empty plural set (2 plural forms) from a .PO file
|
||||||
|
array('', '|', 1),
|
||||||
|
// Empty plural set (3 plural forms) from a .PO file
|
||||||
|
array('', '||', 1),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user