public function repr($value)
{
if (is_int($value) || is_float($value)) {
+ if (false !== $locale = setlocale(LC_NUMERIC, 0)) {
+ setlocale(LC_NUMERIC, 'C');
+ }
+
+ $value = is_string($value) ? "'$value'" : (is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : strval($value));
+
+ if (false !== $locale) {
+ setlocale(LC_NUMERIC, $locale);
+ }
+
$this->raw($value);
} elseif (null === $value) {
$this->raw('null');
--- /dev/null
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class Twig_Tests_CompilerTest extends PHPUnit_Framework_TestCase
+{
+ public function testReprNumericValueWithLocale()
+ {
+ $compiler = new Twig_Compiler(new Twig_Environment());
+
+ $locale = setlocale(LC_NUMERIC, 0);
+ if (false === $locale) {
+ $this->markTestSkipped('Your platform does not support locales.');
+ }
+
+ $required_locales = array('fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252');
+ if (false === setlocale(LC_ALL, $required_locales)) {
+ $this->markTestSkipped('Could not set any of required locales: ' . implode(", ", $required_locales));
+ }
+
+ $this->assertEquals('1.2', $compiler->repr(1.2)->getSource());
+ $this->assertContains('fr', strtolower(setlocale(LC_NUMERIC, 0)));
+
+ setlocale(LC_ALL, $locale);
+ }
+}