]> granicus.if.org Git - php/commitdiff
Fixed bug #70484 selectordinal doesn't work with named parameters
authorAnatol Belski <ab@php.net>
Mon, 11 Apr 2016 13:00:58 +0000 (15:00 +0200)
committerAnatol Belski <ab@php.net>
Mon, 11 Apr 2016 13:01:22 +0000 (15:01 +0200)
ext/intl/msgformat/msgformat_helpers.cpp
ext/intl/tests/msgfmt_bug70484.phpt [new file with mode: 0644]

index ed63105fa7be3e7a6062d9bbdbe291ec439328ad..ce7899edd990ed3d40febcc168d1489a34ba98e4 100644 (file)
@@ -264,6 +264,10 @@ static HashTable *umsg_parse_format(MessageFormatter_object *mfo,
                                type = Formattable::kDouble;
                        } else if (argType == UMSGPAT_ARG_TYPE_SELECT) {
                                type = Formattable::kString;
+#if U_ICU_VERSION_MAJOR_NUM >= 50
+                       } else if (argType == UMSGPAT_ARG_TYPE_SELECTORDINAL) {
+                               type = Formattable::kDouble;
+#endif
                        } else {
                                type = Formattable::kString;
                        }
diff --git a/ext/intl/tests/msgfmt_bug70484.phpt b/ext/intl/tests/msgfmt_bug70484.phpt
new file mode 100644 (file)
index 0000000..9d0bdc4
--- /dev/null
@@ -0,0 +1,97 @@
+--TEST--
+Bug #70484 selectordinal doesn't work with named parameters
+--SKIPIF--
+<?php
+if (!extension_loaded('intl'))
+       die('skip intl extension not enabled');
+if (version_compare(INTL_ICU_VERSION, '5.0') < 0)
+       die('skip for ICU 5.0+');
+--FILE--
+<?php
+
+$locale = array("de", "fr", "en", "ru",);
+
+$data = array(42, 42.42, 2147483643, 2147483643.12345, 5);
+
+foreach ($locale as $lc) {
+       echo "$lc string key\n";
+       $m = new MessageFormatter($lc, "{n, selectordinal, =5 {five} zero {#-zero} one {#-one} two {#-two} few {#-few} many {#-many} other {#-other}}");
+       foreach ($data as $i) {
+               var_dump($m->format(array("n" => $i)));
+               if ($m->getErrorCode()) {
+                       echo "$lc $i ", $m->getErrorMessage();
+               }
+       }
+       echo "\n";
+
+       echo "$lc numeric key\n";
+       $m = new MessageFormatter($lc, "{0, selectordinal, =5 {five} zero {#-zero} one {#-one} two {#-two} few {#-few} many {#-many} other {#-other}}");
+       foreach ($data as $i) {
+               var_dump($m->format(array($i)));
+               if ($m->getErrorCode()) {
+                       echo "$lc $i ", $m->getErrorMessage();
+               }
+       }
+       echo "\n";
+}
+
+?>
+==DONE==
+--EXPECT--
+de string key
+string(8) "42-other"
+string(11) "42,42-other"
+string(19) "2.147.483.643-other"
+string(23) "2.147.483.643,123-other"
+string(4) "five"
+
+de numeric key
+string(8) "42-other"
+string(11) "42,42-other"
+string(19) "2.147.483.643-other"
+string(23) "2.147.483.643,123-other"
+string(4) "five"
+
+fr string key
+string(8) "42-other"
+string(11) "42,42-other"
+string(22) "2 147 483 643-other"
+string(26) "2 147 483 643,123-other"
+string(4) "five"
+
+fr numeric key
+string(8) "42-other"
+string(11) "42,42-other"
+string(22) "2 147 483 643-other"
+string(26) "2 147 483 643,123-other"
+string(4) "five"
+
+en string key
+string(6) "42-two"
+string(11) "42.42-other"
+string(17) "2,147,483,643-few"
+string(23) "2,147,483,643.123-other"
+string(4) "five"
+
+en numeric key
+string(6) "42-two"
+string(11) "42.42-other"
+string(17) "2,147,483,643-few"
+string(23) "2,147,483,643.123-other"
+string(4) "five"
+
+ru string key
+string(8) "42-other"
+string(11) "42,42-other"
+string(22) "2 147 483 643-other"
+string(26) "2 147 483 643,123-other"
+string(4) "five"
+
+ru numeric key
+string(8) "42-other"
+string(11) "42,42-other"
+string(22) "2 147 483 643-other"
+string(26) "2 147 483 643,123-other"
+string(4) "five"
+
+==DONE==