r99046 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r99045‎ | r99046 | r99047 >
Date:20:22, 5 October 2011
Author:awjrichards
Status:deferred
Tags:
Comment:
Copying ParserFunctions from 1.17wmf1 branch to payments deployment branch
Modified paths:
  • /branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions (added) (history)

Diff [purge]

Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/exprTests.txt
@@ -0,0 +1,39 @@
 2+1 + 1 = 2
 3+-1 + 1 = 0
 4++1 + 1 = 2
 5+4 * 4 = 16
 6+-4 * -4 = 4 * 4
 7+(1/3) * 3 = 1
 8+3 / 1.5 = 2
 9+3 mod 2 = 1
 10+1 or 0
 11+not (1 and 0)
 12+not 0
 13+4.0 round 0; 4
 14+ceil 4; 4
 15+floor 4; 4
 16+4.5 round 0; 5
 17+4.2 round 0; 4
 18+-4.2 round 0; -4
 19+-4.5 round 0; -5
 20+-2.0 round 0; -2
 21+ceil -3; -3
 22+floor -6.0; -6
 23+ceil 4.2; 5
 24+ceil -4.5; -4
 25+floor -4.5; -5
 26+4 < 5
 27+-5 < 2
 28+-2 <= -2
 29+abs(-2); 2
 30+4 > 3
 31+4 > -3
 32+5 >= 2
 33+2 >= 2
 34+1 != 2
 35+not (1 != 1)
 36+1e4 = 10000
 37+1e-2 = 0.01
 38+ln(exp(1));1
 39+trunc(4.5);4
 40+trunc(-4.5);-4
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/exprTests.txt
___________________________________________________________________
Added: svn:eol-style
141 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/Expr.php
@@ -0,0 +1,555 @@
 2+<?php
 3+
 4+if ( !defined( 'MEDIAWIKI' ) ) {
 5+ die( 'This file is a MediaWiki extension, it is not a valid entry point' );
 6+}
 7+
 8+// Character classes
 9+define( 'EXPR_WHITE_CLASS', " \t\r\n" );
 10+define( 'EXPR_NUMBER_CLASS', '0123456789.' );
 11+
 12+// Token types
 13+define( 'EXPR_WHITE', 1 );
 14+define( 'EXPR_NUMBER', 2 );
 15+define( 'EXPR_NEGATIVE', 3 );
 16+define( 'EXPR_POSITIVE', 4 );
 17+define( 'EXPR_PLUS', 5 );
 18+define( 'EXPR_MINUS', 6 );
 19+define( 'EXPR_TIMES', 7 );
 20+define( 'EXPR_DIVIDE', 8 );
 21+define( 'EXPR_MOD', 9 );
 22+define( 'EXPR_OPEN', 10 );
 23+define( 'EXPR_CLOSE', 11 );
 24+define( 'EXPR_AND', 12 );
 25+define( 'EXPR_OR', 13 );
 26+define( 'EXPR_NOT', 14 );
 27+define( 'EXPR_EQUALITY', 15 );
 28+define( 'EXPR_LESS', 16 );
 29+define( 'EXPR_GREATER', 17 );
 30+define( 'EXPR_LESSEQ', 18 );
 31+define( 'EXPR_GREATEREQ', 19 );
 32+define( 'EXPR_NOTEQ', 20 );
 33+define( 'EXPR_ROUND', 21 );
 34+define( 'EXPR_EXPONENT', 22 );
 35+define( 'EXPR_SINE', 23 );
 36+define( 'EXPR_COSINE', 24 );
 37+define( 'EXPR_TANGENS', 25 );
 38+define( 'EXPR_ARCSINE', 26 );
 39+define( 'EXPR_ARCCOS', 27 );
 40+define( 'EXPR_ARCTAN', 28 );
 41+define( 'EXPR_EXP', 29 );
 42+define( 'EXPR_LN', 30 );
 43+define( 'EXPR_ABS', 31 );
 44+define( 'EXPR_FLOOR', 32 );
 45+define( 'EXPR_TRUNC', 33 );
 46+define( 'EXPR_CEIL', 34 );
 47+define( 'EXPR_POW', 35 );
 48+define( 'EXPR_PI', 36 );
 49+
 50+class ExprError extends Exception {
 51+ public function __construct( $msg, $parameter = '' ) {
 52+ $this->message = '<strong class="error">' . wfMsgForContent( "pfunc_expr_$msg", htmlspecialchars( $parameter ) ) . '</strong>';
 53+ }
 54+}
 55+
 56+class ExprParser {
 57+ var $maxStackSize = 100;
 58+
 59+ var $precedence = array(
 60+ EXPR_NEGATIVE => 10,
 61+ EXPR_POSITIVE => 10,
 62+ EXPR_EXPONENT => 10,
 63+ EXPR_SINE => 9,
 64+ EXPR_COSINE => 9,
 65+ EXPR_TANGENS => 9,
 66+ EXPR_ARCSINE => 9,
 67+ EXPR_ARCCOS => 9,
 68+ EXPR_ARCTAN => 9,
 69+ EXPR_EXP => 9,
 70+ EXPR_LN => 9,
 71+ EXPR_ABS => 9,
 72+ EXPR_FLOOR => 9,
 73+ EXPR_TRUNC => 9,
 74+ EXPR_CEIL => 9,
 75+ EXPR_NOT => 9,
 76+ EXPR_POW => 8,
 77+ EXPR_TIMES => 7,
 78+ EXPR_DIVIDE => 7,
 79+ EXPR_MOD => 7,
 80+ EXPR_PLUS => 6,
 81+ EXPR_MINUS => 6,
 82+ EXPR_ROUND => 5,
 83+ EXPR_EQUALITY => 4,
 84+ EXPR_LESS => 4,
 85+ EXPR_GREATER => 4,
 86+ EXPR_LESSEQ => 4,
 87+ EXPR_GREATEREQ => 4,
 88+ EXPR_NOTEQ => 4,
 89+ EXPR_AND => 3,
 90+ EXPR_OR => 2,
 91+ EXPR_PI => 0,
 92+ EXPR_OPEN => -1,
 93+ EXPR_CLOSE => -1,
 94+ );
 95+
 96+ var $names = array(
 97+ EXPR_NEGATIVE => '-',
 98+ EXPR_POSITIVE => '+',
 99+ EXPR_NOT => 'not',
 100+ EXPR_TIMES => '*',
 101+ EXPR_DIVIDE => '/',
 102+ EXPR_MOD => 'mod',
 103+ EXPR_PLUS => '+',
 104+ EXPR_MINUS => '-',
 105+ EXPR_ROUND => 'round',
 106+ EXPR_EQUALITY => '=',
 107+ EXPR_LESS => '<',
 108+ EXPR_GREATER => '>',
 109+ EXPR_LESSEQ => '<=',
 110+ EXPR_GREATEREQ => '>=',
 111+ EXPR_NOTEQ => '<>',
 112+ EXPR_AND => 'and',
 113+ EXPR_OR => 'or',
 114+ EXPR_EXPONENT => 'e',
 115+ EXPR_SINE => 'sin',
 116+ EXPR_COSINE => 'cos',
 117+ EXPR_TANGENS => 'tan',
 118+ EXPR_ARCSINE => 'asin',
 119+ EXPR_ARCCOS => 'acos',
 120+ EXPR_ARCTAN => 'atan',
 121+ EXPR_LN => 'ln',
 122+ EXPR_EXP => 'exp',
 123+ EXPR_ABS => 'abs',
 124+ EXPR_FLOOR => 'floor',
 125+ EXPR_TRUNC => 'trunc',
 126+ EXPR_CEIL => 'ceil',
 127+ EXPR_POW => '^',
 128+ EXPR_PI => 'pi',
 129+ );
 130+
 131+
 132+ var $words = array(
 133+ 'mod' => EXPR_MOD,
 134+ 'and' => EXPR_AND,
 135+ 'or' => EXPR_OR,
 136+ 'not' => EXPR_NOT,
 137+ 'round' => EXPR_ROUND,
 138+ 'div' => EXPR_DIVIDE,
 139+ 'e' => EXPR_EXPONENT,
 140+ 'sin' => EXPR_SINE,
 141+ 'cos' => EXPR_COSINE,
 142+ 'tan' => EXPR_TANGENS,
 143+ 'asin' => EXPR_ARCSINE,
 144+ 'acos' => EXPR_ARCCOS,
 145+ 'atan' => EXPR_ARCTAN,
 146+ 'exp' => EXPR_EXP,
 147+ 'ln' => EXPR_LN,
 148+ 'abs' => EXPR_ABS,
 149+ 'trunc' => EXPR_TRUNC,
 150+ 'floor' => EXPR_FLOOR,
 151+ 'ceil' => EXPR_CEIL,
 152+ 'pi' => EXPR_PI,
 153+ );
 154+
 155+ /**
 156+ * Evaluate a mathematical expression
 157+ *
 158+ * The algorithm here is based on the infix to RPN algorithm given in
 159+ * http://montcs.bloomu.edu/~bobmon/Information/RPN/infix2rpn.shtml
 160+ * It's essentially the same as Dijkstra's shunting yard algorithm.
 161+ */
 162+ function doExpression( $expr ) {
 163+ $operands = array();
 164+ $operators = array();
 165+
 166+ # Unescape inequality operators
 167+ $expr = strtr( $expr, array( '&lt;' => '<', '&gt;' => '>',
 168+ '&minus;' => '-', '−' => '-' ) );
 169+
 170+ $p = 0;
 171+ $end = strlen( $expr );
 172+ $expecting = 'expression';
 173+
 174+ while ( $p < $end ) {
 175+ if ( count( $operands ) > $this->maxStackSize || count( $operators ) > $this->maxStackSize ) {
 176+ throw new ExprError( 'stack_exhausted' );
 177+ }
 178+ $char = $expr[$p];
 179+ $char2 = substr( $expr, $p, 2 );
 180+
 181+ // Mega if-elseif-else construct
 182+ // Only binary operators fall through for processing at the bottom, the rest
 183+ // finish their processing and continue
 184+
 185+ // First the unlimited length classes
 186+
 187+ if ( false !== strpos( EXPR_WHITE_CLASS, $char ) ) {
 188+ // Whitespace
 189+ $p += strspn( $expr, EXPR_WHITE_CLASS, $p );
 190+ continue;
 191+ } elseif ( false !== strpos( EXPR_NUMBER_CLASS, $char ) ) {
 192+ // Number
 193+ if ( $expecting != 'expression' ) {
 194+ throw new ExprError( 'unexpected_number' );
 195+ }
 196+
 197+ // Find the rest of it
 198+ $length = strspn( $expr, EXPR_NUMBER_CLASS, $p );
 199+ // Convert it to float, silently removing double decimal points
 200+ $operands[] = floatval( substr( $expr, $p, $length ) );
 201+ $p += $length;
 202+ $expecting = 'operator';
 203+ continue;
 204+ } elseif ( ctype_alpha( $char ) ) {
 205+ // Word
 206+ // Find the rest of it
 207+ $remaining = substr( $expr, $p );
 208+ if ( !preg_match( '/^[A-Za-z]*/', $remaining, $matches ) ) {
 209+ // This should be unreachable
 210+ throw new ExprError( 'preg_match_failure' );
 211+ }
 212+ $word = strtolower( $matches[0] );
 213+ $p += strlen( $word );
 214+
 215+ // Interpret the word
 216+ if ( !isset( $this->words[$word] ) ) {
 217+ throw new ExprError( 'unrecognised_word', $word );
 218+ }
 219+ $op = $this->words[$word];
 220+ switch( $op ) {
 221+ // constant
 222+ case EXPR_EXPONENT:
 223+ if ( $expecting != 'expression' ) {
 224+ continue;
 225+ }
 226+ $operands[] = exp( 1 );
 227+ $expecting = 'operator';
 228+ continue 2;
 229+ case EXPR_PI:
 230+ if ( $expecting != 'expression' ) {
 231+ throw new ExprError( 'unexpected_number' );
 232+ }
 233+ $operands[] = pi();
 234+ $expecting = 'operator';
 235+ continue 2;
 236+ // Unary operator
 237+ case EXPR_NOT:
 238+ case EXPR_SINE:
 239+ case EXPR_COSINE:
 240+ case EXPR_TANGENS:
 241+ case EXPR_ARCSINE:
 242+ case EXPR_ARCCOS:
 243+ case EXPR_ARCTAN:
 244+ case EXPR_EXP:
 245+ case EXPR_LN:
 246+ case EXPR_ABS:
 247+ case EXPR_FLOOR:
 248+ case EXPR_TRUNC:
 249+ case EXPR_CEIL:
 250+ if ( $expecting != 'expression' ) {
 251+ throw new ExprError( 'unexpected_operator', $word );
 252+ }
 253+ $operators[] = $op;
 254+ continue 2;
 255+ }
 256+ // Binary operator, fall through
 257+ $name = $word;
 258+ }
 259+
 260+ // Next the two-character operators
 261+
 262+ elseif ( $char2 == '<=' ) {
 263+ $name = $char2;
 264+ $op = EXPR_LESSEQ;
 265+ $p += 2;
 266+ } elseif ( $char2 == '>=' ) {
 267+ $name = $char2;
 268+ $op = EXPR_GREATEREQ;
 269+ $p += 2;
 270+ } elseif ( $char2 == '<>' || $char2 == '!=' ) {
 271+ $name = $char2;
 272+ $op = EXPR_NOTEQ;
 273+ $p += 2;
 274+ }
 275+
 276+ // Finally the single-character operators
 277+
 278+ elseif ( $char == '+' ) {
 279+ ++$p;
 280+ if ( $expecting == 'expression' ) {
 281+ // Unary plus
 282+ $operators[] = EXPR_POSITIVE;
 283+ continue;
 284+ } else {
 285+ // Binary plus
 286+ $op = EXPR_PLUS;
 287+ }
 288+ } elseif ( $char == '-' ) {
 289+ ++$p;
 290+ if ( $expecting == 'expression' ) {
 291+ // Unary minus
 292+ $operators[] = EXPR_NEGATIVE;
 293+ continue;
 294+ } else {
 295+ // Binary minus
 296+ $op = EXPR_MINUS;
 297+ }
 298+ } elseif ( $char == '*' ) {
 299+ $name = $char;
 300+ $op = EXPR_TIMES;
 301+ ++$p;
 302+ } elseif ( $char == '/' ) {
 303+ $name = $char;
 304+ $op = EXPR_DIVIDE;
 305+ ++$p;
 306+ } elseif ( $char == '^' ) {
 307+ $name = $char;
 308+ $op = EXPR_POW;
 309+ ++$p;
 310+ } elseif ( $char == '(' ) {
 311+ if ( $expecting == 'operator' ) {
 312+ throw new ExprError( 'unexpected_operator', '(' );
 313+ }
 314+ $operators[] = EXPR_OPEN;
 315+ ++$p;
 316+ continue;
 317+ } elseif ( $char == ')' ) {
 318+ $lastOp = end( $operators );
 319+ while ( $lastOp && $lastOp != EXPR_OPEN ) {
 320+ $this->doOperation( $lastOp, $operands );
 321+ array_pop( $operators );
 322+ $lastOp = end( $operators );
 323+ }
 324+ if ( $lastOp ) {
 325+ array_pop( $operators );
 326+ } else {
 327+ throw new ExprError( 'unexpected_closing_bracket' );
 328+ }
 329+ $expecting = 'operator';
 330+ ++$p;
 331+ continue;
 332+ } elseif ( $char == '=' ) {
 333+ $name = $char;
 334+ $op = EXPR_EQUALITY;
 335+ ++$p;
 336+ } elseif ( $char == '<' ) {
 337+ $name = $char;
 338+ $op = EXPR_LESS;
 339+ ++$p;
 340+ } elseif ( $char == '>' ) {
 341+ $name = $char;
 342+ $op = EXPR_GREATER;
 343+ ++$p;
 344+ } else {
 345+ throw new ExprError( 'unrecognised_punctuation', UtfNormal::cleanUp( $char ) );
 346+ }
 347+
 348+ // Binary operator processing
 349+ if ( $expecting == 'expression' ) {
 350+ throw new ExprError( 'unexpected_operator', $name );
 351+ }
 352+
 353+ // Shunting yard magic
 354+ $lastOp = end( $operators );
 355+ while ( $lastOp && $this->precedence[$op] <= $this->precedence[$lastOp] ) {
 356+ $this->doOperation( $lastOp, $operands );
 357+ array_pop( $operators );
 358+ $lastOp = end( $operators );
 359+ }
 360+ $operators[] = $op;
 361+ $expecting = 'expression';
 362+ }
 363+
 364+ // Finish off the operator array
 365+ while ( $op = array_pop( $operators ) ) {
 366+ if ( $op == EXPR_OPEN ) {
 367+ throw new ExprError( 'unclosed_bracket' );
 368+ }
 369+ $this->doOperation( $op, $operands );
 370+ }
 371+
 372+ return implode( "<br />\n", $operands );
 373+ }
 374+
 375+ function doOperation( $op, &$stack ) {
 376+ switch ( $op ) {
 377+ case EXPR_NEGATIVE:
 378+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 379+ $arg = array_pop( $stack );
 380+ $stack[] = -$arg;
 381+ break;
 382+ case EXPR_POSITIVE:
 383+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 384+ break;
 385+ case EXPR_TIMES:
 386+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 387+ $right = array_pop( $stack );
 388+ $left = array_pop( $stack );
 389+ $stack[] = $left * $right;
 390+ break;
 391+ case EXPR_DIVIDE:
 392+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 393+ $right = array_pop( $stack );
 394+ $left = array_pop( $stack );
 395+ if ( $right == 0 ) throw new ExprError( 'division_by_zero', $this->names[$op] );
 396+ $stack[] = $left / $right;
 397+ break;
 398+ case EXPR_MOD:
 399+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 400+ $right = array_pop( $stack );
 401+ $left = array_pop( $stack );
 402+ if ( $right == 0 ) throw new ExprError( 'division_by_zero', $this->names[$op] );
 403+ $stack[] = $left % $right;
 404+ break;
 405+ case EXPR_PLUS:
 406+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 407+ $right = array_pop( $stack );
 408+ $left = array_pop( $stack );
 409+ $stack[] = $left + $right;
 410+ break;
 411+ case EXPR_MINUS:
 412+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 413+ $right = array_pop( $stack );
 414+ $left = array_pop( $stack );
 415+ $stack[] = $left - $right;
 416+ break;
 417+ case EXPR_AND:
 418+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 419+ $right = array_pop( $stack );
 420+ $left = array_pop( $stack );
 421+ $stack[] = ( $left && $right ) ? 1 : 0;
 422+ break;
 423+ case EXPR_OR:
 424+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 425+ $right = array_pop( $stack );
 426+ $left = array_pop( $stack );
 427+ $stack[] = ( $left || $right ) ? 1 : 0;
 428+ break;
 429+ case EXPR_EQUALITY:
 430+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 431+ $right = array_pop( $stack );
 432+ $left = array_pop( $stack );
 433+ $stack[] = ( $left == $right ) ? 1 : 0;
 434+ break;
 435+ case EXPR_NOT:
 436+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 437+ $arg = array_pop( $stack );
 438+ $stack[] = ( !$arg ) ? 1 : 0;
 439+ break;
 440+ case EXPR_ROUND:
 441+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 442+ $digits = intval( array_pop( $stack ) );
 443+ $value = array_pop( $stack );
 444+ $stack[] = round( $value, $digits );
 445+ break;
 446+ case EXPR_LESS:
 447+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 448+ $right = array_pop( $stack );
 449+ $left = array_pop( $stack );
 450+ $stack[] = ( $left < $right ) ? 1 : 0;
 451+ break;
 452+ case EXPR_GREATER:
 453+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 454+ $right = array_pop( $stack );
 455+ $left = array_pop( $stack );
 456+ $stack[] = ( $left > $right ) ? 1 : 0;
 457+ break;
 458+ case EXPR_LESSEQ:
 459+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 460+ $right = array_pop( $stack );
 461+ $left = array_pop( $stack );
 462+ $stack[] = ( $left <= $right ) ? 1 : 0;
 463+ break;
 464+ case EXPR_GREATEREQ:
 465+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 466+ $right = array_pop( $stack );
 467+ $left = array_pop( $stack );
 468+ $stack[] = ( $left >= $right ) ? 1 : 0;
 469+ break;
 470+ case EXPR_NOTEQ:
 471+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 472+ $right = array_pop( $stack );
 473+ $left = array_pop( $stack );
 474+ $stack[] = ( $left != $right ) ? 1 : 0;
 475+ break;
 476+ case EXPR_EXPONENT:
 477+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 478+ $right = array_pop( $stack );
 479+ $left = array_pop( $stack );
 480+ $stack[] = $left * pow( 10, $right );
 481+ break;
 482+ case EXPR_SINE:
 483+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 484+ $arg = array_pop( $stack );
 485+ $stack[] = sin( $arg );
 486+ break;
 487+ case EXPR_COSINE:
 488+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 489+ $arg = array_pop( $stack );
 490+ $stack[] = cos( $arg );
 491+ break;
 492+ case EXPR_TANGENS:
 493+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 494+ $arg = array_pop( $stack );
 495+ $stack[] = tan( $arg );
 496+ break;
 497+ case EXPR_ARCSINE:
 498+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 499+ $arg = array_pop( $stack );
 500+ if ( $arg < -1 || $arg > 1 ) throw new ExprError( 'invalid_argument', $this->names[$op] );
 501+ $stack[] = asin( $arg );
 502+ break;
 503+ case EXPR_ARCCOS:
 504+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 505+ $arg = array_pop( $stack );
 506+ if ( $arg < -1 || $arg > 1 ) throw new ExprError( 'invalid_argument', $this->names[$op] );
 507+ $stack[] = acos( $arg );
 508+ break;
 509+ case EXPR_ARCTAN:
 510+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 511+ $arg = array_pop( $stack );
 512+ $stack[] = atan( $arg );
 513+ break;
 514+ case EXPR_EXP:
 515+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 516+ $arg = array_pop( $stack );
 517+ $stack[] = exp( $arg );
 518+ break;
 519+ case EXPR_LN:
 520+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 521+ $arg = array_pop( $stack );
 522+ if ( $arg <= 0 ) throw new ExprError( 'invalid_argument_ln', $this->names[$op] );
 523+ $stack[] = log( $arg );
 524+ break;
 525+ case EXPR_ABS:
 526+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 527+ $arg = array_pop( $stack );
 528+ $stack[] = abs( $arg );
 529+ break;
 530+ case EXPR_FLOOR:
 531+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 532+ $arg = array_pop( $stack );
 533+ $stack[] = floor( $arg );
 534+ break;
 535+ case EXPR_TRUNC:
 536+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 537+ $arg = array_pop( $stack );
 538+ $stack[] = (int)$arg;
 539+ break;
 540+ case EXPR_CEIL:
 541+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 542+ $arg = array_pop( $stack );
 543+ $stack[] = ceil( $arg );
 544+ break;
 545+ case EXPR_POW:
 546+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
 547+ $right = array_pop( $stack );
 548+ $left = array_pop( $stack );
 549+ if ( false === ( $stack[] = pow( $left, $right ) ) ) throw new ExprError( 'division_by_zero', $this->names[$op] );
 550+ break;
 551+ default:
 552+ // Should be impossible to reach here.
 553+ throw new ExprError( 'unknown_error' );
 554+ }
 555+ }
 556+}
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/Expr.php
___________________________________________________________________
Added: svn:eol-style
1557 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/testExpr.php
@@ -0,0 +1,38 @@
 2+<?php
 3+
 4+require_once ( getenv( 'MW_INSTALL_PATH' ) !== false
 5+ ? getenv( 'MW_INSTALL_PATH' ) . "/maintenance/commandLine.inc"
 6+ : dirname( __FILE__ ) . '/../../maintenance/commandLine.inc' );
 7+require( 'Expr.php' );
 8+
 9+$tests = file( 'exprTests.txt' );
 10+
 11+$pass = $fail = 0;
 12+
 13+// Each test is on one line. The test must always evaluate to '1'.
 14+$parser = new ExprParser;
 15+foreach ( $tests as $test ) {
 16+ $test = trim( $test );
 17+ if ( in_string( ';', $test ) )
 18+ list( $input, $expected ) = explode( ';', $test );
 19+ else {
 20+ $input = $test;
 21+ $expected = 1;
 22+ }
 23+
 24+ $expected = trim( $expected );
 25+ $input = trim( $input );
 26+
 27+ $result = $parser->doExpression( $input );
 28+ if ( $result != $expected ) {
 29+ print
 30+ "FAILING test -- $input
 31+ gave a final result of $result, instead of $expected.\n";
 32+ $fail++;
 33+ } else {
 34+ print "PASSED test $test\n";
 35+ $pass++;
 36+ }
 37+}
 38+
 39+print "Passed $pass tests, failed $fail tests, out of a total of " . ( $pass + $fail ) . "\n";
\ No newline at end of file
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/testExpr.php
___________________________________________________________________
Added: svn:eol-style
140 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/COPYING
@@ -0,0 +1,283 @@
 2+The ParserFunctions extension may be copied and redistributed under the GNU
 3+General Public License.
 4+
 5+-------------------------------------------------------------------------------
 6+
 7+ GNU GENERAL PUBLIC LICENSE
 8+ Version 2, June 1991
 9+
 10+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 11+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 12+ Everyone is permitted to copy and distribute verbatim copies
 13+ of this license document, but changing it is not allowed.
 14+
 15+ Preamble
 16+
 17+ The licenses for most software are designed to take away your
 18+freedom to share and change it. By contrast, the GNU General Public
 19+License is intended to guarantee your freedom to share and change free
 20+software--to make sure the software is free for all its users. This
 21+General Public License applies to most of the Free Software
 22+Foundation's software and to any other program whose authors commit to
 23+using it. (Some other Free Software Foundation software is covered by
 24+the GNU Lesser General Public License instead.) You can apply it to
 25+your programs, too.
 26+
 27+ When we speak of free software, we are referring to freedom, not
 28+price. Our General Public Licenses are designed to make sure that you
 29+have the freedom to distribute copies of free software (and charge for
 30+this service if you wish), that you receive source code or can get it
 31+if you want it, that you can change the software or use pieces of it
 32+in new free programs; and that you know you can do these things.
 33+
 34+ To protect your rights, we need to make restrictions that forbid
 35+anyone to deny you these rights or to ask you to surrender the rights.
 36+These restrictions translate to certain responsibilities for you if you
 37+distribute copies of the software, or if you modify it.
 38+
 39+ For example, if you distribute copies of such a program, whether
 40+gratis or for a fee, you must give the recipients all the rights that
 41+you have. You must make sure that they, too, receive or can get the
 42+source code. And you must show them these terms so they know their
 43+rights.
 44+
 45+ We protect your rights with two steps: (1) copyright the software, and
 46+(2) offer you this license which gives you legal permission to copy,
 47+distribute and/or modify the software.
 48+
 49+ Also, for each author's protection and ours, we want to make certain
 50+that everyone understands that there is no warranty for this free
 51+software. If the software is modified by someone else and passed on, we
 52+want its recipients to know that what they have is not the original, so
 53+that any problems introduced by others will not reflect on the original
 54+authors' reputations.
 55+
 56+ Finally, any free program is threatened constantly by software
 57+patents. We wish to avoid the danger that redistributors of a free
 58+program will individually obtain patent licenses, in effect making the
 59+program proprietary. To prevent this, we have made it clear that any
 60+patent must be licensed for everyone's free use or not licensed at all.
 61+
 62+ The precise terms and conditions for copying, distribution and
 63+modification follow.
 64+
 65+ GNU GENERAL PUBLIC LICENSE
 66+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 67+
 68+ 0. This License applies to any program or other work which contains
 69+a notice placed by the copyright holder saying it may be distributed
 70+under the terms of this General Public License. The "Program", below,
 71+refers to any such program or work, and a "work based on the Program"
 72+means either the Program or any derivative work under copyright law:
 73+that is to say, a work containing the Program or a portion of it,
 74+either verbatim or with modifications and/or translated into another
 75+language. (Hereinafter, translation is included without limitation in
 76+the term "modification".) Each licensee is addressed as "you".
 77+
 78+Activities other than copying, distribution and modification are not
 79+covered by this License; they are outside its scope. The act of
 80+running the Program is not restricted, and the output from the Program
 81+is covered only if its contents constitute a work based on the
 82+Program (independent of having been made by running the Program).
 83+Whether that is true depends on what the Program does.
 84+
 85+ 1. You may copy and distribute verbatim copies of the Program's
 86+source code as you receive it, in any medium, provided that you
 87+conspicuously and appropriately publish on each copy an appropriate
 88+copyright notice and disclaimer of warranty; keep intact all the
 89+notices that refer to this License and to the absence of any warranty;
 90+and give any other recipients of the Program a copy of this License
 91+along with the Program.
 92+
 93+You may charge a fee for the physical act of transferring a copy, and
 94+you may at your option offer warranty protection in exchange for a fee.
 95+
 96+ 2. You may modify your copy or copies of the Program or any portion
 97+of it, thus forming a work based on the Program, and copy and
 98+distribute such modifications or work under the terms of Section 1
 99+above, provided that you also meet all of these conditions:
 100+
 101+ a) You must cause the modified files to carry prominent notices
 102+ stating that you changed the files and the date of any change.
 103+
 104+ b) You must cause any work that you distribute or publish, that in
 105+ whole or in part contains or is derived from the Program or any
 106+ part thereof, to be licensed as a whole at no charge to all third
 107+ parties under the terms of this License.
 108+
 109+ c) If the modified program normally reads commands interactively
 110+ when run, you must cause it, when started running for such
 111+ interactive use in the most ordinary way, to print or display an
 112+ announcement including an appropriate copyright notice and a
 113+ notice that there is no warranty (or else, saying that you provide
 114+ a warranty) and that users may redistribute the program under
 115+ these conditions, and telling the user how to view a copy of this
 116+ License. (Exception: if the Program itself is interactive but
 117+ does not normally print such an announcement, your work based on
 118+ the Program is not required to print an announcement.)
 119+
 120+These requirements apply to the modified work as a whole. If
 121+identifiable sections of that work are not derived from the Program,
 122+and can be reasonably considered independent and separate works in
 123+themselves, then this License, and its terms, do not apply to those
 124+sections when you distribute them as separate works. But when you
 125+distribute the same sections as part of a whole which is a work based
 126+on the Program, the distribution of the whole must be on the terms of
 127+this License, whose permissions for other licensees extend to the
 128+entire whole, and thus to each and every part regardless of who wrote it.
 129+
 130+Thus, it is not the intent of this section to claim rights or contest
 131+your rights to work written entirely by you; rather, the intent is to
 132+exercise the right to control the distribution of derivative or
 133+collective works based on the Program.
 134+
 135+In addition, mere aggregation of another work not based on the Program
 136+with the Program (or with a work based on the Program) on a volume of
 137+a storage or distribution medium does not bring the other work under
 138+the scope of this License.
 139+
 140+ 3. You may copy and distribute the Program (or a work based on it,
 141+under Section 2) in object code or executable form under the terms of
 142+Sections 1 and 2 above provided that you also do one of the following:
 143+
 144+ a) Accompany it with the complete corresponding machine-readable
 145+ source code, which must be distributed under the terms of Sections
 146+ 1 and 2 above on a medium customarily used for software interchange; or,
 147+
 148+ b) Accompany it with a written offer, valid for at least three
 149+ years, to give any third party, for a charge no more than your
 150+ cost of physically performing source distribution, a complete
 151+ machine-readable copy of the corresponding source code, to be
 152+ distributed under the terms of Sections 1 and 2 above on a medium
 153+ customarily used for software interchange; or,
 154+
 155+ c) Accompany it with the information you received as to the offer
 156+ to distribute corresponding source code. (This alternative is
 157+ allowed only for noncommercial distribution and only if you
 158+ received the program in object code or executable form with such
 159+ an offer, in accord with Subsection b above.)
 160+
 161+The source code for a work means the preferred form of the work for
 162+making modifications to it. For an executable work, complete source
 163+code means all the source code for all modules it contains, plus any
 164+associated interface definition files, plus the scripts used to
 165+control compilation and installation of the executable. However, as a
 166+special exception, the source code distributed need not include
 167+anything that is normally distributed (in either source or binary
 168+form) with the major components (compiler, kernel, and so on) of the
 169+operating system on which the executable runs, unless that component
 170+itself accompanies the executable.
 171+
 172+If distribution of executable or object code is made by offering
 173+access to copy from a designated place, then offering equivalent
 174+access to copy the source code from the same place counts as
 175+distribution of the source code, even though third parties are not
 176+compelled to copy the source along with the object code.
 177+
 178+ 4. You may not copy, modify, sublicense, or distribute the Program
 179+except as expressly provided under this License. Any attempt
 180+otherwise to copy, modify, sublicense or distribute the Program is
 181+void, and will automatically terminate your rights under this License.
 182+However, parties who have received copies, or rights, from you under
 183+this License will not have their licenses terminated so long as such
 184+parties remain in full compliance.
 185+
 186+ 5. You are not required to accept this License, since you have not
 187+signed it. However, nothing else grants you permission to modify or
 188+distribute the Program or its derivative works. These actions are
 189+prohibited by law if you do not accept this License. Therefore, by
 190+modifying or distributing the Program (or any work based on the
 191+Program), you indicate your acceptance of this License to do so, and
 192+all its terms and conditions for copying, distributing or modifying
 193+the Program or works based on it.
 194+
 195+ 6. Each time you redistribute the Program (or any work based on the
 196+Program), the recipient automatically receives a license from the
 197+original licensor to copy, distribute or modify the Program subject to
 198+these terms and conditions. You may not impose any further
 199+restrictions on the recipients' exercise of the rights granted herein.
 200+You are not responsible for enforcing compliance by third parties to
 201+this License.
 202+
 203+ 7. If, as a consequence of a court judgment or allegation of patent
 204+infringement or for any other reason (not limited to patent issues),
 205+conditions are imposed on you (whether by court order, agreement or
 206+otherwise) that contradict the conditions of this License, they do not
 207+excuse you from the conditions of this License. If you cannot
 208+distribute so as to satisfy simultaneously your obligations under this
 209+License and any other pertinent obligations, then as a consequence you
 210+may not distribute the Program at all. For example, if a patent
 211+license would not permit royalty-free redistribution of the Program by
 212+all those who receive copies directly or indirectly through you, then
 213+the only way you could satisfy both it and this License would be to
 214+refrain entirely from distribution of the Program.
 215+
 216+If any portion of this section is held invalid or unenforceable under
 217+any particular circumstance, the balance of the section is intended to
 218+apply and the section as a whole is intended to apply in other
 219+circumstances.
 220+
 221+It is not the purpose of this section to induce you to infringe any
 222+patents or other property right claims or to contest validity of any
 223+such claims; this section has the sole purpose of protecting the
 224+integrity of the free software distribution system, which is
 225+implemented by public license practices. Many people have made
 226+generous contributions to the wide range of software distributed
 227+through that system in reliance on consistent application of that
 228+system; it is up to the author/donor to decide if he or she is willing
 229+to distribute software through any other system and a licensee cannot
 230+impose that choice.
 231+
 232+This section is intended to make thoroughly clear what is believed to
 233+be a consequence of the rest of this License.
 234+
 235+ 8. If the distribution and/or use of the Program is restricted in
 236+certain countries either by patents or by copyrighted interfaces, the
 237+original copyright holder who places the Program under this License
 238+may add an explicit geographical distribution limitation excluding
 239+those countries, so that distribution is permitted only in or among
 240+countries not thus excluded. In such case, this License incorporates
 241+the limitation as if written in the body of this License.
 242+
 243+ 9. The Free Software Foundation may publish revised and/or new versions
 244+of the General Public License from time to time. Such new versions will
 245+be similar in spirit to the present version, but may differ in detail to
 246+address new problems or concerns.
 247+
 248+Each version is given a distinguishing version number. If the Program
 249+specifies a version number of this License which applies to it and "any
 250+later version", you have the option of following the terms and conditions
 251+either of that version or of any later version published by the Free
 252+Software Foundation. If the Program does not specify a version number of
 253+this License, you may choose any version ever published by the Free Software
 254+Foundation.
 255+
 256+ 10. If you wish to incorporate parts of the Program into other free
 257+programs whose distribution conditions are different, write to the author
 258+to ask for permission. For software which is copyrighted by the Free
 259+Software Foundation, write to the Free Software Foundation; we sometimes
 260+make exceptions for this. Our decision will be guided by the two goals
 261+of preserving the free status of all derivatives of our free software and
 262+of promoting the sharing and reuse of software generally.
 263+
 264+ NO WARRANTY
 265+
 266+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 267+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
 268+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 269+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 270+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 271+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
 272+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
 273+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 274+REPAIR OR CORRECTION.
 275+
 276+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 277+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 278+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 279+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 280+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 281+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 282+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 283+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 284+POSSIBILITY OF SUCH DAMAGES.
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/COPYING
___________________________________________________________________
Added: svn:eol-style
1285 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions.i18n.magic.php
@@ -0,0 +1,431 @@
 2+<?php
 3+
 4+$magicWords = array();
 5+
 6+/**
 7+ * English
 8+ */
 9+
 10+$magicWords = array();
 11+
 12+/** English (English) */
 13+$magicWords['en'] = array(
 14+ 'expr' => array( 0, 'expr' ),
 15+ 'if' => array( 0, 'if' ),
 16+ 'ifeq' => array( 0, 'ifeq' ),
 17+ 'ifexpr' => array( 0, 'ifexpr' ),
 18+ 'iferror' => array( 0, 'iferror' ),
 19+ 'switch' => array( 0, 'switch' ),
 20+ 'default' => array( 0, '#default' ),
 21+ 'ifexist' => array( 0, 'ifexist' ),
 22+ 'time' => array( 0, 'time' ),
 23+ 'timel' => array( 0, 'timel' ),
 24+ 'rel2abs' => array( 0, 'rel2abs' ),
 25+ 'titleparts' => array( 0, 'titleparts' ),
 26+ 'len' => array( 0, 'len' ),
 27+ 'pos' => array( 0, 'pos' ),
 28+ 'rpos' => array( 0, 'rpos' ),
 29+ 'sub' => array( 0, 'sub' ),
 30+ 'count' => array( 0, 'count' ),
 31+ 'replace' => array( 0, 'replace' ),
 32+ 'explode' => array( 0, 'explode' ),
 33+ 'urldecode' => array( 0, 'urldecode' ),
 34+);
 35+
 36+/** Arabic (العربية) */
 37+$magicWords['ar'] = array(
 38+ 'expr' => array( 0, 'تعبير', 'expr' ),
 39+ 'if' => array( 0, 'لو', 'if' ),
 40+ 'ifeq' => array( 0, 'لومعادلة', 'ifeq' ),
 41+ 'ifexpr' => array( 0, 'لوتعبير', 'ifexpr' ),
 42+ 'iferror' => array( 0, 'لوخطأ', 'iferror' ),
 43+ 'switch' => array( 0, 'تبديل', 'switch' ),
 44+ 'default' => array( 0, '#افتراضي', '#default' ),
 45+ 'ifexist' => array( 0, 'لوموجود', 'ifexist' ),
 46+ 'time' => array( 0, 'وقت', 'time' ),
 47+ 'timel' => array( 0, 'تيمل', 'timel' ),
 48+ 'rel2abs' => array( 0, 'ريلتوآبس', 'rel2abs' ),
 49+ 'titleparts' => array( 0, 'أجزاء_العنوان', 'titleparts' ),
 50+ 'len' => array( 0, 'لين', 'len' ),
 51+ 'pos' => array( 0, 'بوس', 'pos' ),
 52+ 'rpos' => array( 0, 'آربوس', 'rpos' ),
 53+ 'sub' => array( 0, 'متفرع', 'sub' ),
 54+ 'count' => array( 0, 'عدد', 'count' ),
 55+ 'replace' => array( 0, 'استبدال', 'replace' ),
 56+ 'explode' => array( 0, 'انفجار', 'explode' ),
 57+ 'urldecode' => array( 0, 'فك_مسار', 'urldecode' ),
 58+);
 59+
 60+/** Egyptian Spoken Arabic (مصرى) */
 61+$magicWords['arz'] = array(
 62+ 'expr' => array( 0, 'تعبير', 'expr' ),
 63+ 'if' => array( 0, 'لو', 'if' ),
 64+ 'ifeq' => array( 0, 'لومعادلة', 'ifeq' ),
 65+ 'ifexpr' => array( 0, 'لوتعبير', 'ifexpr' ),
 66+ 'iferror' => array( 0, 'لوخطأ', 'iferror' ),
 67+ 'switch' => array( 0, 'تبديل', 'switch' ),
 68+ 'default' => array( 0, '#افتراضي', '#default' ),
 69+ 'ifexist' => array( 0, 'لوموجود', 'ifexist' ),
 70+ 'time' => array( 0, 'وقت', 'time' ),
 71+ 'timel' => array( 0, 'تيمل', 'timel' ),
 72+ 'rel2abs' => array( 0, 'ريلتوآبس', 'rel2abs' ),
 73+ 'titleparts' => array( 0, 'أجزاء_العنوان', 'titleparts' ),
 74+ 'len' => array( 0, 'لين', 'len' ),
 75+ 'pos' => array( 0, 'بوس', 'pos' ),
 76+ 'rpos' => array( 0, 'آربوس', 'rpos' ),
 77+ 'sub' => array( 0, 'متفرع', 'sub' ),
 78+ 'count' => array( 0, 'عدد', 'count' ),
 79+ 'replace' => array( 0, 'استبدال', 'replace' ),
 80+ 'explode' => array( 0, 'انفجار', 'explode' ),
 81+);
 82+
 83+/** Chechen (Нохчийн) */
 84+$magicWords['ce'] = array(
 85+ 'time' => array( 0, 'хан', 'time' ),
 86+ 'replace' => array( 0, 'хийцарна', 'замена', 'replace' ),
 87+);
 88+
 89+/** Czech (Česky) */
 90+$magicWords['cs'] = array(
 91+ 'expr' => array( 0, 'výraz', 'expr' ),
 92+ 'if' => array( 0, 'když', 'if' ),
 93+ 'ifexist' => array( 0, 'kdyžexist', 'ifexist' ),
 94+ 'time' => array( 0, 'čas', 'time' ),
 95+ 'len' => array( 0, 'délka', 'len' ),
 96+ 'count' => array( 0, 'počet', 'count' ),
 97+ 'replace' => array( 0, 'nahradit', 'replace' ),
 98+);
 99+
 100+/** Esperanto (Esperanto) */
 101+$magicWords['eo'] = array(
 102+ 'expr' => array( 0, 'espr', 'esprimo' ),
 103+ 'if' => array( 0, 'se' ),
 104+ 'ifeq' => array( 0, 'seekv', 'seekvacio' ),
 105+ 'ifexpr' => array( 0, 'seespr', 'seeksprimo' ),
 106+ 'iferror' => array( 0, 'seeraras' ),
 107+ 'switch' => array( 0, 'ŝaltu', 'ŝalti', 'sxaltu', 'sxalti' ),
 108+ 'default' => array( 0, '#defaŭlte', '#defauxlte' ),
 109+ 'ifexist' => array( 0, 'seekzistas' ),
 110+ 'time' => array( 0, 'tempo' ),
 111+ 'timel' => array( 0, 'tempoo' ),
 112+);
 113+
 114+/** Spanish (Español) */
 115+$magicWords['es'] = array(
 116+ 'if' => array( 0, 'si', 'if' ),
 117+ 'ifexpr' => array( 0, 'siexpr', 'ifexpr' ),
 118+ 'iferror' => array( 0, 'sierror', 'iferror' ),
 119+ 'switch' => array( 0, 'según', 'switch' ),
 120+ 'ifexist' => array( 0, 'siexiste', 'ifexist' ),
 121+ 'time' => array( 0, 'tiempo', 'time' ),
 122+ 'len' => array( 0, 'long', 'longitud', 'len' ),
 123+ 'replace' => array( 0, 'reemplazar', 'replace' ),
 124+ 'explode' => array( 0, 'separar', 'explode' ),
 125+);
 126+
 127+/** Persian (فارسی) */
 128+$magicWords['fa'] = array(
 129+ 'expr' => array( 0, 'حساب' ),
 130+ 'if' => array( 0, 'اگر' ),
 131+ 'ifeq' => array( 0, 'اگرمساوی' ),
 132+ 'ifexpr' => array( 0, 'اگرحساب' ),
 133+ 'iferror' => array( 0, 'اگرخطا' ),
 134+ 'switch' => array( 0, 'گزینه' ),
 135+ 'default' => array( 0, '#پیش‌فرض' ),
 136+ 'ifexist' => array( 0, 'اگرموجود' ),
 137+ 'time' => array( 0, 'زمان' ),
 138+ 'timel' => array( 0, 'زمان‌بلند' ),
 139+ 'rel2abs' => array( 0, 'نسبی‌به‌مطلق' ),
 140+ 'titleparts' => array( 0, 'پاره‌عنوان' ),
 141+ 'len' => array( 0, 'طول' ),
 142+ 'pos' => array( 0, 'جا' ),
 143+ 'rpos' => array( 0, 'جار' ),
 144+ 'sub' => array( 0, 'تکه' ),
 145+ 'count' => array( 0, 'شمار' ),
 146+ 'replace' => array( 0, 'جایگزین' ),
 147+ 'explode' => array( 0, 'گسترش' ),
 148+ 'urldecode' => array( 0, 'نشانی‌بی‌کد' ),
 149+);
 150+
 151+/** Hebrew (עברית) */
 152+$magicWords['he'] = array(
 153+ 'expr' => array( 0, 'חשב', 'expr' ),
 154+ 'if' => array( 0, 'תנאי', 'if' ),
 155+ 'ifeq' => array( 0, 'שווה', 'ifeq' ),
 156+ 'ifexpr' => array( 0, 'חשב תנאי', 'ifexpr' ),
 157+ 'iferror' => array( 0, 'תנאי שגיאה', 'iferror' ),
 158+ 'switch' => array( 0, 'בחר', 'switch' ),
 159+ 'default' => array( 0, '#ברירת מחדל', '#default' ),
 160+ 'ifexist' => array( 0, 'קיים', 'ifexist' ),
 161+ 'time' => array( 0, 'זמן', 'time' ),
 162+ 'timel' => array( 0, 'זמןמ', 'timel' ),
 163+ 'rel2abs' => array( 0, 'יחסי למוחלט', 'rel2abs' ),
 164+ 'titleparts' => array( 0, 'חלק בכותרת', 'titleparts' ),
 165+);
 166+
 167+/** Hungarian (Magyar) */
 168+$magicWords['hu'] = array(
 169+ 'expr' => array( 0, 'kif', 'expr' ),
 170+ 'if' => array( 0, 'ha', 'if' ),
 171+ 'ifeq' => array( 0, 'haegyenlő', 'ifeq' ),
 172+ 'ifexpr' => array( 0, 'hakif', 'ifexpr' ),
 173+ 'iferror' => array( 0, 'hahibás', 'iferror' ),
 174+ 'default' => array( 0, '#alapértelmezett', '#default' ),
 175+ 'ifexist' => array( 0, 'halétezik', 'ifexist' ),
 176+ 'time' => array( 0, 'idő', 'time' ),
 177+ 'len' => array( 0, 'hossz', 'len' ),
 178+ 'pos' => array( 0, 'pozíció', 'pos' ),
 179+ 'rpos' => array( 0, 'jpozíció', 'rpos' ),
 180+);
 181+
 182+/** Indonesian (Bahasa Indonesia) */
 183+$magicWords['id'] = array(
 184+ 'expr' => array( 0, 'hitung', 'expr' ),
 185+ 'if' => array( 0, 'jika', 'if' ),
 186+ 'ifeq' => array( 0, 'jikasama', 'ifeq' ),
 187+ 'ifexpr' => array( 0, 'jikahitung', 'ifexpr' ),
 188+ 'iferror' => array( 0, 'jikasalah', 'iferror' ),
 189+ 'switch' => array( 0, 'pilih', 'switch' ),
 190+ 'default' => array( 0, '#baku', '#default' ),
 191+ 'ifexist' => array( 0, 'jikaada', 'ifexist' ),
 192+ 'time' => array( 0, 'waktu', 'time' ),
 193+ 'timel' => array( 0, 'waktu1', 'timel' ),
 194+ 'titleparts' => array( 0, 'bagianjudul', 'titleparts' ),
 195+);
 196+
 197+/** Igbo (Igbo) */
 198+$magicWords['ig'] = array(
 199+ 'if' => array( 0, 'ȯ_bú', 'if' ),
 200+ 'time' => array( 0, 'ógè', 'time' ),
 201+ 'timel' => array( 0, 'ógèl', 'timel' ),
 202+);
 203+
 204+/** Italian (Italiano) */
 205+$magicWords['it'] = array(
 206+ 'ifexist' => array( 0, 'ifexists' ),
 207+);
 208+
 209+/** Japanese (日本語) */
 210+$magicWords['ja'] = array(
 211+ 'expr' => array( 0, '式' ),
 212+ 'if' => array( 0, 'もし' ),
 213+ 'ifeq' => array( 0, 'もし等しい' ),
 214+ 'ifexpr' => array( 0, 'もし式' ),
 215+ 'iferror' => array( 0, 'もしエラー' ),
 216+ 'switch' => array( 0, '切り替え' ),
 217+ 'default' => array( 0, '#既定' ),
 218+ 'ifexist' => array( 0, 'もし存在' ),
 219+ 'time' => array( 0, '時間' ),
 220+ 'timel' => array( 0, '時間地方' ),
 221+ 'rel2abs' => array( 0, '参照から絶対' ),
 222+ 'titleparts' => array( 0, 'タイトル部分' ),
 223+ 'len' => array( 0, '長さ' ),
 224+ 'pos' => array( 0, '位置' ),
 225+ 'rpos' => array( 0, '最後の位置' ),
 226+ 'sub' => array( 0, '切り取り' ),
 227+ 'count' => array( 0, '回数' ),
 228+ 'replace' => array( 0, '置き換え' ),
 229+ 'explode' => array( 0, '分割' ),
 230+ 'urldecode' => array( 0, 'URLデコード' ),
 231+);
 232+
 233+/** Korean (한국어) */
 234+$magicWords['ko'] = array(
 235+ 'expr' => array( 0, '수식' ),
 236+ 'switch' => array( 0, '스위치' ),
 237+ 'default' => array( 0, '#기본값' ),
 238+ 'time' => array( 0, '시간' ),
 239+ 'timel' => array( 0, '지역시간' ),
 240+ 'len' => array( 0, '길이' ),
 241+ 'count' => array( 0, '개수' ),
 242+ 'replace' => array( 0, '교체' ),
 243+ 'explode' => array( 0, '분리' ),
 244+ 'urldecode' => array( 0, '주소디코딩:' ),
 245+);
 246+
 247+/** Ladino (Ladino) */
 248+$magicWords['lad'] = array(
 249+ 'switch' => array( 0, 'asegún', 'según', 'switch' ),
 250+);
 251+
 252+/** Malagasy (Malagasy) */
 253+$magicWords['mg'] = array(
 254+ 'if' => array( 0, 'raha', 'if' ),
 255+ 'ifeq' => array( 0, 'rahamitovy', 'ifeq' ),
 256+ 'ifexpr' => array( 0, 'rahamarina', 'ifexpr' ),
 257+ 'iferror' => array( 0, 'rahadiso', 'iferror' ),
 258+ 'default' => array( 0, '#tsipalotra', '#default' ),
 259+ 'ifexist' => array( 0, 'rahamisy', 'ifexist' ),
 260+ 'time' => array( 0, 'lera', 'time' ),
 261+);
 262+
 263+/** Malayalam (മലയാളം) */
 264+$magicWords['ml'] = array(
 265+ 'if' => array( 0, 'എങ്കിൽ' ),
 266+ 'ifeq' => array( 0, 'സമെമെങ്കിൽ' ),
 267+ 'ifexpr' => array( 0, 'എക്സ്പ്രെഷനെങ്കിൽ' ),
 268+ 'iferror' => array( 0, 'പിഴവെങ്കിൽ' ),
 269+ 'switch' => array( 0, 'മാറ്റുക' ),
 270+ 'default' => array( 0, '#സ്വതവേ' ),
 271+ 'ifexist' => array( 0, 'ഉണ്ടെങ്കിൽ' ),
 272+ 'time' => array( 0, 'സമയം' ),
 273+ 'timel' => array( 0, 'സമയം|' ),
 274+ 'sub' => array( 0, 'ഉപം' ),
 275+ 'count' => array( 0, 'എണ്ണുക' ),
 276+ 'replace' => array( 0, 'മാറ്റിച്ചേർക്കുക' ),
 277+ 'explode' => array( 0, 'വിസ്ഫോടനം' ),
 278+);
 279+
 280+/** Marathi (मराठी) */
 281+$magicWords['mr'] = array(
 282+ 'expr' => array( 0, 'करण', 'expr' ),
 283+ 'if' => array( 0, 'जर', 'इफ', 'if' ),
 284+ 'ifeq' => array( 0, 'जरसम', 'ifeq' ),
 285+ 'ifexpr' => array( 0, 'जरकरण', 'ifexpr' ),
 286+ 'iferror' => array( 0, 'जरत्रुटी', 'iferror' ),
 287+ 'switch' => array( 0, 'कळ', 'सांगकळ', 'असेलतरसांग', 'असलेतरसांग', 'स्वीच', 'switch' ),
 288+ 'default' => array( 0, '#अविचल', '#default' ),
 289+ 'ifexist' => array( 0, 'जरअसेल', 'जरआहे', 'ifexist' ),
 290+ 'time' => array( 0, 'वेळ', 'time' ),
 291+ 'timel' => array( 0, 'वेळस्था', 'timel' ),
 292+ 'titleparts' => array( 0, 'शीर्षकखंड', 'टाइटलपार्ट्स', 'titleparts' ),
 293+ 'len' => array( 0, 'लांबी', 'len' ),
 294+ 'pos' => array( 0, 'स्थशोध', 'pos' ),
 295+ 'rpos' => array( 0, 'माग्चास्थशोध', 'rpos' ),
 296+ 'sub' => array( 0, 'उप', 'sub' ),
 297+ 'count' => array( 0, 'मोज', 'मोजा', 'count' ),
 298+ 'replace' => array( 0, 'नेबदल', 'रिप्लेस', 'replace' ),
 299+ 'explode' => array( 0, 'एकफोड', 'explode' ),
 300+);
 301+
 302+/** Nedersaksisch (Nedersaksisch) */
 303+$magicWords['nds-nl'] = array(
 304+ 'if' => array( 0, 'as', 'als', 'if' ),
 305+ 'ifeq' => array( 0, 'asgelieke', 'alsgelijk', 'ifeq' ),
 306+ 'ifexpr' => array( 0, 'asexpressie', 'alsexpressie', 'ifexpr' ),
 307+ 'iferror' => array( 0, 'asfout', 'alsfout', 'iferror' ),
 308+ 'default' => array( 0, '#standard', '#standaard', '#default' ),
 309+ 'ifexist' => array( 0, 'asbesteet', 'alsbestaat', 'ifexist' ),
 310+ 'time' => array( 0, 'tied', 'tijd', 'time' ),
 311+ 'timel' => array( 0, 'tiedl', 'tijdl', 'timel' ),
 312+ 'rel2abs' => array( 0, 'relatiefnaorabseluut', 'relatiefnaarabsoluut', 'rel2abs' ),
 313+);
 314+
 315+/** Dutch (Nederlands) */
 316+$magicWords['nl'] = array(
 317+ 'expr' => array( 0, 'expressie' ),
 318+ 'if' => array( 0, 'als' ),
 319+ 'ifeq' => array( 0, 'alsgelijk' ),
 320+ 'ifexpr' => array( 0, 'alsexpressie' ),
 321+ 'iferror' => array( 0, 'alsfout' ),
 322+ 'switch' => array( 0, 'schakelen' ),
 323+ 'default' => array( 0, '#standaard' ),
 324+ 'ifexist' => array( 0, 'alsbestaat' ),
 325+ 'time' => array( 0, 'tijd' ),
 326+ 'timel' => array( 0, 'tijdl' ),
 327+ 'rel2abs' => array( 0, 'relatiefnaarabsoluut' ),
 328+ 'titleparts' => array( 0, 'paginanaamdelen' ),
 329+ 'count' => array( 0, 'telling' ),
 330+ 'replace' => array( 0, 'vervangen' ),
 331+ 'explode' => array( 0, 'exploderen' ),
 332+);
 333+
 334+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬) */
 335+$magicWords['nn'] = array(
 336+ 'expr' => array( 0, 'uttrykk', 'expr' ),
 337+ 'if' => array( 0, 'om', 'if' ),
 338+ 'ifeq' => array( 0, 'omlik', 'ifeq' ),
 339+ 'ifexpr' => array( 0, 'omuttrykk', 'ifexpr' ),
 340+ 'iferror' => array( 0, 'omfeil', 'iferror' ),
 341+ 'switch' => array( 0, 'byt', 'switch' ),
 342+ 'ifexist' => array( 0, 'omfinst', 'ifexist' ),
 343+ 'time' => array( 0, 'tid', 'time' ),
 344+ 'timel' => array( 0, 'tidl', 'timel' ),
 345+ 'rel2abs' => array( 0, 'reltilabs', 'rel2abs' ),
 346+ 'titleparts' => array( 0, 'titteldelar', 'titleparts' ),
 347+ 'len' => array( 0, 'lengd', 'len' ),
 348+ 'replace' => array( 0, 'erstatt', 'replace' ),
 349+);
 350+
 351+/** Pashto (پښتو) */
 352+$magicWords['ps'] = array(
 353+ 'if' => array( 0, 'که', 'if' ),
 354+ 'time' => array( 0, 'وخت', 'time' ),
 355+ 'count' => array( 0, 'شمېرل', 'count' ),
 356+);
 357+
 358+/** Portuguese (Português) */
 359+$magicWords['pt'] = array(
 360+ 'if' => array( 0, 'se', 'if' ),
 361+ 'ifeq' => array( 0, 'seigual', 'ifeq' ),
 362+ 'ifexpr' => array( 0, 'seexpr', 'ifexpr' ),
 363+ 'iferror' => array( 0, 'seerro', 'iferror' ),
 364+ 'default' => array( 0, '#padrão', '#padrao', '#default' ),
 365+ 'ifexist' => array( 0, 'seexiste', 'ifexist' ),
 366+ 'titleparts' => array( 0, 'partesdotítulo', 'partesdotitulo', 'titleparts' ),
 367+ 'len' => array( 0, 'comprimento', 'len' ),
 368+);
 369+
 370+/** Russian (Русский) */
 371+$magicWords['ru'] = array(
 372+ 'replace' => array( 0, 'замена', 'replace' ),
 373+);
 374+
 375+/** Swedish (Svenska) */
 376+$magicWords['sv'] = array(
 377+ 'expr' => array( 0, 'utr', 'expr' ),
 378+ 'if' => array( 0, 'om', 'if' ),
 379+ 'ifeq' => array( 0, 'omlika', 'ifeq' ),
 380+ 'ifexpr' => array( 0, 'omutr', 'ifexpr' ),
 381+ 'iferror' => array( 0, 'omfel', 'iferror' ),
 382+ 'switch' => array( 0, 'växel', 'switch' ),
 383+ 'default' => array( 0, '#standard', '#default' ),
 384+ 'ifexist' => array( 0, 'omfinns', 'ifexist' ),
 385+ 'time' => array( 0, 'tid', 'time' ),
 386+ 'timel' => array( 0, 'tidl', 'timel' ),
 387+ 'replace' => array( 0, 'ersätt', 'replace' ),
 388+ 'explode' => array( 0, 'explodera', 'explode' ),
 389+);
 390+
 391+/** Tamil (தமிழ்) */
 392+$magicWords['ta'] = array(
 393+ 'count' => array( 0, 'எண்ணிக்கை' ),
 394+);
 395+
 396+/** Turkish (Türkçe) */
 397+$magicWords['tr'] = array(
 398+ 'expr' => array( 0, 'işlem', 'expr' ),
 399+ 'if' => array( 0, 'eğer', 'if' ),
 400+ 'switch' => array( 0, 'değiştir', 'switch' ),
 401+ 'default' => array( 0, '#vas', '#default' ),
 402+);
 403+
 404+/** Ukrainian (Українська) */
 405+$magicWords['uk'] = array(
 406+ 'expr' => array( 0, 'вираз', 'expr' ),
 407+ 'if' => array( 0, 'якщо', 'if' ),
 408+ 'ifeq' => array( 0, 'якщорівні', 'рівні', 'ifeq' ),
 409+ 'ifexpr' => array( 0, 'якщовираз', 'ifexpr' ),
 410+ 'iferror' => array( 0, 'якщопомилка', 'iferror' ),
 411+ 'switch' => array( 0, 'вибірка', 'switch' ),
 412+ 'default' => array( 0, '#інакше', '#default' ),
 413+ 'ifexist' => array( 0, 'якщоіснує', 'ifexist' ),
 414+);
 415+
 416+/** Vietnamese (Tiếng Việt) */
 417+$magicWords['vi'] = array(
 418+ 'expr' => array( 0, 'côngthức' ),
 419+);
 420+
 421+/** Yiddish (ייִדיש) */
 422+$magicWords['yi'] = array(
 423+ 'expr' => array( 0, 'רעכן', 'חשב' ),
 424+ 'if' => array( 0, 'תנאי' ),
 425+ 'ifeq' => array( 0, 'גלייך', 'שווה' ),
 426+ 'ifexpr' => array( 0, 'אויברעכן', 'חשב_תנאי' ),
 427+ 'switch' => array( 0, 'קלייב', 'בחר' ),
 428+ 'default' => array( 0, '#גרונט', '#ברירת_מחדל' ),
 429+ 'ifexist' => array( 0, 'עקזיסט', 'קיים' ),
 430+ 'time' => array( 0, 'צייט', 'זמן' ),
 431+ 'timel' => array( 0, 'צייטל', 'זמןמ' ),
 432+);
\ No newline at end of file
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions.i18n.magic.php
___________________________________________________________________
Added: svn:eol-style
1433 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions_body.php
@@ -0,0 +1,781 @@
 2+<?php
 3+
 4+class ExtParserFunctions {
 5+ var $mExprParser;
 6+ var $mTimeCache = array();
 7+ var $mTimeChars = 0;
 8+ var $mMaxTimeChars = 6000; # ~10 seconds
 9+
 10+ function clearState( $parser ) {
 11+ $this->mTimeChars = 0;
 12+ $parser->pf_ifexist_breakdown = array();
 13+ $parser->pf_markerRegex = null;
 14+ return true;
 15+ }
 16+
 17+ /**
 18+ * Get the marker regex. Cached.
 19+ */
 20+ function getMarkerRegex( $parser ) {
 21+ if ( isset( $parser->pf_markerRegex ) ) {
 22+ return $parser->pf_markerRegex;
 23+ }
 24+
 25+ wfProfileIn( __METHOD__ );
 26+
 27+ $prefix = preg_quote( $parser->uniqPrefix(), '/' );
 28+
 29+ // The first line represents Parser from release 1.12 forward.
 30+ // subsequent lines are hacks to accomodate old Mediawiki versions.
 31+ if ( defined( 'Parser::MARKER_SUFFIX' ) )
 32+ $suffix = preg_quote( Parser::MARKER_SUFFIX, '/' );
 33+ elseif ( isset( $parser->mMarkerSuffix ) )
 34+ $suffix = preg_quote( $parser->mMarkerSuffix, '/' );
 35+ elseif ( defined( 'MW_PARSER_VERSION' ) &&
 36+ strcmp( MW_PARSER_VERSION, '1.6.1' ) > 0 )
 37+ $suffix = "QINU\x07";
 38+ else $suffix = 'QINU';
 39+
 40+ $parser->pf_markerRegex = '/' . $prefix . '(?:(?!' . $suffix . ').)*' . $suffix . '/us';
 41+
 42+ wfProfileOut( __METHOD__ );
 43+ return $parser->pf_markerRegex;
 44+ }
 45+
 46+ // Removes unique markers from passed parameters, used by string functions.
 47+ private function killMarkers ( $parser, $text ) {
 48+ return preg_replace( $this->getMarkerRegex( $parser ), '' , $text );
 49+ }
 50+
 51+ function &getExprParser() {
 52+ if ( !isset( $this->mExprParser ) ) {
 53+ if ( !class_exists( 'ExprParser' ) ) {
 54+ require( dirname( __FILE__ ) . '/Expr.php' );
 55+ }
 56+ $this->mExprParser = new ExprParser;
 57+ }
 58+ return $this->mExprParser;
 59+ }
 60+
 61+ function expr( $parser, $expr = '' ) {
 62+ try {
 63+ return $this->getExprParser()->doExpression( $expr );
 64+ } catch ( ExprError $e ) {
 65+ return $e->getMessage();
 66+ }
 67+ }
 68+
 69+ function ifexpr( $parser, $expr = '', $then = '', $else = '' ) {
 70+ try {
 71+ $ret = $this->getExprParser()->doExpression( $expr );
 72+ if ( is_numeric( $ret ) ) {
 73+ $ret = floatval( $ret );
 74+ }
 75+ if ( $ret ) {
 76+ return $then;
 77+ } else {
 78+ return $else;
 79+ }
 80+ } catch ( ExprError $e ) {
 81+ return $e->getMessage();
 82+ }
 83+ }
 84+
 85+ function ifexprObj( $parser, $frame, $args ) {
 86+ $expr = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
 87+ $then = isset( $args[1] ) ? $args[1] : '';
 88+ $else = isset( $args[2] ) ? $args[2] : '';
 89+ $result = $this->ifexpr( $parser, $expr, $then, $else );
 90+ if ( is_object( $result ) ) {
 91+ $result = trim( $frame->expand( $result ) );
 92+ }
 93+ return $result;
 94+ }
 95+
 96+ function ifHook( $parser, $test = '', $then = '', $else = '' ) {
 97+ if ( $test !== '' ) {
 98+ return $then;
 99+ } else {
 100+ return $else;
 101+ }
 102+ }
 103+
 104+ function ifObj( $parser, $frame, $args ) {
 105+ $test = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
 106+ if ( $test !== '' ) {
 107+ return isset( $args[1] ) ? trim( $frame->expand( $args[1] ) ) : '';
 108+ } else {
 109+ return isset( $args[2] ) ? trim( $frame->expand( $args[2] ) ) : '';
 110+ }
 111+ }
 112+
 113+ function ifeq( $parser, $left = '', $right = '', $then = '', $else = '' ) {
 114+ if ( $left == $right ) {
 115+ return $then;
 116+ } else {
 117+ return $else;
 118+ }
 119+ }
 120+
 121+ function ifeqObj( $parser, $frame, $args ) {
 122+ $left = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
 123+ $right = isset( $args[1] ) ? trim( $frame->expand( $args[1] ) ) : '';
 124+ if ( $left == $right ) {
 125+ return isset( $args[2] ) ? trim( $frame->expand( $args[2] ) ) : '';
 126+ } else {
 127+ return isset( $args[3] ) ? trim( $frame->expand( $args[3] ) ) : '';
 128+ }
 129+ }
 130+
 131+ function iferror( $parser, $test = '', $then = '', $else = false ) {
 132+ if ( preg_match( '/<(?:strong|span|p|div)\s(?:[^\s>]*\s+)*?class="(?:[^"\s>]*\s+)*?error(?:\s[^">]*)?"/', $test ) ) {
 133+ return $then;
 134+ } elseif ( $else === false ) {
 135+ return $test;
 136+ } else {
 137+ return $else;
 138+ }
 139+ }
 140+
 141+ function iferrorObj( $parser, $frame, $args ) {
 142+ $test = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
 143+ $then = isset( $args[1] ) ? $args[1] : false;
 144+ $else = isset( $args[2] ) ? $args[2] : false;
 145+ $result = $this->iferror( $parser, $test, $then, $else );
 146+ if ( $result === false ) {
 147+ return '';
 148+ } else {
 149+ return trim( $frame->expand( $result ) );
 150+ }
 151+ }
 152+
 153+ function switchHook( $parser /*,...*/ ) {
 154+ $args = func_get_args();
 155+ array_shift( $args );
 156+ $primary = trim( array_shift( $args ) );
 157+ $found = $defaultFound = false;
 158+ $parts = null;
 159+ $default = null;
 160+ $mwDefault =& MagicWord::get( 'default' );
 161+ foreach ( $args as $arg ) {
 162+ $parts = array_map( 'trim', explode( '=', $arg, 2 ) );
 163+ if ( count( $parts ) == 2 ) {
 164+ # Found "="
 165+ if ( $found || $parts[0] == $primary ) {
 166+ # Found a match, return now
 167+ return $parts[1];
 168+ } elseif ( $defaultFound || $mwDefault->matchStartAndRemove( $parts[0] ) ) {
 169+ $default = $parts[1];
 170+ } # else wrong case, continue
 171+ } elseif ( count( $parts ) == 1 ) {
 172+ # Multiple input, single output
 173+ # If the value matches, set a flag and continue
 174+ if ( $parts[0] == $primary ) {
 175+ $found = true;
 176+ } elseif ( $mwDefault->matchStartAndRemove( $parts[0] ) ) {
 177+ $defaultFound = true;
 178+ }
 179+ } # else RAM corruption due to cosmic ray?
 180+ }
 181+ # Default case
 182+ # Check if the last item had no = sign, thus specifying the default case
 183+ if ( count( $parts ) == 1 ) {
 184+ return $parts[0];
 185+ } elseif ( !is_null( $default ) ) {
 186+ return $default;
 187+ } else {
 188+ return '';
 189+ }
 190+ }
 191+
 192+ function switchObj( $parser, $frame, $args ) {
 193+ if ( count( $args ) == 0 ) {
 194+ return '';
 195+ }
 196+ $primary = trim( $frame->expand( array_shift( $args ) ) );
 197+ $found = $defaultFound = false;
 198+ $default = null;
 199+ $lastItemHadNoEquals = false;
 200+ $mwDefault =& MagicWord::get( 'default' );
 201+ foreach ( $args as $arg ) {
 202+ $bits = $arg->splitArg();
 203+ $nameNode = $bits['name'];
 204+ $index = $bits['index'];
 205+ $valueNode = $bits['value'];
 206+
 207+ if ( $index === '' ) {
 208+ # Found "="
 209+ $lastItemHadNoEquals = false;
 210+ if ( $found ) {
 211+ # Multiple input match
 212+ return trim( $frame->expand( $valueNode ) );
 213+ } else {
 214+ $test = trim( $frame->expand( $nameNode ) );
 215+ if ( $test == $primary ) {
 216+ # Found a match, return now
 217+ return trim( $frame->expand( $valueNode ) );
 218+ } elseif ( $defaultFound || $mwDefault->matchStartAndRemove( $test ) ) {
 219+ $default = $valueNode;
 220+ } # else wrong case, continue
 221+ }
 222+ } else {
 223+ # Multiple input, single output
 224+ # If the value matches, set a flag and continue
 225+ $lastItemHadNoEquals = true;
 226+ $test = trim( $frame->expand( $valueNode ) );
 227+ if ( $test == $primary ) {
 228+ $found = true;
 229+ } elseif ( $mwDefault->matchStartAndRemove( $test ) ) {
 230+ $defaultFound = true;
 231+ }
 232+ }
 233+ }
 234+ # Default case
 235+ # Check if the last item had no = sign, thus specifying the default case
 236+ if ( $lastItemHadNoEquals ) {
 237+ return $test;
 238+ } elseif ( !is_null( $default ) ) {
 239+ return trim( $frame->expand( $default ) );
 240+ } else {
 241+ return '';
 242+ }
 243+ }
 244+
 245+ /**
 246+ * Returns the absolute path to a subpage, relative to the current article
 247+ * title. Treats titles as slash-separated paths.
 248+ *
 249+ * Following subpage link syntax instead of standard path syntax, an
 250+ * initial slash is treated as a relative path, and vice versa.
 251+ */
 252+ public function rel2abs( $parser , $to = '' , $from = '' ) {
 253+
 254+ $from = trim( $from );
 255+ if ( $from == '' ) {
 256+ $from = $parser->getTitle()->getPrefixedText();
 257+ }
 258+
 259+ $to = rtrim( $to , ' /' );
 260+
 261+ // if we have an empty path, or just one containing a dot
 262+ if ( $to == '' || $to == '.' ) {
 263+ return $from;
 264+ }
 265+
 266+ // if the path isn't relative
 267+ if ( substr( $to , 0 , 1 ) != '/' &&
 268+ substr( $to , 0 , 2 ) != './' &&
 269+ substr( $to , 0 , 3 ) != '../' &&
 270+ $to != '..' )
 271+ {
 272+ $from = '';
 273+ }
 274+ // Make a long path, containing both, enclose it in /.../
 275+ $fullPath = '/' . $from . '/' . $to . '/';
 276+
 277+ // remove redundant current path dots
 278+ $fullPath = preg_replace( '!/(\./)+!', '/', $fullPath );
 279+
 280+ // remove double slashes
 281+ $fullPath = preg_replace( '!/{2,}!', '/', $fullPath );
 282+
 283+ // remove the enclosing slashes now
 284+ $fullPath = trim( $fullPath , '/' );
 285+ $exploded = explode ( '/' , $fullPath );
 286+ $newExploded = array();
 287+
 288+ foreach ( $exploded as $current ) {
 289+ if ( $current == '..' ) { // removing one level
 290+ if ( !count( $newExploded ) ) {
 291+ // attempted to access a node above root node
 292+ return '<strong class="error">' . wfMsgForContent( 'pfunc_rel2abs_invalid_depth', $fullPath ) . '</strong>';
 293+ }
 294+ // remove last level from the stack
 295+ array_pop( $newExploded );
 296+ } else {
 297+ // add the current level to the stack
 298+ $newExploded[] = $current;
 299+ }
 300+ }
 301+
 302+ // we can now join it again
 303+ return implode( '/' , $newExploded );
 304+ }
 305+
 306+ function incrementIfexistCount( $parser, $frame ) {
 307+ // Don't let this be called more than a certain number of times. It tends to make the database explode.
 308+ global $wgExpensiveParserFunctionLimit;
 309+ $parser->mExpensiveFunctionCount++;
 310+ if ( $frame ) {
 311+ $pdbk = $frame->getPDBK( 1 );
 312+ if ( !isset( $parser->pf_ifexist_breakdown[$pdbk] ) ) {
 313+ $parser->pf_ifexist_breakdown[$pdbk] = 0;
 314+ }
 315+ $parser->pf_ifexist_breakdown[$pdbk] ++;
 316+ }
 317+ return $parser->mExpensiveFunctionCount <= $wgExpensiveParserFunctionLimit;
 318+ }
 319+
 320+ function ifexist( $parser, $title = '', $then = '', $else = '' ) {
 321+ return $this->ifexistCommon( $parser, false, $title, $then, $else );
 322+ }
 323+
 324+ function ifexistCommon( $parser, $frame, $titletext = '', $then = '', $else = '' ) {
 325+ global $wgContLang;
 326+ $title = Title::newFromText( $titletext );
 327+ $wgContLang->findVariantLink( $titletext, $title, true );
 328+ if ( $title ) {
 329+ if ( $title->getNamespace() == NS_MEDIA ) {
 330+ /* If namespace is specified as NS_MEDIA, then we want to
 331+ * check the physical file, not the "description" page.
 332+ */
 333+ if ( !$this->incrementIfexistCount( $parser, $frame ) ) {
 334+ return $else;
 335+ }
 336+ $file = wfFindFile( $title );
 337+ if ( !$file ) {
 338+ return $else;
 339+ }
 340+ $parser->mOutput->addImage( $file->getName() );
 341+ return $file->exists() ? $then : $else;
 342+ } elseif ( $title->getNamespace() == NS_SPECIAL ) {
 343+ /* Don't bother with the count for special pages,
 344+ * since their existence can be checked without
 345+ * accessing the database.
 346+ */
 347+ return SpecialPage::exists( $title->getDBkey() ) ? $then : $else;
 348+ } elseif ( $title->isExternal() ) {
 349+ /* Can't check the existence of pages on other sites,
 350+ * so just return $else. Makes a sort of sense, since
 351+ * they don't exist _locally_.
 352+ */
 353+ return $else;
 354+ } else {
 355+ $pdbk = $title->getPrefixedDBkey();
 356+ $lc = LinkCache::singleton();
 357+ if ( !$this->incrementIfexistCount( $parser, $frame ) ) {
 358+ return $else;
 359+ }
 360+ if ( 0 != ( $id = $lc->getGoodLinkID( $pdbk ) ) ) {
 361+ $parser->mOutput->addLink( $title, $id );
 362+ return $then;
 363+ } elseif ( $lc->isBadLink( $pdbk ) ) {
 364+ $parser->mOutput->addLink( $title, 0 );
 365+ return $else;
 366+ }
 367+ $id = $title->getArticleID();
 368+ $parser->mOutput->addLink( $title, $id );
 369+ if ( $id ) {
 370+ return $then;
 371+ }
 372+ }
 373+ }
 374+ return $else;
 375+ }
 376+
 377+ function ifexistObj( $parser, $frame, $args ) {
 378+ $title = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
 379+ $then = isset( $args[1] ) ? $args[1] : null;
 380+ $else = isset( $args[2] ) ? $args[2] : null;
 381+
 382+ $result = $this->ifexistCommon( $parser, $frame, $title, $then, $else );
 383+ if ( $result === null ) {
 384+ return '';
 385+ } else {
 386+ return trim( $frame->expand( $result ) );
 387+ }
 388+ }
 389+
 390+ function time( $parser, $format = '', $date = '', $local = false ) {
 391+ global $wgContLang, $wgLocaltimezone;
 392+ if ( isset( $this->mTimeCache[$format][$date][$local] ) ) {
 393+ return $this->mTimeCache[$format][$date][$local];
 394+ }
 395+
 396+ # compute the timestamp string $ts
 397+ # PHP >= 5.2 can handle dates before 1970 or after 2038 using the DateTime object
 398+ # PHP < 5.2 is limited to dates between 1970 and 2038
 399+
 400+ $invalidTime = false;
 401+
 402+ if ( class_exists( 'DateTime' ) ) { # PHP >= 5.2
 403+ # the DateTime constructor must be used because it throws exceptions
 404+ # when errors occur, whereas date_create appears to just output a warning
 405+ # that can't really be detected from within the code
 406+ try {
 407+ # Determine timezone
 408+ if ( $local ) {
 409+ # convert to MediaWiki local timezone if set
 410+ if ( isset( $wgLocaltimezone ) ) {
 411+ $tz = new DateTimeZone( $wgLocaltimezone );
 412+ } else {
 413+ $tz = new DateTimeZone( date_default_timezone_get() );
 414+ }
 415+ } else {
 416+ # if local time was not requested, convert to UTC
 417+ $tz = new DateTimeZone( 'UTC' );
 418+ }
 419+
 420+ # Correct for DateTime interpreting 'XXXX' as XX:XX o'clock
 421+ if ( preg_match( '/^[0-9]{4}$/', $date ) ) {
 422+ $date = '00:00 '.$date;
 423+ }
 424+
 425+ # Parse date
 426+ if ( $date !== '' ) {
 427+ $dateObject = new DateTime( $date, $tz );
 428+ } else {
 429+ # use current date and time
 430+ $dateObject = new DateTime( 'now', $tz );
 431+ }
 432+
 433+ # Generate timestamp
 434+ $ts = $dateObject->format( 'YmdHis' );
 435+ } catch ( Exception $ex ) {
 436+ $invalidTime = true;
 437+ }
 438+ } else { # PHP < 5.2
 439+ if ( $date !== '' ) {
 440+ $unix = @strtotime( $date );
 441+ } else {
 442+ $unix = time();
 443+ }
 444+
 445+ if ( $unix == -1 || $unix == false ) {
 446+ $invalidTime = true;
 447+ } else {
 448+ if ( $local ) {
 449+ # Use the time zone
 450+ if ( isset( $wgLocaltimezone ) ) {
 451+ $oldtz = getenv( 'TZ' );
 452+ putenv( 'TZ=' . $wgLocaltimezone );
 453+ }
 454+ wfSuppressWarnings(); // E_STRICT system time bitching
 455+ $ts = date( 'YmdHis', $unix );
 456+ wfRestoreWarnings();
 457+ if ( isset( $wgLocaltimezone ) ) {
 458+ putenv( 'TZ=' . $oldtz );
 459+ }
 460+ } else {
 461+ $ts = wfTimestamp( TS_MW, $unix );
 462+ }
 463+ }
 464+ }
 465+
 466+ # format the timestamp and return the result
 467+ if ( $invalidTime ) {
 468+ $result = '<strong class="error">' . wfMsgForContent( 'pfunc_time_error' ) . '</strong>';
 469+ } else {
 470+ $this->mTimeChars += strlen( $format );
 471+ if ( $this->mTimeChars > $this->mMaxTimeChars ) {
 472+ return '<strong class="error">' . wfMsgForContent( 'pfunc_time_too_long' ) . '</strong>';
 473+ } else {
 474+ $result = $wgContLang->sprintfDate( $format, $ts );
 475+ }
 476+ }
 477+ $this->mTimeCache[$format][$date][$local] = $result;
 478+ return $result;
 479+ }
 480+
 481+ function localTime( $parser, $format = '', $date = '' ) {
 482+ return $this->time( $parser, $format, $date, true );
 483+ }
 484+
 485+ /**
 486+ * Obtain a specified number of slash-separated parts of a title,
 487+ * e.g. {{#titleparts:Hello/World|1}} => "Hello"
 488+ *
 489+ * @param Parser $parser Parent parser
 490+ * @param string $title Title to split
 491+ * @param int $parts Number of parts to keep
 492+ * @param int $offset Offset starting at 1
 493+ * @return string
 494+ */
 495+ public function titleparts( $parser, $title = '', $parts = 0, $offset = 0 ) {
 496+ $parts = intval( $parts );
 497+ $offset = intval( $offset );
 498+ $ntitle = Title::newFromText( $title );
 499+ if ( $ntitle instanceof Title ) {
 500+ $bits = explode( '/', $ntitle->getPrefixedText(), 25 );
 501+ if ( count( $bits ) <= 0 ) {
 502+ return $ntitle->getPrefixedText();
 503+ } else {
 504+ if ( $offset > 0 ) {
 505+ --$offset;
 506+ }
 507+ if ( $parts == 0 ) {
 508+ return implode( '/', array_slice( $bits, $offset ) );
 509+ } else {
 510+ return implode( '/', array_slice( $bits, $offset, $parts ) );
 511+ }
 512+ }
 513+ } else {
 514+ return $title;
 515+ }
 516+ }
 517+
 518+ // Verifies parameter is less than max string length.
 519+ private function checkLength( $text ) {
 520+ global $wgPFStringLengthLimit;
 521+ return ( mb_strlen( $text ) < $wgPFStringLengthLimit );
 522+ }
 523+
 524+ // Generates error message. Called when string is too long.
 525+ private function tooLongError() {
 526+ global $wgPFStringLengthLimit, $wgContLang;
 527+ return '<strong class="error">' .
 528+ wfMsgExt( 'pfunc_string_too_long',
 529+ array( 'escape', 'parsemag', 'content' ),
 530+ $wgContLang->formatNum( $wgPFStringLengthLimit ) ) .
 531+ '</strong>';
 532+ }
 533+
 534+ /**
 535+ * {{#len:string}}
 536+ *
 537+ * Reports number of characters in string.
 538+ */
 539+ function runLen ( $parser, $inStr = '' ) {
 540+ wfProfileIn( __METHOD__ );
 541+
 542+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 543+ $len = mb_strlen( $inStr );
 544+
 545+ wfProfileOut( __METHOD__ );
 546+ return $len;
 547+ }
 548+
 549+ /**
 550+ * {{#pos: string | needle | offset}}
 551+ *
 552+ * Finds first occurrence of "needle" in "string" starting at "offset".
 553+ *
 554+ * Note: If the needle is an empty string, single space is used instead.
 555+ * Note: If the needle is not found, empty string is returned.
 556+ */
 557+ function runPos ( $parser, $inStr = '', $inNeedle = '', $inOffset = 0 ) {
 558+ wfProfileIn( __METHOD__ );
 559+
 560+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 561+ $inNeedle = $this->killMarkers( $parser, (string)$inNeedle );
 562+
 563+ if ( !$this->checkLength( $inStr ) ||
 564+ !$this->checkLength( $inNeedle ) ) {
 565+ wfProfileOut( __METHOD__ );
 566+ return $this->tooLongError();
 567+ }
 568+
 569+ if ( $inNeedle == '' ) { $inNeedle = ' '; }
 570+
 571+ $pos = mb_strpos( $inStr, $inNeedle, $inOffset );
 572+ if ( $pos === false ) { $pos = ""; }
 573+
 574+ wfProfileOut( __METHOD__ );
 575+ return $pos;
 576+ }
 577+
 578+ /**
 579+ * {{#rpos: string | needle}}
 580+ *
 581+ * Finds last occurrence of "needle" in "string".
 582+ *
 583+ * Note: If the needle is an empty string, single space is used instead.
 584+ * Note: If the needle is not found, -1 is returned.
 585+ */
 586+ function runRPos ( $parser, $inStr = '', $inNeedle = '' ) {
 587+ wfProfileIn( __METHOD__ );
 588+
 589+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 590+ $inNeedle = $this->killMarkers( $parser, (string)$inNeedle );
 591+
 592+ if ( !$this->checkLength( $inStr ) ||
 593+ !$this->checkLength( $inNeedle ) ) {
 594+ wfProfileOut( __METHOD__ );
 595+ return $this->tooLongError();
 596+ }
 597+
 598+ if ( $inNeedle == '' ) { $inNeedle = ' '; }
 599+
 600+ $pos = mb_strrpos( $inStr, $inNeedle );
 601+ if ( $pos === false ) { $pos = -1; }
 602+
 603+ wfProfileOut( __METHOD__ );
 604+ return $pos;
 605+ }
 606+
 607+ /**
 608+ * {{#sub: string | start | length }}
 609+ *
 610+ * Returns substring of "string" starting at "start" and having
 611+ * "length" characters.
 612+ *
 613+ * Note: If length is zero, the rest of the input is returned.
 614+ * Note: A negative value for "start" operates from the end of the
 615+ * "string".
 616+ * Note: A negative value for "length" returns a string reduced in
 617+ * length by that amount.
 618+ */
 619+ function runSub ( $parser, $inStr = '', $inStart = 0, $inLength = 0 ) {
 620+ wfProfileIn( __METHOD__ );
 621+
 622+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 623+
 624+ if ( !$this->checkLength( $inStr ) ) {
 625+ wfProfileOut( __METHOD__ );
 626+ return $this->tooLongError();
 627+ }
 628+
 629+ if ( intval( $inLength ) == 0 ) {
 630+ $result = mb_substr( $inStr, $inStart );
 631+ } else {
 632+ $result = mb_substr( $inStr, $inStart, $inLength );
 633+ }
 634+
 635+ wfProfileOut( __METHOD__ );
 636+ return $result;
 637+ }
 638+
 639+ /**
 640+ * {{#count: string | substr }}
 641+ *
 642+ * Returns number of occurrences of "substr" in "string".
 643+ *
 644+ * Note: If "substr" is empty, a single space is used.
 645+ */
 646+ function runCount ( $parser, $inStr = '', $inSubStr = '' ) {
 647+ wfProfileIn( __METHOD__ );
 648+
 649+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 650+ $inSubStr = $this->killMarkers( $parser, (string)$inSubStr );
 651+
 652+ if ( !$this->checkLength( $inStr ) ||
 653+ !$this->checkLength( $inSubStr ) ) {
 654+ wfProfileOut( __METHOD__ );
 655+ return $this->tooLongError();
 656+ }
 657+
 658+ if ( $inSubStr == '' ) { $inSubStr = ' '; }
 659+
 660+ $result = mb_substr_count( $inStr, $inSubStr );
 661+
 662+ wfProfileOut( __METHOD__ );
 663+ return $result;
 664+ }
 665+
 666+ /**
 667+ * {{#replace:string | from | to | limit }}
 668+ *
 669+ * Replaces each occurrence of "from" in "string" with "to".
 670+ * At most "limit" replacements are performed.
 671+ *
 672+ * Note: Armored against replacements that would generate huge strings.
 673+ * Note: If "from" is an empty string, single space is used instead.
 674+ */
 675+ function runReplace( $parser, $inStr = '',
 676+ $inReplaceFrom = '', $inReplaceTo = '', $inLimit = -1 ) {
 677+ global $wgPFStringLengthLimit;
 678+ wfProfileIn( __METHOD__ );
 679+
 680+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 681+ $inReplaceFrom = $this->killMarkers( $parser, (string)$inReplaceFrom );
 682+ $inReplaceTo = $this->killMarkers( $parser, (string)$inReplaceTo );
 683+
 684+ if ( !$this->checkLength( $inStr ) ||
 685+ !$this->checkLength( $inReplaceFrom ) ||
 686+ !$this->checkLength( $inReplaceTo ) ) {
 687+ wfProfileOut( __METHOD__ );
 688+ return $this->tooLongError();
 689+ }
 690+
 691+ if ( $inReplaceFrom == '' ) { $inReplaceFrom = ' '; }
 692+
 693+ // Precompute limit to avoid generating enormous string:
 694+ $diff = mb_strlen( $inReplaceTo ) - mb_strlen( $inReplaceFrom );
 695+ if ( $diff > 0 ) {
 696+ $limit = ( ( $wgPFStringLengthLimit - mb_strlen( $inStr ) ) / $diff ) + 1;
 697+ } else {
 698+ $limit = -1;
 699+ }
 700+
 701+ $inLimit = intval( $inLimit );
 702+ if ( $inLimit >= 0 ) {
 703+ if ( $limit > $inLimit || $limit == -1 ) { $limit = $inLimit; }
 704+ }
 705+
 706+ // Use regex to allow limit and handle UTF-8 correctly.
 707+ $inReplaceFrom = preg_quote( $inReplaceFrom, '/' );
 708+ $inReplaceTo = StringUtils::escapeRegexReplacement( $inReplaceTo );
 709+
 710+ $result = preg_replace( '/' . $inReplaceFrom . '/u',
 711+ $inReplaceTo, $inStr, $limit );
 712+
 713+ if ( !$this->checkLength( $result ) ) {
 714+ wfProfileOut( __METHOD__ );
 715+ return $this->tooLongError();
 716+ }
 717+
 718+ wfProfileOut( __METHOD__ );
 719+ return $result;
 720+ }
 721+
 722+
 723+ /**
 724+ * {{#explode:string | delimiter | position | limit}}
 725+ *
 726+ * Breaks "string" into chunks separated by "delimiter" and returns the
 727+ * chunk identified by "position".
 728+ *
 729+ * Note: Negative position can be used to specify tokens from the end.
 730+ * Note: If the divider is an empty string, single space is used instead.
 731+ * Note: Empty string is returned if there are not enough exploded chunks.
 732+ */
 733+ function runExplode ( $parser, $inStr = '', $inDiv = '', $inPos = 0, $inLim = null ) {
 734+ wfProfileIn( __METHOD__ );
 735+
 736+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 737+ $inDiv = $this->killMarkers( $parser, (string)$inDiv );
 738+
 739+ if ( $inDiv == '' ) { $inDiv = ' '; }
 740+
 741+ if ( !$this->checkLength( $inStr ) ||
 742+ !$this->checkLength( $inDiv ) ) {
 743+ wfProfileOut( __METHOD__ );
 744+ return $this->tooLongError();
 745+ }
 746+
 747+ $inDiv = preg_quote( $inDiv, '/' );
 748+
 749+ $matches = preg_split( '/' . $inDiv . '/u', $inStr, $inLim );
 750+
 751+ if ( $inPos >= 0 && isset( $matches[$inPos] ) ) {
 752+ $result = $matches[$inPos];
 753+ } elseif ( $inPos < 0 && isset( $matches[count( $matches ) + $inPos] ) ) {
 754+ $result = $matches[count( $matches ) + $inPos];
 755+ } else {
 756+ $result = '';
 757+ }
 758+
 759+ wfProfileOut( __METHOD__ );
 760+ return $result;
 761+ }
 762+
 763+ /**
 764+ * {{#urldecode:string}}
 765+ *
 766+ * Decodes URL-encoded (like%20that) strings.
 767+ */
 768+ function runUrlDecode( $parser, $inStr = '' ) {
 769+ wfProfileIn( __METHOD__ );
 770+
 771+ $inStr = $this->killMarkers( $parser, (string)$inStr );
 772+ if ( !$this->checkLength( $inStr ) ) {
 773+ wfProfileOut( __METHOD__ );
 774+ return $this->tooLongError();
 775+ }
 776+
 777+ $result = urldecode( $inStr );
 778+
 779+ wfProfileOut( __METHOD__ );
 780+ return $result;
 781+ }
 782+}
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions_body.php
___________________________________________________________________
Added: svn:eol-style
1783 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions.i18n.php
@@ -0,0 +1,2355 @@
 2+<?php
 3+/**
 4+ * Internationalisation file for extension ParserFunctions.
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ */
 9+
 10+$messages = array();
 11+
 12+$messages['en'] = array(
 13+ 'pfunc_desc' => 'Enhance parser with logical functions',
 14+ 'pfunc_time_error' => 'Error: invalid time',
 15+ 'pfunc_time_too_long' => 'Error: too many #time calls',
 16+ 'pfunc_rel2abs_invalid_depth' => 'Error: Invalid depth in path: "$1" (tried to access a node above the root node)',
 17+ 'pfunc_expr_stack_exhausted' => 'Expression error: Stack exhausted',
 18+ 'pfunc_expr_unexpected_number' => 'Expression error: Unexpected number',
 19+ 'pfunc_expr_preg_match_failure' => 'Expression error: Unexpected preg_match failure',
 20+ 'pfunc_expr_unrecognised_word' => 'Expression error: Unrecognised word "$1"',
 21+ 'pfunc_expr_unexpected_operator' => 'Expression error: Unexpected $1 operator',
 22+ 'pfunc_expr_missing_operand' => 'Expression error: Missing operand for $1',
 23+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression error: Unexpected closing bracket',
 24+ 'pfunc_expr_unrecognised_punctuation' => 'Expression error: Unrecognised punctuation character "$1"',
 25+ 'pfunc_expr_unclosed_bracket' => 'Expression error: Unclosed bracket',
 26+ 'pfunc_expr_division_by_zero' => 'Division by zero',
 27+ 'pfunc_expr_invalid_argument' => 'Invalid argument for $1: < -1 or > 1',
 28+ 'pfunc_expr_invalid_argument_ln' => 'Invalid argument for ln: <= 0',
 29+ 'pfunc_expr_unknown_error' => 'Expression error: Unknown error ($1)',
 30+ 'pfunc_expr_not_a_number' => 'In $1: result is not a number',
 31+ 'pfunc_string_too_long' => 'Error: String exceeds $1 character limit',
 32+);
 33+
 34+/** Message documentation (Message documentation)
 35+ * @author Jon Harald Søby
 36+ * @author Meno25
 37+ * @author Siebrand
 38+ * @author The Evil IP address
 39+ */
 40+$messages['qqq'] = array(
 41+ 'pfunc_desc' => '{{desc}}',
 42+ 'pfunc_expr_division_by_zero' => '{{Identical|Divizion by zero}}',
 43+ 'pfunc_string_too_long' => 'PLURAL is supported for $1.',
 44+);
 45+
 46+/** Afrikaans (Afrikaans)
 47+ * @author Naudefj
 48+ */
 49+$messages['af'] = array(
 50+ 'pfunc_desc' => 'Verryk die ontleder met logiese funksies',
 51+ 'pfunc_time_error' => 'Fout: ongeldige tyd',
 52+ 'pfunc_time_too_long' => 'Fout: #time te veel kere geroep',
 53+ 'pfunc_rel2abs_invalid_depth' => 'Fout: Ongeldige diepte in pad: "$1" (probeer \'n node bo die wortelnode te roep)',
 54+ 'pfunc_expr_stack_exhausted' => 'Fout in uitdrukking: stack uitgeput',
 55+ 'pfunc_expr_unexpected_number' => 'Fout in uitdrukking: onverwagte getal',
 56+ 'pfunc_expr_preg_match_failure' => 'Fout in uitdrukking: onverwagte faling van preg_match',
 57+ 'pfunc_expr_unrecognised_word' => 'Fout in uitdrukking: woord "$1" nie herken',
 58+ 'pfunc_expr_unexpected_operator' => 'Fout in uitdrukking: onverwagte operateur $1',
 59+ 'pfunc_expr_missing_operand' => 'Fout in uitdrukking: geen operand vir $1',
 60+ 'pfunc_expr_unexpected_closing_bracket' => 'Fout in uitdrukking: hakkie onverwags gesluit',
 61+ 'pfunc_expr_unrecognised_punctuation' => 'Fout in uitdrukking: onbekende leesteken "$1"',
 62+ 'pfunc_expr_unclosed_bracket' => 'Fout in uitdrukking: hakkie nie gesluit nie',
 63+ 'pfunc_expr_division_by_zero' => 'Deling deur nul',
 64+ 'pfunc_expr_invalid_argument' => 'Ongeldige argument vir $1: < -1 of > 1',
 65+ 'pfunc_expr_invalid_argument_ln' => 'Ongeldige argument vir ln: <= 0',
 66+ 'pfunc_expr_unknown_error' => 'Fout in uitdrukking: onbekende fout ($1)',
 67+ 'pfunc_expr_not_a_number' => "In $1: resultaat is nie 'n getal nie",
 68+ 'pfunc_string_too_long' => 'Fout: String oorskry $1 karakter limiet',
 69+);
 70+
 71+/** Gheg Albanian (Gegë)
 72+ * @author Mdupont
 73+ */
 74+$messages['aln'] = array(
 75+ 'pfunc_desc' => 'Enhance parser me funksione logjike',
 76+ 'pfunc_time_error' => 'Gabim: koha e pavlefshme',
 77+ 'pfunc_time_too_long' => 'Gabim: kohë shumë # thirrjet',
 78+ 'pfunc_rel2abs_invalid_depth' => 'Gabim: thellësia e pavlefshme në rrugën: "$1" (u përpoq për të hyrë në një nyjë mbi nyjen e rrënjë)',
 79+ 'pfunc_expr_stack_exhausted' => 'gabim Shprehja: qipi rraskapitur',
 80+ 'pfunc_expr_unexpected_number' => 'gabim Shprehja: Numri i papritur',
 81+);
 82+
 83+/** Aragonese (Aragonés)
 84+ * @author Juanpabl
 85+ */
 86+$messages['an'] = array(
 87+ 'pfunc_desc' => 'Amillorar o parseyador con funcions lochicas',
 88+ 'pfunc_time_error' => 'Error: tiempo incorreuto',
 89+ 'pfunc_time_too_long' => 'Error: masiadas cridas #time',
 90+ 'pfunc_rel2abs_invalid_depth' => 'Error: Fondura incorreuta en o camín: "$1" (ha prebato d\'acceder ta un nodo por dencima d\'o nodo radiz)',
 91+ 'pfunc_expr_stack_exhausted' => "Error d'expresión: Pila acotolada",
 92+ 'pfunc_expr_unexpected_number' => "Error d'expresión: numero no asperato",
 93+ 'pfunc_expr_preg_match_failure' => "Error d'expresión: fallo de preg_match no asperato",
 94+ 'pfunc_expr_unrecognised_word' => 'Error d\'expresión: parola "$1" no reconoixita',
 95+ 'pfunc_expr_unexpected_operator' => "Error d'expresión: operador $1 no asperato",
 96+ 'pfunc_expr_missing_operand' => "Error d'expresión: a $1 li falta un operando",
 97+ 'pfunc_expr_unexpected_closing_bracket' => "Error d'expresión: zarradura d'o gafet no asperata",
 98+ 'pfunc_expr_unrecognised_punctuation' => 'Error d\'expresión: carácter de puntuación "$1" no reconoixito',
 99+ 'pfunc_expr_unclosed_bracket' => "Error d'expresión: gafet sin zarrar",
 100+ 'pfunc_expr_division_by_zero' => 'División por zero',
 101+ 'pfunc_expr_invalid_argument' => 'Argumento no conforme ta $1: < -1 u > 1',
 102+ 'pfunc_expr_invalid_argument_ln' => 'Argumento no conforme ta ln: <=0',
 103+ 'pfunc_expr_unknown_error' => "Error d'expresión: error esconoixito ($1)",
 104+ 'pfunc_expr_not_a_number' => 'En $1: o resultau no ye un numero',
 105+);
 106+
 107+/** Arabic (العربية)
 108+ * @author Meno25
 109+ */
 110+$messages['ar'] = array(
 111+ 'pfunc_desc' => 'محلل ممدد بدوال منطقية',
 112+ 'pfunc_time_error' => 'خطأ: زمن غير صحيح',
 113+ 'pfunc_time_too_long' => 'خطأ: استدعاءات #time كثيرة جدا',
 114+ 'pfunc_rel2abs_invalid_depth' => 'خطأ: عمق غير صحيح في المسار: "$1" (حاول دخول عقدة فوق العقدة الجذرية)',
 115+ 'pfunc_expr_stack_exhausted' => 'خطأ في التعبير: ستاك مجهد',
 116+ 'pfunc_expr_unexpected_number' => 'خطأ في التعبير: رقم غير متوقع',
 117+ 'pfunc_expr_preg_match_failure' => 'خطأ في التعبير: فشل preg_match غير متوقع',
 118+ 'pfunc_expr_unrecognised_word' => 'خطأ في التعبير: كلمة غير متعرف عليها "$1"',
 119+ 'pfunc_expr_unexpected_operator' => 'خطأ في التعبير: عامل $1 غير متوقع',
 120+ 'pfunc_expr_missing_operand' => 'خطأ في التعبير: operand مفقود ل$1',
 121+ 'pfunc_expr_unexpected_closing_bracket' => 'خطأ في التعبير: قوس إغلاق غير متوقع',
 122+ 'pfunc_expr_unrecognised_punctuation' => 'خطأ في التعبير: علامة ترقيم غير متعرف عليها "$1"',
 123+ 'pfunc_expr_unclosed_bracket' => 'خطأ في التعبير: قوس غير مغلق',
 124+ 'pfunc_expr_division_by_zero' => 'القسمة على صفر',
 125+ 'pfunc_expr_invalid_argument' => 'مدخلة غير صحيحة ل $1: < -1 أو > 1',
 126+ 'pfunc_expr_invalid_argument_ln' => 'مدخلة غير صحيحة ل ln: <= 0',
 127+ 'pfunc_expr_unknown_error' => 'خطأ في التعبير: خطأ غير معروف ($1)',
 128+ 'pfunc_expr_not_a_number' => 'في $1: النتيجة ليست رقما',
 129+ 'pfunc_string_too_long' => 'خطأ: السلسلة تتجاوز الحد $1 حرف',
 130+);
 131+
 132+/** Aramaic (ܐܪܡܝܐ)
 133+ * @author Basharh
 134+ */
 135+$messages['arc'] = array(
 136+ 'pfunc_time_error' => 'ܦܘܕܐ: ܥܕܢܐ ܠܐ ܬܪܝܨܬܐ',
 137+);
 138+
 139+/** Egyptian Spoken Arabic (مصرى)
 140+ * @author Ghaly
 141+ * @author Meno25
 142+ * @author Ramsis II
 143+ */
 144+$messages['arz'] = array(
 145+ 'pfunc_desc' => 'محلل متدعم ب دوال منطقية',
 146+ 'pfunc_time_error' => 'غلطه:وقت مش صحيح',
 147+ 'pfunc_time_too_long' => 'غلط: استدعاءات #time كتيرة قوى',
 148+ 'pfunc_rel2abs_invalid_depth' => 'غلط: عمق مش صحيح فى المسار: "$1" (حاول دخول عقدة فوق العقدة الجزرية)',
 149+ 'pfunc_expr_stack_exhausted' => 'غلط فى التعبير: ستاك مجهد',
 150+ 'pfunc_expr_unexpected_number' => 'غلط فى التعبير: رقم مش متوقع',
 151+ 'pfunc_expr_preg_match_failure' => 'غلط تعبيري: فشل مش متوقع فى preg_match',
 152+ 'pfunc_expr_unrecognised_word' => 'غلط تعبيري: كلمة مش متعرف عليها "$1"',
 153+ 'pfunc_expr_unexpected_operator' => 'غلط تعبيري: عامل $1 مش متوقع',
 154+ 'pfunc_expr_missing_operand' => 'غلط تعبيري: operand بتاع $1 ضايع',
 155+ 'pfunc_expr_unexpected_closing_bracket' => 'غلط تعبيري:قوس قفل مش متوقع',
 156+ 'pfunc_expr_unrecognised_punctuation' => 'غلط تعبيري:علامة الترقيم "$1" مش متعرف عليها',
 157+ 'pfunc_expr_unclosed_bracket' => 'غلط تعبيري:قوس مش مقفول',
 158+ 'pfunc_expr_division_by_zero' => 'القسمه على صفر',
 159+ 'pfunc_expr_invalid_argument' => 'مدخلة مش صحيحة لـ $1: < -1 or > 1',
 160+ 'pfunc_expr_invalid_argument_ln' => 'مدخلة مش صحيحة لـ ln: <= 0',
 161+ 'pfunc_expr_unknown_error' => '($1)غلط تعبيري: غلط مش معروف',
 162+ 'pfunc_expr_not_a_number' => 'فى $1: النتيجه مش رقم',
 163+);
 164+
 165+/** Assamese (অসমীয়া)
 166+ * @author Rajuonline
 167+ */
 168+$messages['as'] = array(
 169+ 'pfunc_time_error' => 'ভুল: অযোগ্য সময়',
 170+);
 171+
 172+/** Asturian (Asturianu)
 173+ * @author Esbardu
 174+ */
 175+$messages['ast'] = array(
 176+ 'pfunc_desc' => "Ameyora l'análisis sintáuticu con funciones llóxiques",
 177+ 'pfunc_time_error' => 'Error: tiempu non válidu',
 178+ 'pfunc_time_too_long' => 'Error: demasiaes llamaes #time',
 179+ 'pfunc_rel2abs_invalid_depth' => 'Error: Nivel de subdireutoriu non válidu: "$1" (intentu d\'accesu penriba del direutoriu raíz)',
 180+ 'pfunc_expr_stack_exhausted' => "Error d'espresión: Pila escosada",
 181+ 'pfunc_expr_unexpected_number' => "Error d'espresión: Númberu inesperáu",
 182+ 'pfunc_expr_preg_match_failure' => "Error d'espresión: Fallu inesperáu de preg_match",
 183+ 'pfunc_expr_unrecognised_word' => 'Error d\'espresión: Pallabra "$1" non reconocida',
 184+ 'pfunc_expr_unexpected_operator' => "Error d'espresión: Operador $1 inesperáu",
 185+ 'pfunc_expr_missing_operand' => "Error d'espresión: Falta operador en $1",
 186+ 'pfunc_expr_unexpected_closing_bracket' => "Error d'espresión: Paréntesis final inesperáu",
 187+ 'pfunc_expr_unrecognised_punctuation' => 'Error d\'espresión: Caráuter de puntuación "$1" non reconocíu',
 188+ 'pfunc_expr_unclosed_bracket' => "Error d'espresión: Paréntesis non zarráu",
 189+ 'pfunc_expr_division_by_zero' => 'División por cero',
 190+ 'pfunc_expr_invalid_argument' => 'Argumentu non válidu pa $1: < -1 o > 1',
 191+ 'pfunc_expr_invalid_argument_ln' => 'Argumentu non válidu pa ln: <= 0',
 192+ 'pfunc_expr_unknown_error' => "Error d'espresión: Error desconocíu ($1)",
 193+ 'pfunc_expr_not_a_number' => 'En $1: el resultáu nun ye un númberu',
 194+);
 195+
 196+/** Bashkir (Башҡорт)
 197+ * @author Assele
 198+ */
 199+$messages['ba'] = array(
 200+ 'pfunc_desc' => 'Логик функциялар менән яҡшыртылған уҡыу ҡоралы',
 201+ 'pfunc_time_error' => 'Хата: ваҡыт дөрөҫ түгел',
 202+ 'pfunc_time_too_long' => 'Хата: #time функцияһы бигерәк күп саҡырылған',
 203+ 'pfunc_rel2abs_invalid_depth' => 'Хата: "$1" юлының тәрәнлеге дөрөҫ түгел (тәүге төйөндән өҫтәрәк торған төйөндө асырға тырышыу)',
 204+ 'pfunc_expr_stack_exhausted' => 'Аңлатма хатаһы: Стек тулған',
 205+ 'pfunc_expr_unexpected_number' => 'Аңлатма хатаһы: Көтөлмәгән һан',
 206+ 'pfunc_expr_preg_match_failure' => 'Аңлатма хатаһы: Көтөлмәгән preg_match хатаһы',
 207+ 'pfunc_expr_unrecognised_word' => 'Аңлатма хатаһы: Танылмаған "$1" һүҙе',
 208+ 'pfunc_expr_unexpected_operator' => 'Аңлатма хатаһы: Көтөлмәгән $1 операторы',
 209+ 'pfunc_expr_missing_operand' => 'Аңлатма хатаһы: $1 аңлатмаһы өсөн операнд етмәй',
 210+ 'pfunc_expr_unexpected_closing_bracket' => 'Аңлатма хатаһы: Көтөлмәгән ябыу йәйәһе',
 211+ 'pfunc_expr_unrecognised_punctuation' => 'Аңлатма хатаһы: Танылмаған "$1" тыныш билдәһе',
 212+ 'pfunc_expr_unclosed_bracket' => 'Аңлатма хатаһы: Ябылмаған йәйә',
 213+ 'pfunc_expr_division_by_zero' => 'Нулгә бүлеү хатаһы',
 214+ 'pfunc_expr_invalid_argument' => '$1 өсөн аргумент дөрөҫ түгел: < -1 йәки > 1',
 215+ 'pfunc_expr_invalid_argument_ln' => 'ln өсөн аргумент дөрөҫ түгел: <= 0',
 216+ 'pfunc_expr_unknown_error' => 'Аңлатма хатаһы: Билдәһеҙ хата ($1)',
 217+ 'pfunc_expr_not_a_number' => '$1: һөҙөмтә — һан түгел',
 218+ 'pfunc_string_too_long' => 'Хата: Юл оҙонлоғо билдәләнгән сиктән — $1 хәрефтән — ашҡан',
 219+);
 220+
 221+/** Southern Balochi (بلوچی مکرانی)
 222+ * @author Mostafadaneshvar
 223+ */
 224+$messages['bcc'] = array(
 225+ 'pfunc_desc' => 'تجزیه کنوکء بهتر کن گون عملگر آن منطقی',
 226+ 'pfunc_time_error' => 'حطا: نامعتبر وهد',
 227+ 'pfunc_time_too_long' => 'حطا: بازگین #زمان سوج',
 228+ 'pfunc_rel2abs_invalid_depth' => 'حطا: نامعتبر عمق ته مسیر: "$1"(سعی کتن په یک بالادی گرهنی چه ریشگی گرهنانا برسیت)',
 229+ 'pfunc_expr_stack_exhausted' => 'حطا اصطلاح: توده حالیک',
 230+ 'pfunc_expr_unexpected_number' => 'حطا اصطلاح: غیر منظرین شماره',
 231+ 'pfunc_expr_preg_match_failure' => 'حطا اصطلاح: غیرمنتظره این preg_ همسانی پروش وارت',
 232+ 'pfunc_expr_unrecognised_word' => 'حطا اصطلاح: نا شناسین کلمه "$1"',
 233+ 'pfunc_expr_unexpected_operator' => 'حطا اصطلاح:نه لوٹتین $1 اپراتور',
 234+ 'pfunc_expr_missing_operand' => 'حطا اصطلاح: گارین عملوند په $1',
 235+ 'pfunc_expr_unexpected_closing_bracket' => 'حطا اصطلاح: نه لوٹتگین براکت بندگ',
 236+ 'pfunc_expr_unrecognised_punctuation' => 'حطا اصطلاح: ناشناسین کاراکتر نشانه هلگی "$1"',
 237+ 'pfunc_expr_unclosed_bracket' => 'حطا اصطلاح: نه بسته گین براکت',
 238+ 'pfunc_expr_division_by_zero' => 'تقسیم بر صفر',
 239+ 'pfunc_expr_invalid_argument' => 'نامعتبر آرگومان په $1: < -1 یا > 1',
 240+ 'pfunc_expr_invalid_argument_ln' => 'نامعتبر آرگومان ته شی : <= 0',
 241+ 'pfunc_expr_unknown_error' => 'حطا اصطلاح :ناشناسین حطا ($1)',
 242+ 'pfunc_expr_not_a_number' => 'ته $1: نتیجه یک عددی نهنت',
 243+);
 244+
 245+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
 246+ * @author EugeneZelenko
 247+ * @author Jim-by
 248+ * @author Red Winged Duck
 249+ */
 250+$messages['be-tarask'] = array(
 251+ 'pfunc_desc' => 'Палепшаны парсэр зь лягічнымі функцыямі',
 252+ 'pfunc_time_error' => 'Памылка: няслушны час',
 253+ 'pfunc_time_too_long' => 'Памылка: зашмат выклікаў функцыі #time',
 254+ 'pfunc_rel2abs_invalid_depth' => 'Памылка: няслушная глыбіня шляху: «$1» (спроба доступу да вузла, які знаходзіцца вышэй карэннага)',
 255+ 'pfunc_expr_stack_exhausted' => 'Памылка выразу: стэк перапоўнены',
 256+ 'pfunc_expr_unexpected_number' => 'Памылка выразу: нечаканая лічба',
 257+ 'pfunc_expr_preg_match_failure' => 'Памылка выразу: нечаканая памылка preg_match',
 258+ 'pfunc_expr_unrecognised_word' => 'Памылка выразу: нераспазнанае слова «$1»',
 259+ 'pfunc_expr_unexpected_operator' => 'Памылка выразу: нечаканы апэратар $1',
 260+ 'pfunc_expr_missing_operand' => 'Памылка выразу: няма апэранду $1',
 261+ 'pfunc_expr_unexpected_closing_bracket' => 'Памылка выразу: нечаканая закрываючая дужка',
 262+ 'pfunc_expr_unrecognised_punctuation' => 'Памылка выразу: нераспазнаны сымбаль пунктуацыі «$1»',
 263+ 'pfunc_expr_unclosed_bracket' => 'Памылка выразу: незакрытая дужка',
 264+ 'pfunc_expr_division_by_zero' => 'Дзяленьне на нуль',
 265+ 'pfunc_expr_invalid_argument' => 'Памылковы аргумэнт для $1: < -1 ці > 1',
 266+ 'pfunc_expr_invalid_argument_ln' => 'Памылковы аргумэнт для ln: <= 0',
 267+ 'pfunc_expr_unknown_error' => 'Памылка выразу: невядомая памылка ($1)',
 268+ 'pfunc_expr_not_a_number' => 'У $1: вынік не зьяўляецца лічбай',
 269+ 'pfunc_string_too_long' => 'Памылка: у радку перавышаны ліміт $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}',
 270+);
 271+
 272+/** Bulgarian (Български)
 273+ * @author DCLXVI
 274+ * @author Spiritia
 275+ */
 276+$messages['bg'] = array(
 277+ 'pfunc_desc' => 'Подобрвяване на парсера с логически функции',
 278+ 'pfunc_time_error' => 'Грешка: невалидно време',
 279+ 'pfunc_time_too_long' => 'Грешка: Твърде много извиквания на #time',
 280+ 'pfunc_rel2abs_invalid_depth' => 'Грешка: Невалидна дълбочина в път: "$1" (опит за достъп на възел над корена)',
 281+ 'pfunc_expr_stack_exhausted' => 'Грешка в записа: Стекът е изчерпан',
 282+ 'pfunc_expr_unexpected_number' => 'Грешка в записа: Неочаквано число',
 283+ 'pfunc_expr_preg_match_failure' => 'Грешка в израза: Неочакван проблем с preg_match',
 284+ 'pfunc_expr_unrecognised_word' => 'Грешка в записа: Неразпозната дума "$1"',
 285+ 'pfunc_expr_unexpected_operator' => 'Грешка в записа: Неочакван оператор $1',
 286+ 'pfunc_expr_missing_operand' => 'Грешка в записа: Липсващ операнд в $1',
 287+ 'pfunc_expr_unexpected_closing_bracket' => 'Грешка в записа: Една затваряща скоба в повече',
 288+ 'pfunc_expr_unrecognised_punctuation' => 'Грешка в записа: Неразпознат пунктуационен знак "$1"',
 289+ 'pfunc_expr_unclosed_bracket' => 'Грешка в записа: Незатворена скоба',
 290+ 'pfunc_expr_division_by_zero' => 'Деление на нула',
 291+ 'pfunc_expr_invalid_argument' => 'Невалиден аргумент за $1: < -1 или > 1',
 292+ 'pfunc_expr_invalid_argument_ln' => 'Невалиден аргумент за ln: <= 0',
 293+ 'pfunc_expr_unknown_error' => 'Грешка в записа: Неразпозната грешка ($1)',
 294+ 'pfunc_expr_not_a_number' => 'В $1: резултатът не е число',
 295+ 'pfunc_string_too_long' => 'Грешка: Низът превишава лимита от $1 знака',
 296+);
 297+
 298+/** Bengali (বাংলা)
 299+ * @author Bellayet
 300+ * @author Zaheen
 301+ */
 302+$messages['bn'] = array(
 303+ 'pfunc_desc' => 'লজিকাল ফাংশন দিয়ে পার্সারকে উন্নত করুন',
 304+ 'pfunc_time_error' => 'ত্রুটি: অবৈধ সময়',
 305+ 'pfunc_time_too_long' => 'ত্রুটি: অত্যধিক সংখ্যক #time কল',
 306+ 'pfunc_rel2abs_invalid_depth' => 'ত্রুটি: পাথে অবৈধ গভীরতা: "$1" (মূল নোডের উপরের একটি নোড অ্যাক্সেস করতে চেষ্টা করেছিল)',
 307+ 'pfunc_expr_stack_exhausted' => 'এক্সপ্রেশন ত্রুটি: স্ট্যাক শেষ হয়ে গেছে',
 308+ 'pfunc_expr_unexpected_number' => 'এক্সপ্রেশন ত্রুটি: অযাচিত সংখ্যা',
 309+ 'pfunc_expr_preg_match_failure' => 'এক্সপ্রেশন ত্রুটি: অযাচিত preg_match ব্যর্থতা',
 310+ 'pfunc_expr_unrecognised_word' => 'এক্সপ্রেশন ত্রুটি: অপরিচিত শব্দ "$1"',
 311+ 'pfunc_expr_unexpected_operator' => 'এক্সপ্রেশন ত্রুটি: অযাচিত $1 অপারেটর',
 312+ 'pfunc_expr_missing_operand' => 'এক্সপ্রেশন ত্রুটি: $1-এর জন্য অপারেন্ড নেই।',
 313+ 'pfunc_expr_unexpected_closing_bracket' => 'এক্সপ্রেশন ত্রুটি: অযাচিত সমাপ্তকারী বন্ধনী',
 314+ 'pfunc_expr_unrecognised_punctuation' => 'এক্সপ্রেশন ত্রুটি: অপরিচিত বিরামচিহ্ন ক্যারেক্টার "$1"',
 315+ 'pfunc_expr_unclosed_bracket' => 'এক্সপ্রেশন ত্রুটি: উন্মুক্ত বন্ধনী',
 316+ 'pfunc_expr_division_by_zero' => 'শূন্য দ্বারা ভাগ করা হয়েছে',
 317+ 'pfunc_expr_invalid_argument' => '$1 এর জন্য ভুল শর্ত: < -1 অথবা > 1',
 318+ 'pfunc_expr_invalid_argument_ln' => 'ln এর জন্য অসিদ্ধ শর্ত: <= 0',
 319+ 'pfunc_expr_unknown_error' => 'এক্সপ্রেশন ত্রুটি: অজানা ত্রুটি ($1)',
 320+ 'pfunc_expr_not_a_number' => '$1: এ ফলাফল কোন সংখ্যা নয়',
 321+);
 322+
 323+/** Breton (Brezhoneg)
 324+ * @author Fulup
 325+ */
 326+$messages['br'] = array(
 327+ 'pfunc_desc' => "Gwellaat a ra ar parser gant arc'hwelioù poellek",
 328+ 'pfunc_time_error' => 'Fazi : pad direizh',
 329+ 'pfunc_time_too_long' => 'Fazi : betek re eo bet galvet #time',
 330+ 'pfunc_rel2abs_invalid_depth' => "Fazi : Donder direizh evit an hent : \"\$1\" (klasket ez eus bet mont d'ul live a-us d'ar c'havlec'h-mamm)",
 331+ 'pfunc_expr_stack_exhausted' => 'Kemennad faziek : pil riñset',
 332+ 'pfunc_expr_unexpected_number' => "Kemennad faziek : niver dic'hortoz",
 333+ 'pfunc_expr_preg_match_failure' => "Kemennad faziek : c'hwitadenn dic'hortoz evit <code>preg_match</code>",
 334+ 'pfunc_expr_unrecognised_word' => 'Kemennad faziek : Ger dianav "$1"',
 335+ 'pfunc_expr_unexpected_operator' => 'Kemennad faziek : Oberier $1 dianav',
 336+ 'pfunc_expr_missing_operand' => 'Kemennad faziek : Dianav eo operand $1',
 337+ 'pfunc_expr_unexpected_closing_bracket' => "Kemennad faziek : Krommell zehoù dic'hortoz",
 338+ 'pfunc_expr_unrecognised_punctuation' => 'Kemennad faziek : arouezenn boentadouiñ dianav "$1"',
 339+ 'pfunc_expr_unclosed_bracket' => 'Kemennad faziek : Krommell zigor',
 340+ 'pfunc_expr_division_by_zero' => 'Rannañ dre mann',
 341+ 'pfunc_expr_invalid_argument' => 'Talvoudenn direizh evit $1: < -1 pe > 1',
 342+ 'pfunc_expr_invalid_argument_ln' => 'Talvoudenn direizh evit ln: <= 0',
 343+ 'pfunc_expr_unknown_error' => 'Kemennad faziek : Fazi dianav ($1)',
 344+ 'pfunc_expr_not_a_number' => "E $1: An disoc'h n'eo ket un niver",
 345+ 'pfunc_string_too_long' => "Fazi : Dreist d'ar vevenn uhelañ a $1 arouezenn eo an neudennad",
 346+);
 347+
 348+/** Bosnian (Bosanski)
 349+ * @author CERminator
 350+ * @author Seha
 351+ */
 352+$messages['bs'] = array(
 353+ 'pfunc_desc' => 'Povisi parser sa logičnim funkcijama',
 354+ 'pfunc_time_error' => 'Greška: vrijeme nije valjano',
 355+ 'pfunc_time_too_long' => 'Greška: previše poziva funkcije #time',
 356+ 'pfunc_rel2abs_invalid_depth' => 'Graška: Nevrijedeća dubina u putu: "$1" (pokušaj dolaska na nula tačku iza korijenske nula tačke)',
 357+ 'pfunc_expr_stack_exhausted' => 'Greška izraza: Stok potrošen',
 358+ 'pfunc_expr_unexpected_number' => 'Greška izraza: Neočekivani broj',
 359+ 'pfunc_expr_preg_match_failure' => 'Razvojna greška: Neočekivana greška preg-pogotka',
 360+ 'pfunc_expr_unrecognised_word' => 'Greška izraza: Nepoznata riječ "$1"',
 361+ 'pfunc_expr_unexpected_operator' => 'Greška izraza: Neočekivani $1 operator',
 362+ 'pfunc_expr_missing_operand' => 'Greška izraza: Nedostaje operator za $1',
 363+ 'pfunc_expr_unexpected_closing_bracket' => 'Greška izraza: Neočekivana zagrada zatvaranja',
 364+ 'pfunc_expr_unrecognised_punctuation' => 'Razvojna greška: Nije prepoznat karakter punktacije "$1"',
 365+ 'pfunc_expr_unclosed_bracket' => 'Greška izraza: Nezatvorena zagrada',
 366+ 'pfunc_expr_division_by_zero' => 'Dijeljenje s nulom',
 367+ 'pfunc_expr_invalid_argument' => 'Nevažeći argument za $1: : < -1 ili > 1',
 368+ 'pfunc_expr_invalid_argument_ln' => 'Nevažeći argument za ln: <= 0',
 369+ 'pfunc_expr_unknown_error' => 'Razvojna greška: Nepoznata greška ($1)',
 370+ 'pfunc_expr_not_a_number' => 'u $1: rezultat nije broj',
 371+ 'pfunc_string_too_long' => 'Greška: Niz prelazi limit od $1 znakova',
 372+);
 373+
 374+/** Catalan (Català)
 375+ * @author Jordi Roqué
 376+ * @author Qllach
 377+ * @author SMP
 378+ */
 379+$messages['ca'] = array(
 380+ 'pfunc_desc' => 'Millora el processat amb funcions lògiques',
 381+ 'pfunc_time_error' => 'Error: temps invàlid',
 382+ 'pfunc_time_too_long' => 'Error: massa crides #time',
 383+ 'pfunc_rel2abs_invalid_depth' => "Error: Adreça invàlida al directori: «$1» (s'intentava accedir a un node superior de l'arrel)",
 384+ 'pfunc_expr_stack_exhausted' => "Error de l'expressió: Pila exhaurida",
 385+ 'pfunc_expr_unexpected_number' => "Error de l'expressió: Nombre inesperat",
 386+ 'pfunc_expr_preg_match_failure' => "Error de l'expressió: Error de funció no compresa i inesperada",
 387+ 'pfunc_expr_unrecognised_word' => 'Error de l\'expressió: Paraula no reconeguda "$1"',
 388+ 'pfunc_expr_unexpected_operator' => "Error de l'expressió: Operador $1 inesperat",
 389+ 'pfunc_expr_missing_operand' => "Error de l'expressió: Falta l'operand de $1",
 390+ 'pfunc_expr_unexpected_closing_bracket' => "Error de l'expressió: Parèntesi inesperat",
 391+ 'pfunc_expr_unrecognised_punctuation' => 'Error de l\'expressió: Signe de puntuació no reconegut "$1"',
 392+ 'pfunc_expr_unclosed_bracket' => "Error de l'expressió: Parèntesi no tancat",
 393+ 'pfunc_expr_division_by_zero' => 'Divisió entre zero',
 394+ 'pfunc_expr_invalid_argument' => 'Valor no vàlid per a $1: < -1 ó > 1',
 395+ 'pfunc_expr_invalid_argument_ln' => 'Valor no vàlid per a ln: <= 0',
 396+ 'pfunc_expr_unknown_error' => "Error de l'expressió: Desconegut ($1)",
 397+ 'pfunc_expr_not_a_number' => 'A $1: el resultat no és un nombre',
 398+ 'pfunc_string_too_long' => 'Error: La cadena és $1 caràcters massa llarga',
 399+);
 400+
 401+/** Chechen (Нохчийн)
 402+ * @author Sasan700
 403+ */
 404+$messages['ce'] = array(
 405+ 'pfunc_expr_stack_exhausted' => 'Яздарехь гlалат ду: хьаладуьззина татол',
 406+ 'pfunc_expr_unrecognised_word' => 'Яздарехь гlалат ду: дойзуш доцу дош «$1»',
 407+);
 408+
 409+/** Czech (Česky)
 410+ * @author Danny B.
 411+ * @author Li-sung
 412+ * @author Matěj Grabovský
 413+ * @author Mormegil
 414+ * @author Sp5uhe
 415+ */
 416+$messages['cs'] = array(
 417+ 'pfunc_desc' => 'Rozšíření parseru o logické funkce',
 418+ 'pfunc_time_error' => 'Chyba: neplatný čas',
 419+ 'pfunc_time_too_long' => 'Chyba: příliš mnoho volání #time',
 420+ 'pfunc_rel2abs_invalid_depth' => 'Chyba: Neplatná hloubka v cestě: "$1" (pokus o přístup do uzlu vyššího než kořen)',
 421+ 'pfunc_expr_stack_exhausted' => 'Chyba ve výrazu: Zásobník plně obsazen',
 422+ 'pfunc_expr_unexpected_number' => 'Chyba ve výrazu: Očekáváno číslo',
 423+ 'pfunc_expr_preg_match_failure' => 'Chyba ve výrazu: Neočekávaná chyba funkce preg_match',
 424+ 'pfunc_expr_unrecognised_word' => 'Chyba ve výrazu: Nerozpoznané slovo ˆ„$1“',
 425+ 'pfunc_expr_unexpected_operator' => 'Chyba ve výrazu: Neočekávaný operátor $1',
 426+ 'pfunc_expr_missing_operand' => 'Chyba ve výrazu: Chybí operand pro $1',
 427+ 'pfunc_expr_unexpected_closing_bracket' => 'Chyba ve výrazu: Neočekávaná uzavírací závorka',
 428+ 'pfunc_expr_unrecognised_punctuation' => 'Chyba ve výrazu: Nerozpoznaný interpunkční znak ˆ„$1“',
 429+ 'pfunc_expr_unclosed_bracket' => 'Chyba ve výrazu: Neuzavřené závorky',
 430+ 'pfunc_expr_division_by_zero' => 'Dělení nulou',
 431+ 'pfunc_expr_invalid_argument' => 'Neplatný argument pro $1: < -1 nebo > 1',
 432+ 'pfunc_expr_invalid_argument_ln' => 'Neplatný argument pro ln: <= 0',
 433+ 'pfunc_expr_unknown_error' => 'Chyba ve výrazu: Neznámá chyba ($1)',
 434+ 'pfunc_expr_not_a_number' => 'V $1: výsledkem není číslo',
 435+ 'pfunc_string_too_long' => 'Chyba: Řetězec je delší než $1 {{PLURAL:$1|znak|znaky|znaků}}, což je limit',
 436+);
 437+
 438+/** Danish (Dansk)
 439+ * @author Byrial
 440+ * @author Morten LJ
 441+ */
 442+$messages['da'] = array(
 443+ 'pfunc_desc' => 'Udvider parser med logiske funktioner',
 444+ 'pfunc_time_error' => 'Fejl: Ugyldig tid',
 445+ 'pfunc_time_too_long' => 'Felj: for mange kald af #time',
 446+ 'pfunc_rel2abs_invalid_depth' => 'Fejl: Ugyldig dybde i sti: "$1" (prøvede at tilgå en knude over rodknuden)',
 447+ 'pfunc_expr_stack_exhausted' => 'Udtryksfejl: Stak tømt',
 448+ 'pfunc_expr_unexpected_number' => 'Fejl: Uventet tal',
 449+ 'pfunc_expr_preg_match_failure' => 'Udtryksfejl: Uventet fejl i preg_match',
 450+ 'pfunc_expr_unrecognised_word' => 'Udtryksfejl: Uventet ord "$1"',
 451+ 'pfunc_expr_unexpected_operator' => 'Udtryksfejl: Uventet "$1"-operator',
 452+ 'pfunc_expr_missing_operand' => 'Udtryksfejl: Manglende operand til $1',
 453+ 'pfunc_expr_unexpected_closing_bracket' => 'Udtryksfejl: Uventet lukkende parentes',
 454+ 'pfunc_expr_unrecognised_punctuation' => 'Udtryksfejl: Uventet tegnsætning-tegn: "$1"',
 455+ 'pfunc_expr_unclosed_bracket' => 'Udtryksfejl: Uafsluttet kantet parantes',
 456+ 'pfunc_expr_division_by_zero' => 'Division med nul',
 457+ 'pfunc_expr_invalid_argument' => 'Ugyldigt argument for $1: < -1 eller > 1',
 458+ 'pfunc_expr_invalid_argument_ln' => 'Ugyldigt argument for ln: <= 0',
 459+ 'pfunc_expr_unknown_error' => 'Udtryksfejl: Ukendt fejl ($1)',
 460+ 'pfunc_expr_not_a_number' => 'I $1: Resultatet er ikke et tal',
 461+ 'pfunc_string_too_long' => 'Feil: Strengen overskrider grænsen på $1 tegn',
 462+);
 463+
 464+/** German (Deutsch)
 465+ * @author LWChris
 466+ * @author Metalhead64
 467+ * @author Raimond Spekking
 468+ */
 469+$messages['de'] = array(
 470+ 'pfunc_desc' => 'Erweitert den Parser um logische Funktionen',
 471+ 'pfunc_time_error' => 'Fehler: ungültige Zeitangabe',
 472+ 'pfunc_time_too_long' => 'Fehler: zu viele #time-Aufrufe',
 473+ 'pfunc_rel2abs_invalid_depth' => 'Fehler: ungültige Tiefe in Pfad: „$1“ (Versuch, auf einen Knotenpunkt oberhalb des Hauptknotenpunktes zuzugreifen)',
 474+ 'pfunc_expr_stack_exhausted' => 'Expression-Fehler: Stacküberlauf',
 475+ 'pfunc_expr_unexpected_number' => 'Expression-Fehler: Unerwartete Zahl',
 476+ 'pfunc_expr_preg_match_failure' => 'Expression-Fehler: Unerwartete „preg_match“-Fehlfunktion',
 477+ 'pfunc_expr_unrecognised_word' => 'Expression-Fehler: Unerkanntes Wort „$1“',
 478+ 'pfunc_expr_unexpected_operator' => 'Expression-Fehler: Unerwarteter Operator <tt>$1</tt>',
 479+ 'pfunc_expr_missing_operand' => 'Expression-Fehler: Fehlender Operand für <tt>$1</tt>',
 480+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Fehler: Unerwartete schließende eckige Klammer',
 481+ 'pfunc_expr_unrecognised_punctuation' => 'Expression-Fehler: Unerkanntes Satzzeichen „$1“',
 482+ 'pfunc_expr_unclosed_bracket' => 'Expression-Fehler: Nicht geschlossene eckige Klammer',
 483+ 'pfunc_expr_division_by_zero' => 'Division durch Null',
 484+ 'pfunc_expr_invalid_argument' => 'Ungültiges Argument für $1: < -1 oder > 1',
 485+ 'pfunc_expr_invalid_argument_ln' => 'Ungültiges Argument für ln: <= 0',
 486+ 'pfunc_expr_unknown_error' => 'Expression-Fehler: Unbekannter Fehler ($1)',
 487+ 'pfunc_expr_not_a_number' => 'In $1: Ergebnis ist keine Zahl',
 488+ 'pfunc_string_too_long' => 'Fehler: Zeichenkette überschreitet Zeichenlimit von $1',
 489+);
 490+
 491+/** Swiss High German (Schweizer Hochdeutsch)
 492+ * @author MichaelFrey
 493+ */
 494+$messages['de-ch'] = array(
 495+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Fehler: Unerwartete schliessende eckige Klammer',
 496+);
 497+
 498+/** Zazaki (Zazaki)
 499+ * @author Aspar
 500+ */
 501+$messages['diq'] = array(
 502+ 'pfunc_desc' => 'Enhance parser with logical functions',
 503+ 'pfunc_time_error' => 'xeta: zemano nemeqbul',
 504+ 'pfunc_time_too_long' => 'xeta:zaf zêd mesajê #timeyi',
 505+ 'pfunc_rel2abs_invalid_depth' => 'Hata: Yolda geçersiz derinlik: "$1" (kök düğümünün üstünde bir düğüme erişmeye çalıştı)',
 506+ 'pfunc_expr_stack_exhausted' => 'xetaya ifadeyi: stack qediya',
 507+ 'pfunc_expr_unexpected_number' => 'xetaya ifadeyi: amaro bêtexmin',
 508+ 'pfunc_expr_preg_match_failure' => 'xetaya ifadeyi: arızaya preg_matchi yo bêtexmin',
 509+ 'pfunc_expr_unrecognised_word' => 'xetaya ifadeyi: çekuya "$1"i nêşinasiyeno',
 510+ 'pfunc_expr_unexpected_operator' => 'xetaya ifadeyi: operatorê $1i yo bêtexmin',
 511+ 'pfunc_expr_missing_operand' => 'xetaya ifadeyi: qey $1i termo kêm',
 512+ 'pfunc_expr_unexpected_closing_bracket' => 'xetaya ifadeyi: parantez bıqefelno bêtexmin',
 513+ 'pfunc_expr_unrecognised_punctuation' => 'xetaya ifadeyi: karakterê noqtakerdışê "$1"i yo ke nêşınasiyeno',
 514+ 'pfunc_expr_unclosed_bracket' => 'xetaya ifadeyi: parantezo nêqefelnaye',
 515+ 'pfunc_expr_division_by_zero' => 'pê sıfır teqsim ker',
 516+ 'pfunc_expr_invalid_argument' => 'Invalid argument for $1: < -1 or > 1',
 517+ 'pfunc_expr_invalid_argument_ln' => 'Invalid argument for ln: <= 0',
 518+ 'pfunc_expr_unknown_error' => 'xetaya ifadeyi: neticeya ke nêzaniyena ($1)',
 519+ 'pfunc_expr_not_a_number' => '$1 de: netice yew amar niyo',
 520+ 'pfunc_string_too_long' => 'xeta: rêze heddê karakteri yo $1i veciyaya',
 521+);
 522+
 523+/** Lower Sorbian (Dolnoserbski)
 524+ * @author Michawiki
 525+ */
 526+$messages['dsb'] = array(
 527+ 'pfunc_desc' => 'Rozšyrja parser wó logiske funkcije',
 528+ 'pfunc_time_error' => 'Zmólka: njepłaśiwy cas',
 529+ 'pfunc_time_too_long' => 'Zmólka: pśewjele zawołanjow #time',
 530+ 'pfunc_rel2abs_invalid_depth' => 'Zmólka: Njepłaśiwy dłym w sćažce: "$1" (wopyt na suk pśistup měś, kótaryž jo wušej kórjenjowego suka)',
 531+ 'pfunc_expr_stack_exhausted' => 'Wurazowa zmólka: Stack wupócerany',
 532+ 'pfunc_expr_unexpected_number' => 'Wurazowa zmólka: Njewócakana licba',
 533+ 'pfunc_expr_preg_match_failure' => 'Wurazowa zmólka: Njewócakana zmólkata funkcija preg_match',
 534+ 'pfunc_expr_unrecognised_word' => 'Wurazowa zmólka: Njespóznane słowo "$1"',
 535+ 'pfunc_expr_unexpected_operator' => 'Wurazowa zmólka: Njewócakany opeator $1',
 536+ 'pfunc_expr_missing_operand' => 'Wurazowa zmólka: Felujucy operand za $1',
 537+ 'pfunc_expr_unexpected_closing_bracket' => 'Wurazowa zmólka: Njewócakana kóńcajuca rožkata spinka',
 538+ 'pfunc_expr_unrecognised_punctuation' => 'Wurazowa zmólka: Njespóznane interpunkciske znamuško "$1"',
 539+ 'pfunc_expr_unclosed_bracket' => 'Wurazowa zmólka: Žedna kóńcajuca spinka',
 540+ 'pfunc_expr_division_by_zero' => 'Diwizija pśez nul',
 541+ 'pfunc_expr_invalid_argument' => 'Njepłaśiwy argument $1: < -1 abo > 1',
 542+ 'pfunc_expr_invalid_argument_ln' => 'Njepłaśiwy argument za ln: <= 0',
 543+ 'pfunc_expr_unknown_error' => 'Wurazowa zmólka: Njeznata zmólka ($1)',
 544+ 'pfunc_expr_not_a_number' => 'W $1: wuslědk njejo licba',
 545+ 'pfunc_string_too_long' => 'Zmólka: Znamješkowy rěd pśekčaca limit $1 znamješkow',
 546+);
 547+
 548+/** Greek (Ελληνικά)
 549+ * @author Consta
 550+ * @author Dead3y3
 551+ * @author Omnipaedista
 552+ * @author Απεργός
 553+ */
 554+$messages['el'] = array(
 555+ 'pfunc_desc' => 'Βελτιώνει το συντακτικό αναλυτή με λογικές συναρτήσεις',
 556+ 'pfunc_time_error' => 'Σφάλμα: άκυρος χρόνος',
 557+ 'pfunc_time_too_long' => 'Σφάλμα: πάρα πολλές κλήσεις της #time',
 558+ 'pfunc_rel2abs_invalid_depth' => 'Σφάλμα: Άκυρο βάθος στη διαδρομή: «$1» (έγινε προσπάθεια για πρόσβαση σε έναν κόμβο πάνω από τον ριζικό κόμβο)',
 559+ 'pfunc_expr_stack_exhausted' => 'Σφάλμα έκφρασης: Η στοίβα εξαντλήθηκε',
 560+ 'pfunc_expr_unexpected_number' => 'Σφάλμα έκφρασης: Μη αναμενόμενος αριθμός',
 561+ 'pfunc_expr_preg_match_failure' => 'Σφάλμα έκφρασης: Μη αναμενόμενη αποτυχία preg_match',
 562+ 'pfunc_expr_unrecognised_word' => 'Σφάλμα έκφρασης: Μη αναγνωρίσιμη λέξη "$1"',
 563+ 'pfunc_expr_unexpected_operator' => 'Σφάλμα έκφρασης: Μη αναμενόμενος τελεστής $1',
 564+ 'pfunc_expr_missing_operand' => 'Σφάλμα έκφρασης: Λείπει ο τελεστέος για την έκφραση $1',
 565+ 'pfunc_expr_unexpected_closing_bracket' => 'Σφάλμα έκφρασης: Μη αναμενόμενη αγκύλη κλεισίματος',
 566+ 'pfunc_expr_unrecognised_punctuation' => 'Σφάλμα έκφρασης: Μη αναγνρίσμος χαρακτήρας στίξης "$1"',
 567+ 'pfunc_expr_unclosed_bracket' => 'Σφάλμα έκφρασης: Αγκύλη χωρίς κλείσιμο',
 568+ 'pfunc_expr_division_by_zero' => 'Διαίρεση με το μηδέν',
 569+ 'pfunc_expr_invalid_argument' => 'Άκυρη παράμετρος για το $1: < -1 ή > 1',
 570+ 'pfunc_expr_invalid_argument_ln' => 'Άκυρη παράμετρος για το ln: <= 0',
 571+ 'pfunc_expr_unknown_error' => 'Σφάλμα έκφρασης: Άγνωστο σφάλμα ($1)',
 572+ 'pfunc_expr_not_a_number' => 'Στο $1: το αποτέλεσμα δεν είναι αριθμός',
 573+ 'pfunc_string_too_long' => 'Σφάλμα: ο ορμαθός υπερβαίνει $1 το όριο χαρακτήρων',
 574+);
 575+
 576+/** Esperanto (Esperanto)
 577+ * @author Yekrats
 578+ */
 579+$messages['eo'] = array(
 580+ 'pfunc_desc' => 'Etendi sintaksan analizilon kun logikaj funkcioj',
 581+ 'pfunc_time_error' => 'Eraro: malvalida tempo',
 582+ 'pfunc_time_too_long' => "Eraro: tro da vokoj ''#time''",
 583+ 'pfunc_rel2abs_invalid_depth' => 'Eraro: Malvalida profundo en vojo: "$1" (provis atingi nodon super la radika nodo)',
 584+ 'pfunc_expr_stack_exhausted' => 'Esprima eraro: Stako estis malplenigita',
 585+ 'pfunc_expr_unexpected_number' => 'Esprima eraro: Neatendita numeralo',
 586+ 'pfunc_expr_preg_match_failure' => 'Esprima eraro: Neatendita preg_match malsukceso',
 587+ 'pfunc_expr_unrecognised_word' => 'Esprima eraro: Nekonata vorto "$1"',
 588+ 'pfunc_expr_unexpected_operator' => 'Esprima eraro: Neatendita operacisimbolo $1',
 589+ 'pfunc_expr_missing_operand' => 'Esprima eraro: Mankas operando por $1',
 590+ 'pfunc_expr_unexpected_closing_bracket' => 'Esprima eraro: Neatendita ferma krampo',
 591+ 'pfunc_expr_unrecognised_punctuation' => 'Esprima eraro: Nekonata interpunkcia simbolo "$1"',
 592+ 'pfunc_expr_unclosed_bracket' => 'Esprima eraro: Malferma krampo',
 593+ 'pfunc_expr_division_by_zero' => 'Divido per nulo',
 594+ 'pfunc_expr_invalid_argument' => 'Malvalida argumento por $1: < -1 or > 1',
 595+ 'pfunc_expr_invalid_argument_ln' => 'Malvalida argumento por ln: <= 0',
 596+ 'pfunc_expr_unknown_error' => 'Esprima eraro: Nekonata eraro ($1)',
 597+ 'pfunc_expr_not_a_number' => 'En $1: rezulto ne estas nombro',
 598+ 'pfunc_string_too_long' => 'Eraro: Ĉeno preterpasas signo-limon $1',
 599+);
 600+
 601+/** Spanish (Español)
 602+ * @author Crazymadlover
 603+ * @author Muro de Aguas
 604+ * @author Remember the dot
 605+ * @author Sanbec
 606+ */
 607+$messages['es'] = array(
 608+ 'pfunc_desc' => 'Mejora el analizador lógico con funciones.',
 609+ 'pfunc_time_error' => 'Error con la expresión: Tiempo no válido',
 610+ 'pfunc_time_too_long' => 'Error con la expresión: se están utilizando demasiados "#time"',
 611+ 'pfunc_rel2abs_invalid_depth' => 'Error: Profundidad no válida en la ruta: «$1» (trataste de acceder a un nodo por encima de la raíz)',
 612+ 'pfunc_expr_stack_exhausted' => 'Error de expresión: Pila agotada',
 613+ 'pfunc_expr_unexpected_number' => 'Error con la expresión: Número no esperado',
 614+ 'pfunc_expr_preg_match_failure' => 'Error de expresión: Fracaso preg_match no esperado',
 615+ 'pfunc_expr_unrecognised_word' => 'Error con la expresión: La palabra "$1" no se reconoce',
 616+ 'pfunc_expr_unexpected_operator' => 'Error con la expresión: Operador $1 no esperado',
 617+ 'pfunc_expr_missing_operand' => 'Error con la expresión: Falta un operador para $1',
 618+ 'pfunc_expr_unexpected_closing_bracket' => 'Error con la expresión: Paréntesis de cierre no esperado',
 619+ 'pfunc_expr_unrecognised_punctuation' => 'Error con la expresión: Carácter de puntuación no reconocido "$1"',
 620+ 'pfunc_expr_unclosed_bracket' => 'Error con la expresión: Paréntesis sin cerrar',
 621+ 'pfunc_expr_division_by_zero' => 'División entre cero',
 622+ 'pfunc_expr_invalid_argument' => 'Argumento incorrecto para $1: < -1 ó > 1',
 623+ 'pfunc_expr_invalid_argument_ln' => 'Argumento incorrecto para ln: <= 0',
 624+ 'pfunc_expr_unknown_error' => 'Error con la expresión: Error desconocido ($1)',
 625+ 'pfunc_expr_not_a_number' => 'En $1: el resultado no es un número',
 626+ 'pfunc_string_too_long' => 'Error: la cadena excede el límite de $1 caracteres',
 627+);
 628+
 629+/** Estonian (Eesti)
 630+ * @author Pikne
 631+ */
 632+$messages['et'] = array(
 633+ 'pfunc_desc' => 'Laiendab parserit loogiliste funktsioonidega.',
 634+ 'pfunc_expr_division_by_zero' => 'Nulliga jagamine',
 635+);
 636+
 637+/** Basque (Euskara)
 638+ * @author Kobazulo
 639+ */
 640+$messages['eu'] = array(
 641+ 'pfunc_time_error' => 'Errorea: baliogabeko ordua',
 642+ 'pfunc_time_too_long' => 'Errorea: #time dei gehiegi',
 643+ 'pfunc_rel2abs_invalid_depth' => 'Errorea: Baliogabeko sakonera fitxategi bidean: "$1" (root puntutik gora sartzen saiatu da)',
 644+ 'pfunc_expr_division_by_zero' => 'Zeroz zatitu',
 645+);
 646+
 647+/** Persian (فارسی)
 648+ * @author Huji
 649+ * @author Wayiran
 650+ */
 651+$messages['fa'] = array(
 652+ 'pfunc_desc' => 'به تجزیه‌گر، دستورهای منطقی می‌افزاید',
 653+ 'pfunc_time_error' => 'خطا: زمان غیرمجاز',
 654+ 'pfunc_time_too_long' => 'خطا: فراخوانی بیش از حد #time',
 655+ 'pfunc_rel2abs_invalid_depth' => 'خطا: عمق غیر مجاز در نشانی «$1» (تلاش برای دسترسی به یک نشانی فراتر از نشانی ریشه)',
 656+ 'pfunc_expr_stack_exhausted' => 'خطای عبارت: پشته از دست رفته',
 657+ 'pfunc_expr_unexpected_number' => 'خطای عبارت: عدد دور از انتظار',
 658+ 'pfunc_expr_preg_match_failure' => 'خطای عبارت: خطای preg_match دور از انتظار',
 659+ 'pfunc_expr_unrecognised_word' => 'خطای عبارت: کلمه ناشناخته «$1»',
 660+ 'pfunc_expr_unexpected_operator' => 'خطای عبارت: عملگر $1 دور از انتظار',
 661+ 'pfunc_expr_missing_operand' => 'خطای عبارت: عملگر گمشده برای $1',
 662+ 'pfunc_expr_unexpected_closing_bracket' => 'خطای عبارت: پرانتز بسته اضافی',
 663+ 'pfunc_expr_unrecognised_punctuation' => 'خطای عبارت: نویسه نقطه‌گذاری شناخته نشده «$1»',
 664+ 'pfunc_expr_unclosed_bracket' => 'خطای عبارت: پرانتز بسته‌نشده',
 665+ 'pfunc_expr_division_by_zero' => 'تقسیم بر صفر',
 666+ 'pfunc_expr_invalid_argument' => 'پارامتر غیر مجاز برای $1: < -۱ یا > ۱',
 667+ 'pfunc_expr_invalid_argument_ln' => 'پارامتر غیر مجاز برای لگاریتم طبیعی: <= صفر',
 668+ 'pfunc_expr_unknown_error' => 'خطای عبارت: خطای ناشناخته ($1)',
 669+ 'pfunc_expr_not_a_number' => 'در $1: نتیجه عدد نیست',
 670+ 'pfunc_string_too_long' => 'خطا: رشته از محدودیت نویسه‌ای $1 تجاوز می‌کند',
 671+);
 672+
 673+/** Finnish (Suomi)
 674+ * @author Agony
 675+ * @author Cimon Avaro
 676+ * @author Nike
 677+ */
 678+$messages['fi'] = array(
 679+ 'pfunc_desc' => 'Laajentaa jäsennintä loogisilla funktiolla.',
 680+ 'pfunc_time_error' => 'Virhe: kelvoton aika',
 681+ 'pfunc_time_too_long' => 'Virhe: liian monta #time-kutsua',
 682+ 'pfunc_rel2abs_invalid_depth' => 'Virhe: Virheellinen syvyys polussa: $1 (ei juurisolmun sisällä)',
 683+ 'pfunc_expr_stack_exhausted' => 'Virhe lausekkeessa: pino loppui',
 684+ 'pfunc_expr_unexpected_number' => 'Virhe lausekkeessa: odottamaton numero',
 685+ 'pfunc_expr_preg_match_failure' => 'Virhe lausekkeessa: <tt>preg_match</tt> palautti virheen',
 686+ 'pfunc_expr_unrecognised_word' => 'Virhe lausekkeessa: tunnistamaton sana ”$1”',
 687+ 'pfunc_expr_unexpected_operator' => 'Virhe lausekkeessa: odottamaton $1-operaattori',
 688+ 'pfunc_expr_missing_operand' => 'Virhe lausekkeessa: operaattorin $1 edellyttämä operandi puuttuu',
 689+ 'pfunc_expr_unexpected_closing_bracket' => 'Virhe lausekkeessa: odottamaton sulkeva sulkumerkki',
 690+ 'pfunc_expr_unrecognised_punctuation' => 'Virhe lausekkeessa: tunnistamaton välimerkki ”$1”',
 691+ 'pfunc_expr_unclosed_bracket' => 'Virhe ilmauksessa: sulkeva sulkumerkki puuttuu',
 692+ 'pfunc_expr_division_by_zero' => 'Virhe: Jako nollalla',
 693+ 'pfunc_expr_invalid_argument' => 'Virheellinen arvo $1: < -1 tai > 1',
 694+ 'pfunc_expr_invalid_argument_ln' => 'Virheellinen arvo funktiolle ln: <= 0',
 695+ 'pfunc_expr_unknown_error' => 'Virhe lausekkeessa: tuntematon virhe ($1)',
 696+ 'pfunc_expr_not_a_number' => 'Lausekkeessa $1: tulos ei ole luku',
 697+ 'pfunc_string_too_long' => 'Virhe: Merkkijono ylittää $1 merkin ylärajan',
 698+);
 699+
 700+/** French (Français)
 701+ * @author Crochet.david
 702+ * @author Grondin
 703+ * @author IAlex
 704+ * @author Sherbrooke
 705+ * @author Urhixidur
 706+ * @author Verdy p
 707+ */
 708+$messages['fr'] = array(
 709+ 'pfunc_desc' => 'Améliore le parseur avec des fonctions logiques',
 710+ 'pfunc_time_error' => 'Erreur : durée invalide',
 711+ 'pfunc_time_too_long' => 'Erreur : appels trop nombreux à <code>#time</code>',
 712+ 'pfunc_rel2abs_invalid_depth' => 'Erreur: profondeur invalide dans le chemin « $1 » (a essayé d’accéder à un niveau au-dessus du nœud racine)',
 713+ 'pfunc_expr_stack_exhausted' => 'Erreur d’expression : pile épuisée',
 714+ 'pfunc_expr_unexpected_number' => 'Erreur d’expression : nombre inattendu',
 715+ 'pfunc_expr_preg_match_failure' => 'Erreur d’expression : échec inattendu de <code>preg_match</code>',
 716+ 'pfunc_expr_unrecognised_word' => 'Erreur d’expression : mot « $1 » non reconnu',
 717+ 'pfunc_expr_unexpected_operator' => "Erreur d’expression : opérateur '''$1''' inattendu",
 718+ 'pfunc_expr_missing_operand' => "Erreur d’expression : opérande manquant pour '''$1'''",
 719+ 'pfunc_expr_unexpected_closing_bracket' => 'Erreur d’expression : parenthèse fermante inattendue',
 720+ 'pfunc_expr_unrecognised_punctuation' => 'Erreur d’expression : caractère de ponctuation « $1 » non reconnu',
 721+ 'pfunc_expr_unclosed_bracket' => 'Erreur d’expression : parenthèse non fermée',
 722+ 'pfunc_expr_division_by_zero' => 'Division par zéro',
 723+ 'pfunc_expr_invalid_argument' => "Argument incorrect pour '''$1''' : &lt; -1 ou &gt; 1",
 724+ 'pfunc_expr_invalid_argument_ln' => "Argument incorrect pour '''ln''' : ≤ 0",
 725+ 'pfunc_expr_unknown_error' => 'Erreur d’expression : erreur inconnue ($1)',
 726+ 'pfunc_expr_not_a_number' => 'Dans $1 : le résultat n’est pas un nombre',
 727+ 'pfunc_string_too_long' => 'Erreur : La chaîne dépasse la limite maximale de $1 caractère{{PLURAL:$1||s}}',
 728+);
 729+
 730+/** Franco-Provençal (Arpetan)
 731+ * @author ChrisPtDe
 732+ */
 733+$messages['frp'] = array(
 734+ 'pfunc_desc' => 'Mèlyore lo parsor avouéc des fonccions logiques.',
 735+ 'pfunc_time_error' => 'Èrror : temps envalido',
 736+ 'pfunc_time_too_long' => 'Èrror : trop grant nombro d’apèls a <code>#time</code>',
 737+ 'pfunc_rel2abs_invalid_depth' => 'Èrror : provondior envalida dens lo chemin « $1 » (at tâchiê d’arrevar a un nivél en-dessus du nuod racena)',
 738+ 'pfunc_expr_stack_exhausted' => 'Èrror d’èxprèssion : pila èpouesiê',
 739+ 'pfunc_expr_unexpected_number' => 'Èrror d’èxprèssion : nombro emprèvu',
 740+ 'pfunc_expr_preg_match_failure' => 'Èrror d’èxprèssion : falyita emprèvua de <code>preg_match</code>',
 741+ 'pfunc_expr_unrecognised_word' => 'Èrror d’èxprèssion : mot « $1 » pas recognu',
 742+ 'pfunc_expr_unexpected_operator' => 'Èrror d’èxprèssion : opèrator « $1 » emprèvu',
 743+ 'pfunc_expr_missing_operand' => 'Èrror d’èxprèssion : opèrando manquent por « $1 »',
 744+ 'pfunc_expr_unexpected_closing_bracket' => 'Èrror d’èxprèssion : parentèsa cllosenta emprèvua',
 745+ 'pfunc_expr_unrecognised_punctuation' => 'Èrror d’èxprèssion : caractèro de ponctuacion « $1 » pas recognu',
 746+ 'pfunc_expr_unclosed_bracket' => 'Èrror d’èxprèssion : parentèsa pas cllôsa',
 747+ 'pfunc_expr_division_by_zero' => 'Division per zérô',
 748+ 'pfunc_expr_invalid_argument' => 'Argument fôx por « $1 » : < -1 ou ben > 1',
 749+ 'pfunc_expr_invalid_argument_ln' => 'Argument fôx por « ln » : ≤ 0',
 750+ 'pfunc_expr_unknown_error' => 'Èrror d’èxprèssion : èrror encognua ($1)',
 751+ 'pfunc_expr_not_a_number' => 'Dens $1 : lo rèsultat est pas un nombro',
 752+ 'pfunc_string_too_long' => 'Èrror : la chêna dèpâsse la limita d’amont de $1 caractèro{{PLURAL:$1||s}}',
 753+);
 754+
 755+/** Galician (Galego)
 756+ * @author Alma
 757+ * @author Toliño
 758+ * @author Xosé
 759+ */
 760+$messages['gl'] = array(
 761+ 'pfunc_desc' => 'Mellora o analizador con funcións lóxicas',
 762+ 'pfunc_time_error' => 'Erro: hora non válida',
 763+ 'pfunc_time_too_long' => 'Erro: demasiadas chamadas #time',
 764+ 'pfunc_rel2abs_invalid_depth' => 'Erro: profundidade da ruta non válida: "$1" (tentouse acceder a un nodo por riba do nodo raíz)',
 765+ 'pfunc_expr_stack_exhausted' => 'Erro de expresión: pila esgotada',
 766+ 'pfunc_expr_unexpected_number' => 'Erro de expresión: número inesperado',
 767+ 'pfunc_expr_preg_match_failure' => 'Erro de expresión: fallo de preg_match inesperado',
 768+ 'pfunc_expr_unrecognised_word' => 'Erro de expresión: descoñécese a palabra "$1"',
 769+ 'pfunc_expr_unexpected_operator' => 'Erro de expresión: operador "$1" inesperado',
 770+ 'pfunc_expr_missing_operand' => 'Erro de expresión: falta un operador para $1',
 771+ 'pfunc_expr_unexpected_closing_bracket' => 'Erro de expresión: corchete de peche inesperado',
 772+ 'pfunc_expr_unrecognised_punctuation' => 'Erro de expresión: descoñécese o signo de puntuación "$1"',
 773+ 'pfunc_expr_unclosed_bracket' => 'Erro de expresión: paréntese sen pechar',
 774+ 'pfunc_expr_division_by_zero' => 'División por cero',
 775+ 'pfunc_expr_invalid_argument' => 'Argumento inválido para $1: < -1 ou > 1',
 776+ 'pfunc_expr_invalid_argument_ln' => 'Argumento inválido para ln: <= 0',
 777+ 'pfunc_expr_unknown_error' => 'Erro de expresión: erro descoñecido ($1)',
 778+ 'pfunc_expr_not_a_number' => 'En $1: o resultado non é un número',
 779+ 'pfunc_string_too_long' => 'Erro: a cadea excede o límite de $1 caracteres',
 780+);
 781+
 782+/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
 783+ * @author Omnipaedista
 784+ */
 785+$messages['grc'] = array(
 786+ 'pfunc_expr_division_by_zero' => 'Διαίρεσις διὰ τοῦ μηδενός',
 787+);
 788+
 789+/** Swiss German (Alemannisch)
 790+ * @author Als-Holder
 791+ */
 792+$messages['gsw'] = array(
 793+ 'pfunc_desc' => 'Erwyteret dr Parser um logischi Funktione',
 794+ 'pfunc_time_error' => 'Fähler: uugiltigi Zytaagab',
 795+ 'pfunc_time_too_long' => 'Fähler: z vyyl #time-Ufruef',
 796+ 'pfunc_rel2abs_invalid_depth' => 'Fähler: uugültigi Tiefi im Pfad: „$1“ (Versuech, uf e Chnotepunkt oberhalb vum Hauptchnotepunkt zuezgryfe)',
 797+ 'pfunc_expr_stack_exhausted' => 'Expression-Fähler: Stackiberlauf',
 798+ 'pfunc_expr_unexpected_number' => 'Expression-Fähler: Nit erwarteti Zahl',
 799+ 'pfunc_expr_preg_match_failure' => 'Expression-Fähler: Nit erwarteti „preg_match“-Fählfunktion',
 800+ 'pfunc_expr_unrecognised_word' => 'Expression-Fähler: Nit erkannt Wort „$1“',
 801+ 'pfunc_expr_unexpected_operator' => 'Expression-Fähler: Nit erwartete Operator: <tt>$1</tt>',
 802+ 'pfunc_expr_missing_operand' => 'Expression-Fähler: Operand fir <tt>$1</tt> fählt',
 803+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Fähler: Nit erwarteti schließendi eckigi Chlammere',
 804+ 'pfunc_expr_unrecognised_punctuation' => 'Expression-Fähler: Nit erkannt Satzzeiche „$1“',
 805+ 'pfunc_expr_unclosed_bracket' => 'Expression-Fähler: Nit gschlosseni eckige Chlammere',
 806+ 'pfunc_expr_division_by_zero' => 'Expression-Fähler: Division dur Null',
 807+ 'pfunc_expr_invalid_argument' => 'Nit giltig Argument fir $1: < -1 oder > 1',
 808+ 'pfunc_expr_invalid_argument_ln' => 'Nit giltig Argument fir ln: <= 0',
 809+ 'pfunc_expr_unknown_error' => 'Expression-Fähler: Nit bekannte Fehler ($1)',
 810+ 'pfunc_expr_not_a_number' => 'Expression-Fähler: In $1: Ergebnis isch kei Zahl',
 811+ 'pfunc_string_too_long' => 'Fähler: d Zeichechette het meh wie di zuelässig Zahl vu $1 Zeiche',
 812+);
 813+
 814+/** Hebrew (עברית) */
 815+$messages['he'] = array(
 816+ 'pfunc_desc' => 'הוספת פונקציות לוגיות למפענח',
 817+ 'pfunc_time_error' => 'שגיאה: זמן שגוי',
 818+ 'pfunc_time_too_long' => 'שגיאה: שימוש ב"#זמן" פעמים רבות מדי',
 819+ 'pfunc_rel2abs_invalid_depth' => 'שגיאה: עומק שגוי בנתיב: "$1" (ניסיון כניסה לצומת מעל צומת השורש)',
 820+ 'pfunc_expr_stack_exhausted' => 'שגיאה בביטוי: המחסנית מלאה',
 821+ 'pfunc_expr_unexpected_number' => 'שגיאה בביטוי: מספר בלתי צפוי',
 822+ 'pfunc_expr_preg_match_failure' => 'שגיאה בביטוי: כישלון בלתי צפוי של התאמת ביטוי רגולרי',
 823+ 'pfunc_expr_unrecognised_word' => 'שגיאה בביטוי: מילה בלתי מזוהה, "$1"',
 824+ 'pfunc_expr_unexpected_operator' => 'שגיאה בביטוי: אופרנד $1 בלתי צפוי',
 825+ 'pfunc_expr_missing_operand' => 'שגיאה בביטוי: חסר אופרנד ל־$1',
 826+ 'pfunc_expr_unexpected_closing_bracket' => 'שגיאה בביטוי: סוגריים סוגרים בלתי צפויים',
 827+ 'pfunc_expr_unrecognised_punctuation' => 'שגיאה בביטוי: תו פיסוק בלתי מזוהה, "$1"',
 828+ 'pfunc_expr_unclosed_bracket' => 'שגיאה בביטוי: סוגריים בלתי סגורים',
 829+ 'pfunc_expr_division_by_zero' => 'חלוקה באפס',
 830+ 'pfunc_expr_invalid_argument' => 'ארגומנט בלתי תקין לפונקציה $1: < -1 או > 1',
 831+ 'pfunc_expr_invalid_argument_ln' => 'ארגומנט בלתי תקין לפונקציה ln: <= 0',
 832+ 'pfunc_expr_unknown_error' => 'שגיאה בביטוי: שגיאה בלתי ידועה ($1)',
 833+ 'pfunc_expr_not_a_number' => 'התוצאה של $1 אינה מספר',
 834+ 'pfunc_string_too_long' => 'שגיאה: המחרוזת עוברת את גבול התווים המותר, $1',
 835+);
 836+
 837+/** Hindi (हिन्दी)
 838+ * @author Kaustubh
 839+ * @author Shyam
 840+ */
 841+$messages['hi'] = array(
 842+ 'pfunc_desc' => 'लॉजिकल कार्योंका इस्तेमाल करके पार्सर बढायें',
 843+ 'pfunc_time_error' => 'गलती: गलत समय',
 844+ 'pfunc_time_too_long' => 'गलती: बहुत सारे #time कॉल',
 845+ 'pfunc_rel2abs_invalid_depth' => 'गलती: पाथ में गलत गहराई: "$1" (रूट नोडके उपर वाले नोड खोजने की कोशीश की)',
 846+ 'pfunc_expr_stack_exhausted' => 'एक्स्प्रेशनमें गलती: स्टॅक खतम हो गया',
 847+ 'pfunc_expr_unexpected_number' => 'एक्स्प्रेशनमें गलती: अनपेक्षित संख्या',
 848+ 'pfunc_expr_preg_match_failure' => 'एक्स्प्रेशन गलती: अनपेक्षित preg_match रद्दीकरण',
 849+ 'pfunc_expr_unrecognised_word' => 'एक्स्प्रेशन गलती: अनिश्चित शब्द "$1"',
 850+ 'pfunc_expr_unexpected_operator' => 'एक्स्प्रेशन गलती: अनपेक्षित $1 ओपरेटर',
 851+ 'pfunc_expr_missing_operand' => 'एक्स्प्रेशन गलती: $1 का घटक मिला नहीं',
 852+ 'pfunc_expr_unexpected_closing_bracket' => 'एक्स्प्रेशन गलती: अनपेक्षित समाप्ति ब्रैकेट',
 853+ 'pfunc_expr_unrecognised_punctuation' => 'एक्स्प्रेशन गलती: अनपेक्षित उद्गार चिन्ह "$1"',
 854+ 'pfunc_expr_unclosed_bracket' => 'एक्स्प्रेशन गलती: ब्रैकेट बंद नहीं किया',
 855+ 'pfunc_expr_division_by_zero' => 'शून्य से भाग',
 856+ 'pfunc_expr_invalid_argument' => '$1: < -1 or > 1 के लिए अमान्य कथन',
 857+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 के लिए अमान्य कथन',
 858+ 'pfunc_expr_unknown_error' => 'एक्स्प्रेशन गलती: अज्ञात गलती ($1)',
 859+ 'pfunc_expr_not_a_number' => '$1 में: रिज़ल्ट संख्यामें नहीं हैं',
 860+);
 861+
 862+/** Croatian (Hrvatski)
 863+ * @author Dalibor Bosits
 864+ * @author Dnik
 865+ * @author Ex13
 866+ * @author SpeedyGonsales
 867+ */
 868+$messages['hr'] = array(
 869+ 'pfunc_desc' => 'Mogućnost proširivanja parsera logičkim funkcijama',
 870+ 'pfunc_time_error' => 'Greška: oblik vremena nije valjan',
 871+ 'pfunc_time_too_long' => 'Greška: prevelik broj #time (vremenskih) poziva',
 872+ 'pfunc_rel2abs_invalid_depth' => 'Greška: Nevaljana dubina putanje: "$1" (pokušaj pristupanja čvoru iznad korijenskog)',
 873+ 'pfunc_expr_stack_exhausted' => 'Greška u predlošku: prepunjen stog',
 874+ 'pfunc_expr_unexpected_number' => 'Greška u predlošku: Neočekivan broj',
 875+ 'pfunc_expr_preg_match_failure' => 'Greška u predlošku: Neočekivana preg_match greška',
 876+ 'pfunc_expr_unrecognised_word' => 'Greška u predlošku: Nepoznata riječ "$1"',
 877+ 'pfunc_expr_unexpected_operator' => 'Greška u predlošku: Neočekivani operator $1',
 878+ 'pfunc_expr_missing_operand' => 'Greška u predlošku: Operator $1 nedostaje',
 879+ 'pfunc_expr_unexpected_closing_bracket' => 'Greška u predlošku: Neočekivana zatvorena zagrada',
 880+ 'pfunc_expr_unrecognised_punctuation' => 'Greška u predlošku: Nepoznat interpunkcijski znak "$1"',
 881+ 'pfunc_expr_unclosed_bracket' => 'Greška u predlošku: Nezatvorene zagrade',
 882+ 'pfunc_expr_division_by_zero' => 'Dijeljenje s nulom',
 883+ 'pfunc_expr_invalid_argument' => 'Nevaljani argumenti za $1: < -1 ili > 1',
 884+ 'pfunc_expr_invalid_argument_ln' => 'Nevaljani argument za ln: <= 0',
 885+ 'pfunc_expr_unknown_error' => 'Greška u predlošku: Nepoznata greška ($1)',
 886+ 'pfunc_expr_not_a_number' => 'U $1: rezultat nije broj',
 887+ 'pfunc_string_too_long' => 'Greška: Niz prelazi ograničenje od $1 znakova',
 888+);
 889+
 890+/** Upper Sorbian (Hornjoserbsce)
 891+ * @author Michawiki
 892+ */
 893+$messages['hsb'] = array(
 894+ 'pfunc_desc' => 'Parser wo logiske funkcije rozšěrić',
 895+ 'pfunc_time_error' => 'Zmylk: njepłaćiwe časowe podaće',
 896+ 'pfunc_time_too_long' => 'Zmylk: přewjele zawołanjow #time',
 897+ 'pfunc_rel2abs_invalid_depth' => 'Zmylk: Njepłaćiwa hłubokosć w pućiku: "$1" (Pospyt, zo by na suk wyše hłowneho suka dohrabnyło)',
 898+ 'pfunc_expr_stack_exhausted' => 'Wurazowy zmylk: Staplowy skład wučerpany',
 899+ 'pfunc_expr_unexpected_number' => 'Wurazowy zmylk: Njewočakowana ličba',
 900+ 'pfunc_expr_preg_match_failure' => 'Wurazowy zmylk: Njewočakowana zmylna funkcija "preg_match"',
 901+ 'pfunc_expr_unrecognised_word' => 'Wurazowy zmylk: Njespóznate słowo "$1"',
 902+ 'pfunc_expr_unexpected_operator' => 'Wurazowy zmylk: Njewočakowany operator $1',
 903+ 'pfunc_expr_missing_operand' => 'Wurazowy zmylk: Falowacy operand za $1',
 904+ 'pfunc_expr_unexpected_closing_bracket' => 'Wurazowy zmylk: Njewočakowana kónčna róžkata spinka',
 905+ 'pfunc_expr_unrecognised_punctuation' => 'Wurazowy zmylk: Njespóznate interpunkciske znamješko "$1"',
 906+ 'pfunc_expr_unclosed_bracket' => 'Wurazowy zmylk: Njewotzamknjena róžkata spinka',
 907+ 'pfunc_expr_division_by_zero' => 'Diwizija přez nulu',
 908+ 'pfunc_expr_invalid_argument' => 'Njepłaćiwy argument za $1: < -1 abo > 1',
 909+ 'pfunc_expr_invalid_argument_ln' => 'Njepłaćiwy argument za ln: <= 0',
 910+ 'pfunc_expr_unknown_error' => 'Wurazowy zmylk: Njeznaty zmylk ($1)',
 911+ 'pfunc_expr_not_a_number' => 'W $1: Wuslědk ličba njeje',
 912+ 'pfunc_string_too_long' => 'Zmylk: Znamješkowy slěd překročuje limit $1 znamješkow',
 913+);
 914+
 915+/** Hungarian (Magyar)
 916+ * @author Dani
 917+ */
 918+$messages['hu'] = array(
 919+ 'pfunc_desc' => 'Az értelmező kiegészítése logikai funkciókkal',
 920+ 'pfunc_time_error' => 'Hiba: érvénytelen idő',
 921+ 'pfunc_time_too_long' => 'Hiba: a #time túl sokszor lett meghívva',
 922+ 'pfunc_rel2abs_invalid_depth' => 'Hiba: nem megfelelő a mélység az elérési útban: „$1” (egy olyan csomópontot akartál elérni, amely a gyökércsomópont felett van)',
 923+ 'pfunc_expr_stack_exhausted' => 'Hiba a kifejezésben: a verem kiürült',
 924+ 'pfunc_expr_unexpected_number' => 'Hiba a kifejezésben: nem várt szám',
 925+ 'pfunc_expr_preg_match_failure' => 'Hiba a kifejezésben: a preg_match váratlanul hibát jelzett',
 926+ 'pfunc_expr_unrecognised_word' => 'Hiba a kifejezésben: ismeretlen „$1” szó',
 927+ 'pfunc_expr_unexpected_operator' => 'Hiba a kifejezésben: nem várt $1 operátor',
 928+ 'pfunc_expr_missing_operand' => 'Hiba a kifejezésben: $1 egyik operandusa hiányzik',
 929+ 'pfunc_expr_unexpected_closing_bracket' => 'Hiba a kifejezésben: nem várt zárójel',
 930+ 'pfunc_expr_unrecognised_punctuation' => 'Hiba a kifejezésben: ismeretlen „$1” központozó karakter',
 931+ 'pfunc_expr_unclosed_bracket' => 'Hiba a kifejezésben: lezáratlan zárójel',
 932+ 'pfunc_expr_division_by_zero' => 'Nullával való osztás',
 933+ 'pfunc_expr_invalid_argument' => '$1 érvénytelen paramétert kapott: < -1 vagy > 1',
 934+ 'pfunc_expr_invalid_argument_ln' => 'Az ln érvénytelen paramétert kapott: <= 0',
 935+ 'pfunc_expr_unknown_error' => 'Hiba a kifejezésben: ismeretlen hiba ($1)',
 936+ 'pfunc_expr_not_a_number' => '$1: az eredmény nem szám',
 937+ 'pfunc_string_too_long' => 'Hiba: a sztring túllépte a(z) $1 karakteres határt',
 938+);
 939+
 940+/** Interlingua (Interlingua)
 941+ * @author McDutchie
 942+ */
 943+$messages['ia'] = array(
 944+ 'pfunc_desc' => 'Meliorar le analysator syntactic con functiones logic',
 945+ 'pfunc_time_error' => 'Error: tempore invalide',
 946+ 'pfunc_time_too_long' => 'Error: troppo de appellos a #time',
 947+ 'pfunc_rel2abs_invalid_depth' => 'Error: Profunditate invalide in cammino: "$1" (essayava acceder a un nodo superior al radice)',
 948+ 'pfunc_expr_stack_exhausted' => 'Error in expression: Pila exhaurite',
 949+ 'pfunc_expr_unexpected_number' => 'Error in expression: Numero non expectate',
 950+ 'pfunc_expr_preg_match_failure' => 'Error in expression: Fallimento non expectate in preg_match',
 951+ 'pfunc_expr_unrecognised_word' => 'Error in expression: Parola "$1" non recognoscite',
 952+ 'pfunc_expr_unexpected_operator' => 'Error in expression: Operator $1 non expectate',
 953+ 'pfunc_expr_missing_operand' => 'Error in expression: Manca un operando pro $1',
 954+ 'pfunc_expr_unexpected_closing_bracket' => 'Error in expression: Accollada clause non expectate',
 955+ 'pfunc_expr_unrecognised_punctuation' => 'Error in expression: Character de punctuation "$1" non recognoscite',
 956+ 'pfunc_expr_unclosed_bracket' => 'Error in expression: Accollada non claudite',
 957+ 'pfunc_expr_division_by_zero' => 'Division per zero',
 958+ 'pfunc_expr_invalid_argument' => 'Argumento invalide pro $1: < -1 o > 1',
 959+ 'pfunc_expr_invalid_argument_ln' => 'Argumento invalide pro ln: ≤ 0',
 960+ 'pfunc_expr_unknown_error' => 'Error de expression: Error incognite ($1)',
 961+ 'pfunc_expr_not_a_number' => 'In $1: le resultato non es un numero',
 962+ 'pfunc_string_too_long' => 'Error: Le catena excede le limite de $1 {{PLURAL:$1|character|characteres}}',
 963+);
 964+
 965+/** Indonesian (Bahasa Indonesia)
 966+ * @author IvanLanin
 967+ * @author Meursault2004
 968+ * @author Rex
 969+ */
 970+$messages['id'] = array(
 971+ 'pfunc_desc' => 'Mengembangkan parser dengan fungsi logis',
 972+ 'pfunc_time_error' => 'Kesalahan: waktu tidak valid',
 973+ 'pfunc_time_too_long' => 'Kesalahan: Pemanggilan #time terlalu banyak',
 974+ 'pfunc_rel2abs_invalid_depth' => 'Kesalahan: Kedalaman path tidak valid: "$1" (mencoba mengakses simpul di atas simpul akar)',
 975+ 'pfunc_expr_stack_exhausted' => 'Kesalahan ekspresi: Stack habis',
 976+ 'pfunc_expr_unexpected_number' => 'Kesalahan ekspresi: Angka yang tak terduga',
 977+ 'pfunc_expr_preg_match_failure' => 'Kesalahan ekspresi: Kegagalan preg_match tak terduga',
 978+ 'pfunc_expr_unrecognised_word' => 'Kesalahan ekspresi: Kata "$1" tak dikenal',
 979+ 'pfunc_expr_unexpected_operator' => 'Kesalahan ekspresi: Operator $1 tak terduga',
 980+ 'pfunc_expr_missing_operand' => 'Kesalahan ekspresi: Operand tak ditemukan untuk $1',
 981+ 'pfunc_expr_unexpected_closing_bracket' => 'Kesalahan ekspresi: Kurung tutup tak terduga',
 982+ 'pfunc_expr_unrecognised_punctuation' => 'Kesalahan ekspresi: Karakter tanda baca "$1" tak dikenali',
 983+ 'pfunc_expr_unclosed_bracket' => 'Kesalahan ekspresi: Kurung tanpa tutup',
 984+ 'pfunc_expr_division_by_zero' => 'Pembagian oleh nol',
 985+ 'pfunc_expr_invalid_argument' => 'Argumen tidak berlaku untuk $1: < -1 or > 1',
 986+ 'pfunc_expr_invalid_argument_ln' => 'Argumen tidak berlaku untuk ln: <= 0',
 987+ 'pfunc_expr_unknown_error' => 'Kesalahan ekspresi: Kesalahan tak dikenal ($1)',
 988+ 'pfunc_expr_not_a_number' => 'Pada $1: hasilnya bukan angka',
 989+ 'pfunc_string_too_long' => 'Kesalahan: String melebihi limit $1 karakter',
 990+);
 991+
 992+/** Ido (Ido)
 993+ * @author Malafaya
 994+ */
 995+$messages['io'] = array(
 996+ 'pfunc_time_error' => 'Eroro: ne-valida tempo',
 997+ 'pfunc_expr_division_by_zero' => 'Divido per zero',
 998+);
 999+
 1000+/** Italian (Italiano)
 1001+ * @author BrokenArrow
 1002+ * @author Darth Kule
 1003+ * @author Pietrodn
 1004+ */
 1005+$messages['it'] = array(
 1006+ 'pfunc_desc' => 'Aggiunge al parser una serie di funzioni logiche',
 1007+ 'pfunc_time_error' => 'Errore: orario non valido',
 1008+ 'pfunc_time_too_long' => 'Errore: troppe chiamate a #time',
 1009+ 'pfunc_rel2abs_invalid_depth' => 'Errore: profondità non valida nel percorso "$1" (si è tentato di accedere a un nodo superiore alla radice)',
 1010+ 'pfunc_expr_stack_exhausted' => "Errore nell'espressione: stack esaurito",
 1011+ 'pfunc_expr_unexpected_number' => "Errore nell'espressione: numero inatteso",
 1012+ 'pfunc_expr_preg_match_failure' => "Errore nell'espressione: errore inatteso in preg_match",
 1013+ 'pfunc_expr_unrecognised_word' => 'Errore nell\'espressione: parola "$1" non riconosciuta',
 1014+ 'pfunc_expr_unexpected_operator' => "Errore nell'espressione: operatore $1 inatteso",
 1015+ 'pfunc_expr_missing_operand' => "Errore nell'espressione: operando mancante per $1",
 1016+ 'pfunc_expr_unexpected_closing_bracket' => "Errore nell'espressione: parentesi chiusa inattesa",
 1017+ 'pfunc_expr_unrecognised_punctuation' => 'Errore nell\'espressione: carattere di punteggiatura "$1" non riconosciuto',
 1018+ 'pfunc_expr_unclosed_bracket' => "Errore nell'espressione: parentesi non chiusa",
 1019+ 'pfunc_expr_division_by_zero' => 'Divisione per zero',
 1020+ 'pfunc_expr_invalid_argument' => 'Argomento non valido per $1: < -1 o > 1',
 1021+ 'pfunc_expr_invalid_argument_ln' => 'Argomento non valido per ln: <= 0',
 1022+ 'pfunc_expr_unknown_error' => "Errore nell'espressione: errore sconosciuto ($1)",
 1023+ 'pfunc_expr_not_a_number' => 'In $1: il risultato non è un numero',
 1024+ 'pfunc_string_too_long' => 'Errore: la stringa supera il limite di $1 {{PLURAL:$1|carattere|caratteri}}',
 1025+);
 1026+
 1027+/** Japanese (日本語)
 1028+ * @author Aotake
 1029+ * @author Fryed-peach
 1030+ * @author JtFuruhata
 1031+ * @author 青子守歌
 1032+ */
 1033+$messages['ja'] = array(
 1034+ 'pfunc_desc' => 'パーサーに論理関数を追加して拡張する',
 1035+ 'pfunc_time_error' => 'エラー: 時刻が不正です',
 1036+ 'pfunc_time_too_long' => 'エラー: #time 呼び出しが多すぎます',
 1037+ 'pfunc_rel2abs_invalid_depth' => 'エラー: パス "$1" の階層が不正です(ルート階層からのアクセスをお試しください)',
 1038+ 'pfunc_expr_stack_exhausted' => '構文エラー: スタックが空です',
 1039+ 'pfunc_expr_unexpected_number' => '構文エラー: 予期せぬ数字です',
 1040+ 'pfunc_expr_preg_match_failure' => '構文エラー: 予期せぬ形で preg_match に失敗しました',
 1041+ 'pfunc_expr_unrecognised_word' => '構文エラー: "$1" は認識できません',
 1042+ 'pfunc_expr_unexpected_operator' => '構文エラー: 予期せぬ演算子 $1 があります',
 1043+ 'pfunc_expr_missing_operand' => '構文エラー: $1 の演算対象がありません',
 1044+ 'pfunc_expr_unexpected_closing_bracket' => '構文エラー: 予期せぬ閉じ括弧です',
 1045+ 'pfunc_expr_unrecognised_punctuation' => '構文エラー: 認識できない区切り文字 "$1" があります',
 1046+ 'pfunc_expr_unclosed_bracket' => '構文エラー: 括弧が閉じられていません',
 1047+ 'pfunc_expr_division_by_zero' => '0で除算しました',
 1048+ 'pfunc_expr_invalid_argument' => '$1の引数が無効です: < -1 または > 1',
 1049+ 'pfunc_expr_invalid_argument_ln' => 'ln の引数が無効です: <= 0',
 1050+ 'pfunc_expr_unknown_error' => '構文エラー: 予期せぬエラー($1)',
 1051+ 'pfunc_expr_not_a_number' => '$1: 結果が数字ではありません',
 1052+ 'pfunc_string_too_long' => 'エラー: 文字列が文字数制限 $1 を超えました',
 1053+);
 1054+
 1055+/** Javanese (Basa Jawa)
 1056+ * @author Meursault2004
 1057+ */
 1058+$messages['jv'] = array(
 1059+ 'pfunc_desc' => 'Kembangna parser mawa fungsi logis',
 1060+ 'pfunc_time_error' => 'Kaluputan: wektu ora absah',
 1061+ 'pfunc_time_too_long' => 'Kaluputan: Olèhé nyeluk #time kakèhan',
 1062+ 'pfunc_rel2abs_invalid_depth' => 'Kaluputan: Kajeroané path ora absah: "$1" (nyoba ngakses simpul sadhuwuring simpul oyot)',
 1063+ 'pfunc_expr_stack_exhausted' => 'Kaluputan èksprèsi: Stack entèk',
 1064+ 'pfunc_expr_unexpected_number' => 'Kaluputan èksprèsi: Angka ora kaduga',
 1065+ 'pfunc_expr_preg_match_failure' => 'Kaluputan èksprèsi: Kaluputan preg_match sing ora kaduga',
 1066+ 'pfunc_expr_unrecognised_word' => 'Kaluputan èksprèsi: Tembung "$1" ora ditepungi',
 1067+ 'pfunc_expr_unexpected_operator' => 'Kaluputan èksprèsi: Operator $1 ora kaduga',
 1068+ 'pfunc_expr_missing_operand' => 'Kaluputan èksprèsi: Operand ora ditemokaké kanggo $1',
 1069+ 'pfunc_expr_unexpected_closing_bracket' => 'Kaluputan èksprèsi: Kurung tutup ora kaduga',
 1070+ 'pfunc_expr_unrecognised_punctuation' => 'Kaluputan èksprèsi: Karakter tandha wacan "$1" ora ditepungi',
 1071+ 'pfunc_expr_unclosed_bracket' => 'Kaluputan èksprèsi: Kurung tanpa tutup',
 1072+ 'pfunc_expr_division_by_zero' => 'Dipara karo das (nol)',
 1073+ 'pfunc_expr_invalid_argument' => 'Argumèn ora absah kanggo $1: < -1 utawa > 1',
 1074+ 'pfunc_expr_invalid_argument_ln' => 'Argumèn ora absah kanggo ln: <= 0',
 1075+ 'pfunc_expr_unknown_error' => 'Kaluputan èksprèsi: Kaluputan ora ditepungi ($1)',
 1076+ 'pfunc_expr_not_a_number' => 'Ing $1: pituwasé dudu angka',
 1077+);
 1078+
 1079+/** Georgian (ქართული)
 1080+ * @author BRUTE
 1081+ */
 1082+$messages['ka'] = array(
 1083+ 'pfunc_time_error' => 'შეცდომა: არასწორი დრო',
 1084+ 'pfunc_expr_invalid_argument' => 'მცდარი არგუმენტი $1: < -1 ან > 1',
 1085+ 'pfunc_expr_invalid_argument_ln' => 'მცდარი არგუმენტი ln: <= 0',
 1086+);
 1087+
 1088+/** Kazakh (Arabic script) (‫قازاقشا (تٴوتە)‬) */
 1089+$messages['kk-arab'] = array(
 1090+ 'pfunc_time_error' => 'قاتە: جارامسىز ۋاقىت',
 1091+ 'pfunc_time_too_long' => 'قاتە: #time شاقىرۋى تىم كوپ',
 1092+ 'pfunc_rel2abs_invalid_depth' => 'قاتە: مىنا جولدىڭ جارامسىز تەرەندىگى «$1» (تامىر ٴتۇيىننىڭ ۇستىندەگى تۇيىنگە قاتىناۋ تالابى)',
 1093+ 'pfunc_expr_stack_exhausted' => 'ايتىلىم قاتەسى: ستەك سارقىلدى',
 1094+ 'pfunc_expr_unexpected_number' => 'ايتىلىم قاتەسى: كۇتىلمەگەن سان',
 1095+ 'pfunc_expr_preg_match_failure' => 'ايتىلىم قاتەسى: كۇتىلمەگەن preg_match ساتسىزدىگى',
 1096+ 'pfunc_expr_unrecognised_word' => 'ايتىلىم قاتەسى: تانىلماعان ٴسوز «$1»',
 1097+ 'pfunc_expr_unexpected_operator' => 'ايتىلىم قاتەسى: كۇتىلمەگەن وپەراتور $1',
 1098+ 'pfunc_expr_missing_operand' => 'ايتىلىم قاتەسى: $1 ٴۇشىن جوعالعان وپەراند',
 1099+ 'pfunc_expr_unexpected_closing_bracket' => 'ايتىلىم قاتەسى: كۇتىلمەگەن جاباتىن جاقشا',
 1100+ 'pfunc_expr_unrecognised_punctuation' => 'ايتىلىم قاتەسى: تانىلماعان تىنىس بەلگىسى «$1»',
 1101+ 'pfunc_expr_unclosed_bracket' => 'ايتىلىم قاتەسى: جابىلماعان جاقشا',
 1102+ 'pfunc_expr_division_by_zero' => 'نولگە ٴبولىنۋى',
 1103+ 'pfunc_expr_unknown_error' => 'ايتىلىم قاتەسى: بەلگىسىز قاتە ($1)',
 1104+ 'pfunc_expr_not_a_number' => '$1 دەگەندە: ناتىيجە سان ەمەس',
 1105+);
 1106+
 1107+/** Kazakh (Cyrillic) (Қазақша (Cyrillic)) */
 1108+$messages['kk-cyrl'] = array(
 1109+ 'pfunc_time_error' => 'Қате: жарамсыз уақыт',
 1110+ 'pfunc_time_too_long' => 'Қате: #time шақыруы тым көп',
 1111+ 'pfunc_rel2abs_invalid_depth' => 'Қате: Мына жолдың жарамсыз терендігі «$1» (тамыр түйіннің үстіндегі түйінге қатынау талабы)',
 1112+ 'pfunc_expr_stack_exhausted' => 'Айтылым қатесі: Стек сарқылды',
 1113+ 'pfunc_expr_unexpected_number' => 'Айтылым қатесі: Күтілмеген сан',
 1114+ 'pfunc_expr_preg_match_failure' => 'Айтылым қатесі: Күтілмеген preg_match сәтсіздігі',
 1115+ 'pfunc_expr_unrecognised_word' => 'Айтылым қатесі: Танылмаған сөз «$1»',
 1116+ 'pfunc_expr_unexpected_operator' => 'Айтылым қатесі: Күтілмеген оператор $1',
 1117+ 'pfunc_expr_missing_operand' => 'Айтылым қатесі: $1 үшін жоғалған операнд',
 1118+ 'pfunc_expr_unexpected_closing_bracket' => 'Айтылым қатесі: Күтілмеген жабатын жақша',
 1119+ 'pfunc_expr_unrecognised_punctuation' => 'Айтылым қатесі: Танылмаған тыныс белгісі «$1»',
 1120+ 'pfunc_expr_unclosed_bracket' => 'Айтылым қатесі: Жабылмаған жақша',
 1121+ 'pfunc_expr_division_by_zero' => 'Нөлге бөлінуі',
 1122+ 'pfunc_expr_unknown_error' => 'Айтылым қатесі: Белгісіз қате ($1)',
 1123+ 'pfunc_expr_not_a_number' => '$1 дегенде: нәтиже сан емес',
 1124+);
 1125+
 1126+/** Kazakh (Latin) (Қазақша (Latin)) */
 1127+$messages['kk-latn'] = array(
 1128+ 'pfunc_time_error' => 'Qate: jaramsız waqıt',
 1129+ 'pfunc_time_too_long' => 'Qate: #time şaqırwı tım köp',
 1130+ 'pfunc_rel2abs_invalid_depth' => 'Qate: Mına joldıñ jaramsız terendigi «$1» (tamır tüýinniñ üstindegi tüýinge qatınaw talabı)',
 1131+ 'pfunc_expr_stack_exhausted' => 'Aýtılım qatesi: Stek sarqıldı',
 1132+ 'pfunc_expr_unexpected_number' => 'Aýtılım qatesi: Kütilmegen san',
 1133+ 'pfunc_expr_preg_match_failure' => 'Aýtılım qatesi: Kütilmegen preg_match sätsizdigi',
 1134+ 'pfunc_expr_unrecognised_word' => 'Aýtılım qatesi: Tanılmağan söz «$1»',
 1135+ 'pfunc_expr_unexpected_operator' => 'Aýtılım qatesi: Kütilmegen operator $1',
 1136+ 'pfunc_expr_missing_operand' => 'Aýtılım qatesi: $1 üşin joğalğan operand',
 1137+ 'pfunc_expr_unexpected_closing_bracket' => 'Aýtılım qatesi: Kütilmegen jabatın jaqşa',
 1138+ 'pfunc_expr_unrecognised_punctuation' => 'Aýtılım qatesi: Tanılmağan tınıs belgisi «$1»',
 1139+ 'pfunc_expr_unclosed_bracket' => 'Aýtılım qatesi: Jabılmağan jaqşa',
 1140+ 'pfunc_expr_division_by_zero' => 'Nölge bölinwi',
 1141+ 'pfunc_expr_unknown_error' => 'Aýtılım qatesi: Belgisiz qate ($1)',
 1142+ 'pfunc_expr_not_a_number' => '$1 degende: nätïje san emes',
 1143+);
 1144+
 1145+/** Khmer (ភាសាខ្មែរ)
 1146+ * @author Lovekhmer
 1147+ * @author Thearith
 1148+ * @author គីមស៊្រុន
 1149+ */
 1150+$messages['km'] = array(
 1151+ 'pfunc_time_error' => 'កំហុស៖ ពេលវេលាមិនត្រឹមត្រូវ',
 1152+ 'pfunc_expr_division_by_zero' => 'ចែកនឹងសូន្យ',
 1153+ 'pfunc_expr_not_a_number' => 'ក្នុង $1: លទ្ធផល​មិន​មែន​ជា​លេខ​ទេ',
 1154+);
 1155+
 1156+/** Korean (한국어)
 1157+ * @author Klutzy
 1158+ * @author Kwj2772
 1159+ * @author ToePeu
 1160+ * @author Yknok29
 1161+ */
 1162+$messages['ko'] = array(
 1163+ 'pfunc_desc' => '파서에 논리 함수를 추가',
 1164+ 'pfunc_time_error' => '오류: 시간이 잘못되었습니다.',
 1165+ 'pfunc_time_too_long' => '오류: #time을 너무 많이 썼습니다.',
 1166+ 'pfunc_rel2abs_invalid_depth' => '오류: 경로 구조가 잘못되었습니다: "$1" (루트 노드 위의 노드에 접속을 시도했습니다)',
 1167+ 'pfunc_expr_stack_exhausted' => '표현 오류: 스택이 비어 있습니다.',
 1168+ 'pfunc_expr_unexpected_number' => '표현식 오류: 예상치 못한 값',
 1169+ 'pfunc_expr_preg_match_failure' => '표현식 오류: 예상치 못한 preg_match 오류',
 1170+ 'pfunc_expr_unrecognised_word' => '표현식 오류: 알 수 없는 단어 ‘$1’',
 1171+ 'pfunc_expr_unexpected_operator' => '표현 오류: 잘못된 $1 연산자',
 1172+ 'pfunc_expr_missing_operand' => '표현 오류: $1의 피연산자가 없습니다.',
 1173+ 'pfunc_expr_unexpected_closing_bracket' => '표현 오류: 예상치 못한 괄호 닫기',
 1174+ 'pfunc_expr_unrecognised_punctuation' => '표현 오류: 알 수 없는 문자 "$1"',
 1175+ 'pfunc_expr_unclosed_bracket' => '표현 오류: 괄호를 닫지 않았습니다.',
 1176+ 'pfunc_expr_division_by_zero' => '0으로 나눔',
 1177+ 'pfunc_expr_invalid_argument' => '$1 함수의 변수가 잘못되었습니다: < -1 또는 > 1',
 1178+ 'pfunc_expr_invalid_argument_ln' => '자연로그의 진수가 잘못되었습니다: <= 0',
 1179+ 'pfunc_expr_unknown_error' => '표현 오류: 알려지지 않은 오류 ($1)',
 1180+ 'pfunc_expr_not_a_number' => '$1: 결과가 숫자가 아닙니다.',
 1181+ 'pfunc_string_too_long' => '오류: $1자 제한을 초과하였습니다.',
 1182+);
 1183+
 1184+/** Colognian (Ripoarisch)
 1185+ * @author Purodha
 1186+ */
 1187+$messages['ksh'] = array(
 1188+ 'pfunc_desc' => 'Deit em Wiki Funxione för Entscheidunge un esu dobei.',
 1189+ 'pfunc_time_error' => 'Fähler: Onjöltijje Zick.',
 1190+ 'pfunc_time_too_long' => 'Fähler: <code>#time</code> weed zo öff jebruch.',
 1191+ 'pfunc_rel2abs_invalid_depth' => 'Fähler: Zo fill „retuur“ em Pahdt „$1“ — mer wöre wigger wi för der Aanfang zeröck jejange.',
 1192+ 'pfunc_expr_stack_exhausted' => 'Fähler en enem Ußdrock: Dä löht der <i lang="en">stack</i> övverloufe.',
 1193+ 'pfunc_expr_unexpected_number' => 'Fähler en enem Ußdrock: En Zahl dom_mer nit äwaade.',
 1194+ 'pfunc_expr_preg_match_failure' => 'Fähler en enem Ußdrock: Esu ene Fähler en „<i lang="en">preg_match</i>“ dum_mer nit äwade.',
 1195+ 'pfunc_expr_unrecognised_word' => 'Fähler en enem Ußdrock: Dat Woot „$1“ es unbikannt.',
 1196+ 'pfunc_expr_unexpected_operator' => 'Fähler en enem Ußdrock: Dat Räschezeiche „$1“ dom_mer hee nit äwaade.',
 1197+ 'pfunc_expr_missing_operand' => 'Fähler en enem Ußdrock: För dat Räschezeiche „$1“ dom_mer ävver ene Operand äwaade.',
 1198+ 'pfunc_expr_unexpected_closing_bracket' => 'Fähler en enem Ußdrock: En eckijje Klammer-Zoh dom_mer esu nit äwaade.',
 1199+ 'pfunc_expr_unrecognised_punctuation' => 'Fähler en enem Ußdrock: Dat Satzzeiche „$1“ dom_mer esu nit äwaade.',
 1200+ 'pfunc_expr_unclosed_bracket' => 'Fähler en enem Ußdrock: Do fählt en eckijje Klammer-Zoh.',
 1201+ 'pfunc_expr_division_by_zero' => 'Fähler en enem Ußdrock: Dorsch Noll jedeilt.',
 1202+ 'pfunc_expr_invalid_argument' => 'Fähler: Dä Parrameeter för <code>$1</code> moß -1 udder 1 sin, udder dozwesche lijje.',
 1203+ 'pfunc_expr_invalid_argument_ln' => 'Fähler: Dä Parrameeter för <code>ln</code> moß 0 udder kleiner wi 0 sin.',
 1204+ 'pfunc_expr_unknown_error' => 'Fähler en enem Ußdrock: Unbikannt ($1)',
 1205+ 'pfunc_expr_not_a_number' => 'Fähler en enem Ußdrock: En <code>$1</code> es dat wat erus kütt kein Zahl.',
 1206+ 'pfunc_string_too_long' => 'Fähler en enem Ußdrock: En Zeijshereih es länger wi $1 Zeijshe.',
 1207+);
 1208+
 1209+/** Luxembourgish (Lëtzebuergesch)
 1210+ * @author Robby
 1211+ */
 1212+$messages['lb'] = array(
 1213+ 'pfunc_desc' => 'Erweidert Parser mat logesche Fonctiounen',
 1214+ 'pfunc_time_error' => 'Feeler: ongëlteg Zäit',
 1215+ 'pfunc_time_too_long' => 'Feeler: ze dacks #time opgeruff',
 1216+ 'pfunc_expr_unexpected_number' => 'Expressiouns-Feeler: Onerwarten Zuel',
 1217+ 'pfunc_expr_unrecognised_word' => 'Expressiouns-Feeler: Onerkantent Wuert "$1"',
 1218+ 'pfunc_expr_unexpected_operator' => 'Expression-Feeler: Onerwarten Operateur: <tt>$1</tt>',
 1219+ 'pfunc_expr_missing_operand' => 'Expression-Feeler: Et feelt en Operand fir <tt>$1</tt>',
 1220+ 'pfunc_expr_unexpected_closing_bracket' => 'Expressiouns-Feeler: Onerwarte Klammer déi zougemaach gëtt',
 1221+ 'pfunc_expr_unrecognised_punctuation' => 'Expressiouns-Feeler: D\'Satzzeechen "$1" gouf net erkannt',
 1222+ 'pfunc_expr_unclosed_bracket' => 'Expressiouns-Feeler: Eckeg Klammer net zougemaach',
 1223+ 'pfunc_expr_division_by_zero' => 'Divisioun duerch Null',
 1224+ 'pfunc_expr_invalid_argument' => 'Ongültege Wäert fir $1: < -1 oder > 1',
 1225+ 'pfunc_expr_invalid_argument_ln' => 'Ongültege Wäert fir ln: <= 0',
 1226+ 'pfunc_expr_unknown_error' => 'Expression-Feeler: Onbekannte Feeler ($1)',
 1227+ 'pfunc_expr_not_a_number' => "An $1: D'Resultat ass keng Zuel",
 1228+ 'pfunc_string_too_long' => "Feeler: D'Zeecheketten ass méi laang wéi d'Limit vu(n) $1 Zeechen",
 1229+);
 1230+
 1231+/** Limburgish (Limburgs)
 1232+ * @author Matthias
 1233+ * @author Ooswesthoesbes
 1234+ */
 1235+$messages['li'] = array(
 1236+ 'pfunc_desc' => 'Verrijkt de parser met logische functies',
 1237+ 'pfunc_time_error' => 'Fout: ongeldige tied',
 1238+ 'pfunc_time_too_long' => 'Fout: #time te vaok aangerope',
 1239+ 'pfunc_rel2abs_invalid_depth' => 'Fout: ongeldige diepte in pad: "$1" (probeerde \'n node bove de stamnode aan te rope)',
 1240+ 'pfunc_expr_stack_exhausted' => 'Fout in oetdrukking: stack oetgeput',
 1241+ 'pfunc_expr_unexpected_number' => 'Fout in oetdrukking: onverwacht getal',
 1242+ 'pfunc_expr_preg_match_failure' => 'Fout in oetdrukking: onverwacht fale van preg_match',
 1243+ 'pfunc_expr_unrecognised_word' => 'Fout in oetdrukking: woord "$1" neet herkend',
 1244+ 'pfunc_expr_unexpected_operator' => 'Fout in oetdrukking: neet verwachte operator $1',
 1245+ 'pfunc_expr_missing_operand' => 'Fout in oetdrukking: operand veur $1 mist',
 1246+ 'pfunc_expr_unexpected_closing_bracket' => 'Fout in oetdrukking: haakje sloete op onverwachte plaats',
 1247+ 'pfunc_expr_unrecognised_punctuation' => 'Fout in oetdrukking: neet herkend leesteke "$1"',
 1248+ 'pfunc_expr_unclosed_bracket' => 'Fout in oetdrukking: neet geslote haakje opene',
 1249+ 'pfunc_expr_division_by_zero' => 'Deiling door nul',
 1250+ 'pfunc_expr_invalid_argument' => 'Ongeldige paramaeter veur $1: < -1 of > 1',
 1251+ 'pfunc_expr_invalid_argument_ln' => 'Ongeldige paramaeter veur ln: <= 0',
 1252+ 'pfunc_expr_unknown_error' => 'Fout in oetdrukking: ónbekindje fout ($1)',
 1253+ 'pfunc_expr_not_a_number' => 'In $1: rezultaot is gein getal',
 1254+ 'pfunc_string_too_long' => 'Fout: De teks is lenger es de limiet van $1 {{PLURAL:$1|teike|teikes}}',
 1255+);
 1256+
 1257+/** Lithuanian (Lietuvių)
 1258+ * @author Hugo.arg
 1259+ */
 1260+$messages['lt'] = array(
 1261+ 'pfunc_time_error' => 'Klaida: neteisingas laikas',
 1262+);
 1263+
 1264+/** Latvian (Latviešu)
 1265+ * @author Papuass
 1266+ */
 1267+$messages['lv'] = array(
 1268+ 'pfunc_time_error' => 'Kļūda: nederīgs laiks',
 1269+ 'pfunc_time_too_long' => 'Kļūda: pārāk daudz #time izsaukumu',
 1270+ 'pfunc_expr_division_by_zero' => 'Dalīšana ar nulli',
 1271+);
 1272+
 1273+/** Macedonian (Македонски)
 1274+ * @author Bjankuloski06
 1275+ * @author Brest
 1276+ */
 1277+$messages['mk'] = array(
 1278+ 'pfunc_desc' => 'Проширување на можностите на парсерот со логички функции',
 1279+ 'pfunc_time_error' => 'Грешка: погрешен формат за време',
 1280+ 'pfunc_time_too_long' => 'Грешка: премногу #time повикувања',
 1281+ 'pfunc_rel2abs_invalid_depth' => 'Грешка: Неважечка длабочина во патеката: „$1“ (обид за пристап до јазол над коренот)',
 1282+ 'pfunc_expr_stack_exhausted' => 'Грешка во изразот: Складот е преполн',
 1283+ 'pfunc_expr_unexpected_number' => 'Грешка во изразот: Неочекуван број',
 1284+ 'pfunc_expr_preg_match_failure' => 'Грешка во изразот: Неочекувана preg_match грешка',
 1285+ 'pfunc_expr_unrecognised_word' => 'Грешка во изразот: Непознат збор "$1"',
 1286+ 'pfunc_expr_unexpected_operator' => 'Грешка во изразот: Неочекуван оператор $1',
 1287+ 'pfunc_expr_missing_operand' => 'Грешка во изразот: Недостасува оперант за $1',
 1288+ 'pfunc_expr_unexpected_closing_bracket' => 'Грешка во изразот: Неочекувано затворање на заграда',
 1289+ 'pfunc_expr_unrecognised_punctuation' => 'Грешка во изразот: Непрепознаен интерпункциски знак „$1“',
 1290+ 'pfunc_expr_unclosed_bracket' => 'Грешка во изразот: Незатворена заграда',
 1291+ 'pfunc_expr_division_by_zero' => 'Делење со нула',
 1292+ 'pfunc_expr_invalid_argument' => 'Невалиден аргумент за $1: < -1 или > 1',
 1293+ 'pfunc_expr_invalid_argument_ln' => 'Невалиден аргумент за ln: <= 0',
 1294+ 'pfunc_expr_unknown_error' => 'Грешка во изразот: Непозната грешка ($1)',
 1295+ 'pfunc_expr_not_a_number' => 'Во $1: резултатот не е број',
 1296+ 'pfunc_string_too_long' => 'Грешка: Низата го надминува ограничувањето на $1 знаци',
 1297+);
 1298+
 1299+/** Malayalam (മലയാളം)
 1300+ * @author Praveenp
 1301+ * @author Shijualex
 1302+ */
 1303+$messages['ml'] = array(
 1304+ 'pfunc_desc' => 'ലോജിക്കൽ ഫങ്ഷൻസ് ഉപയോഗിച്ച് പാർസർ വിപുലപ്പെടുത്തുക',
 1305+ 'pfunc_time_error' => 'പിഴവ്:അസാധുവായ സമയം',
 1306+ 'pfunc_time_too_long' => 'പിഴവ്: വളരെയധികം #സമയ കാളുകൾ',
 1307+ 'pfunc_rel2abs_invalid_depth' => 'പിഴവ്: പഥത്തിൽ അസാധുവായ ആഴം: "$1" (റൂട്ട് തലത്തിനും മുകളിലുള്ള തലം എടുക്കാനുള്ള ശ്രമം)',
 1308+ 'pfunc_expr_stack_exhausted' => 'എക്സ്‌പ്രെഷൻ പിഴവ്: സ്റ്റാക്ക് പുറന്തള്ളിയിരിക്കുന്നു',
 1309+ 'pfunc_expr_unexpected_number' => 'പ്രയോഗരീതിയിൽ പിഴവ്: പ്രതീക്ഷിക്കാത്ത സംഖ്യ',
 1310+ 'pfunc_expr_preg_match_failure' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അപ്രതീക്ഷിതമായ preg_match പരാജയം',
 1311+ 'pfunc_expr_unrecognised_word' => 'പ്രയോഗരീതിയിൽ പിഴവ്: "$1" എന്ന തിരിച്ചറിയാൻ സാധിക്കാഞ്ഞ വാക്ക്',
 1312+ 'pfunc_expr_unexpected_operator' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അപ്രതീക്ഷിതമായ $1 ഓപ്പറേറ്റർ',
 1313+ 'pfunc_expr_missing_operand' => 'എക്സ്പ്രെഷൻ പിഴവ്: $1 എന്നതിനുള്ള പ്രവർത്തനഘടകം നൽകിയിട്ടില്ല',
 1314+ 'pfunc_expr_unexpected_closing_bracket' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അപ്രതീക്ഷിതമായി കോഷ്ഠകം അടച്ചിരിക്കുന്നു',
 1315+ 'pfunc_expr_unrecognised_punctuation' => 'പ്രയോഗരീതിയിൽ പിഴവ്: തിരിച്ചറിയാൻ കഴിയാത്ത വിരാമചിഹ്നം "$1"',
 1316+ 'pfunc_expr_unclosed_bracket' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അടയ്ക്കാത്ത കോഷ്ഠകം',
 1317+ 'pfunc_expr_division_by_zero' => 'പൂജ്യം കൊണ്ടുള്ള ഹരണം',
 1318+ 'pfunc_expr_invalid_argument' => '$1:< -1 അല്ലെങ്കിൽ > 1 എന്നതിനു നൽകിയ അസാധുവായ ആർഗ്യുമെന്റ്',
 1319+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 എന്നതിനു നൽകിയ അസാധുവായ ആർഗ്യുമെന്റ്',
 1320+ 'pfunc_expr_unknown_error' => 'പ്രയോഗരീതിയിൽ പിഴവ്: കാരണം അജ്ഞാതമായ പിഴവ് ($1)',
 1321+ 'pfunc_expr_not_a_number' => '$1-ൽ: ഫലം ഒരു സംഖ്യയല്ല',
 1322+ 'pfunc_string_too_long' => 'പിഴവ്: പദം ലിപികളുടെ പരിധിയായ $1 അതിലംഘിക്കുന്നു',
 1323+);
 1324+
 1325+/** Marathi (मराठी)
 1326+ * @author Kaustubh
 1327+ */
 1328+$messages['mr'] = array(
 1329+ 'pfunc_desc' => 'तार्किक कार्ये वापरून पार्सर वाढवा',
 1330+ 'pfunc_time_error' => 'त्रुटी: चुकीचा वेळ',
 1331+ 'pfunc_time_too_long' => 'त्रुटी: खूप जास्त #time कॉल्स',
 1332+ 'pfunc_rel2abs_invalid_depth' => 'त्रुटी: मार्गामध्ये चुकीची गहनता: "$1" (रूट नोडच्या वरील नोड शोधायचा प्रयत्न केला)',
 1333+ 'pfunc_expr_stack_exhausted' => 'एक्स्प्रेशन त्रुटी: स्टॅक संपला',
 1334+ 'pfunc_expr_unexpected_number' => 'एक्स्प्रेशन त्रुटी: अनपेक्षित क्रमांक',
 1335+ 'pfunc_expr_preg_match_failure' => 'एक्स्प्रेशन त्रुटी: अनपेक्षित preg_match रद्दीकरण',
 1336+ 'pfunc_expr_unrecognised_word' => 'एक्स्प्रेशन त्रुटी: अनोळखी शब्द "$1"',
 1337+ 'pfunc_expr_unexpected_operator' => 'एक्स्प्रेशन त्रुटी: अनोळखी $1 कार्यवाहक',
 1338+ 'pfunc_expr_missing_operand' => 'एक्स्प्रेशन त्रुटी: $1 चा घटक सापडला नाही',
 1339+ 'pfunc_expr_unexpected_closing_bracket' => 'एक्स्प्रेशन त्रुटी: अनपेक्षित समाप्ती कंस',
 1340+ 'pfunc_expr_unrecognised_punctuation' => 'एक्स्प्रेशन त्रुटी: अनोळखी उद्गारवाचक चिन्ह "$1"',
 1341+ 'pfunc_expr_unclosed_bracket' => 'एक्स्प्रेशन त्रुटी: कंस समाप्त केलेला नाही',
 1342+ 'pfunc_expr_division_by_zero' => 'शून्य ने भागाकार',
 1343+ 'pfunc_expr_invalid_argument' => '$1 साठी अवैध अर्ग्युमेंट: < -1 किंवा > 1',
 1344+ 'pfunc_expr_invalid_argument_ln' => 'ln करिता अवैध अर्ग्युमेंट: <= 0',
 1345+ 'pfunc_expr_unknown_error' => 'एक्स्प्रेशन त्रुटी: अनोळखी त्रुटी ($1)',
 1346+ 'pfunc_expr_not_a_number' => '$1 मध्ये: निकाल संख्येत नाही',
 1347+);
 1348+
 1349+/** Malay (Bahasa Melayu)
 1350+ * @author Aurora
 1351+ * @author Aviator
 1352+ * @author Kurniasan
 1353+ */
 1354+$messages['ms'] = array(
 1355+ 'pfunc_desc' => 'Meningkatkan penghurai dengan fungsi-fungsi logik',
 1356+ 'pfunc_time_error' => 'Ralat: waktu tidak sah',
 1357+ 'pfunc_time_too_long' => 'Ralat: terlalu banyak panggilan #time',
 1358+ 'pfunc_rel2abs_invalid_depth' => 'Ralat: Kedalaman tidak sah dalam laluan: "$1" (cubaan mencapai nod di atas nod induk)',
 1359+ 'pfunc_expr_stack_exhausted' => 'Ralat ungkapan: Tindanan tuntas',
 1360+ 'pfunc_expr_unexpected_number' => 'Ralat ungkapan: Nombor tidak dijangka',
 1361+ 'pfunc_expr_preg_match_failure' => 'Ralat ungkapan: Kegagalan preg_match tidak dijangka',
 1362+ 'pfunc_expr_unrecognised_word' => 'Ralat ungkapan: Perkataan "$1" tidak dikenali',
 1363+ 'pfunc_expr_unexpected_operator' => 'Ralat ungkapan: Pengendali $1 tidak dijangka',
 1364+ 'pfunc_expr_missing_operand' => 'Ralat ungkapan: Kendalian bagi $1 tiada',
 1365+ 'pfunc_expr_unexpected_closing_bracket' => 'Ralat ungkapan: Penutup kurungan tidak dijangka',
 1366+ 'pfunc_expr_unrecognised_punctuation' => 'Ralat ungkapan: Aksara tanda baca "$1" tidak dikenali',
 1367+ 'pfunc_expr_unclosed_bracket' => 'Ralat ungkapan: Tanda kurung tidak ditutup',
 1368+ 'pfunc_expr_division_by_zero' => 'Pembahagian dengan sifar',
 1369+ 'pfunc_expr_invalid_argument' => 'Argumen bagi $1 tidak sah: < -1 atau > 1',
 1370+ 'pfunc_expr_invalid_argument_ln' => 'Argumen bagi ln tidak sah: <= 0',
 1371+ 'pfunc_expr_unknown_error' => 'Ralat ungkapan: Ralat tidak diketahui ($1)',
 1372+ 'pfunc_expr_not_a_number' => 'Dalam $1: hasil bukan nombor',
 1373+ 'pfunc_string_too_long' => 'Ralat: Rentetan melampaui batas aksara $1',
 1374+);
 1375+
 1376+/** Erzya (Эрзянь)
 1377+ * @author Botuzhaleny-sodamo
 1378+ */
 1379+$messages['myv'] = array(
 1380+ 'pfunc_time_error' => 'Ильведевксэсь: амаштовикс шкась',
 1381+ 'pfunc_expr_stack_exhausted' => 'Ёвтавкссонть ильведевкс: стекесь тыц пешксе',
 1382+ 'pfunc_expr_division_by_zero' => 'Нольсэ йавома',
 1383+);
 1384+
 1385+/** Nahuatl (Nāhuatl)
 1386+ * @author Fluence
 1387+ */
 1388+$messages['nah'] = array(
 1389+ 'pfunc_time_error' => 'Ahcuallōtl: ahcualli cāhuitl',
 1390+);
 1391+
 1392+/** Low German (Plattdüütsch)
 1393+ * @author Slomox
 1394+ */
 1395+$messages['nds'] = array(
 1396+ 'pfunc_desc' => 'Beriekert den Parser mit logische Funkschonen',
 1397+ 'pfunc_time_error' => 'Fehler: mit de Tiet stimmt wat nich',
 1398+ 'pfunc_time_too_long' => 'Fehler: #time warrt to faken opropen',
 1399+ 'pfunc_rel2abs_invalid_depth' => 'Fehler: Mit den Padd „$1“ stimmt wat nich, liggt nich ünner den Wuddelorner',
 1400+ 'pfunc_expr_stack_exhausted' => 'Fehler in’n Utdruck: Stack överlopen',
 1401+ 'pfunc_expr_unexpected_number' => 'Fehler in’n Utdruck: Unverwacht Tall',
 1402+ 'pfunc_expr_preg_match_failure' => 'Fehler in’n Utdruck: Unverwacht Fehler bi „preg_match“',
 1403+ 'pfunc_expr_unrecognised_word' => 'Fehler in’n Utdruck: Woort „$1“ nich kennt',
 1404+ 'pfunc_expr_unexpected_operator' => 'Fehler in’n Utdruck: Unverwacht Operator $1',
 1405+ 'pfunc_expr_missing_operand' => 'Fehler in’n Utdruck: Operand för $1 fehlt',
 1406+ 'pfunc_expr_unexpected_closing_bracket' => 'Fehler in’n Utdruck: Unverwacht Klammer to',
 1407+ 'pfunc_expr_unrecognised_punctuation' => 'Fehler in’n Utdruck: Satzteken „$1“ nich kennt',
 1408+ 'pfunc_expr_unclosed_bracket' => 'Fehler in’n Utdruck: Nich slatene Klammer',
 1409+ 'pfunc_expr_division_by_zero' => 'Delen dör Null',
 1410+ 'pfunc_expr_invalid_argument' => 'Ungüllig Argument för $1: < -1 oder > 1',
 1411+ 'pfunc_expr_invalid_argument_ln' => 'Ungüllig Argument för ln: <= 0',
 1412+ 'pfunc_expr_unknown_error' => 'Fehler in’n Utdruck: Unbekannten Fehler ($1)',
 1413+ 'pfunc_expr_not_a_number' => 'In $1: wat rutkamen is, is kene Tall',
 1414+);
 1415+
 1416+/** Nepali (नेपाली) */
 1417+$messages['ne'] = array(
 1418+ 'pfunc_time_error' => 'त्रुटी: गलत/वा हुदैनहुने समय',
 1419+ 'pfunc_time_too_long' => 'त्रुटी: एकदम धेरै #time callहरु',
 1420+ 'pfunc_rel2abs_invalid_depth' => 'त्रुटी: पाथमा (इनभ्यालिड)गलत गहिराइ(डेप्थ) भयो: "$1" (ले रुट नोड भन्दापनि माथिको नोडलाइ चलाउन(एकसेस) गर्न खोज्यो)',
 1421+);
 1422+
 1423+/** Dutch (Nederlands)
 1424+ * @author SPQRobin
 1425+ * @author Siebrand
 1426+ */
 1427+$messages['nl'] = array(
 1428+ 'pfunc_desc' => 'Verrijkt de parser met logische functies',
 1429+ 'pfunc_time_error' => 'Fout: ongeldige tijd',
 1430+ 'pfunc_time_too_long' => 'Fout: #time te vaak aangeroepen',
 1431+ 'pfunc_rel2abs_invalid_depth' => 'Fout: ongeldige diepte in pad: "$1" (probeerde een node boven de stamnode aan te roepen)',
 1432+ 'pfunc_expr_stack_exhausted' => 'Fout in uitdrukking: stack uitgeput',
 1433+ 'pfunc_expr_unexpected_number' => 'Fout in uitdrukking: onverwacht getal',
 1434+ 'pfunc_expr_preg_match_failure' => 'Fout in uitdrukking: onverwacht falen van preg_match',
 1435+ 'pfunc_expr_unrecognised_word' => 'Fout in uitdrukking: woord "$1" niet herkend',
 1436+ 'pfunc_expr_unexpected_operator' => 'Fout in uitdrukking: niet verwachte operator $1',
 1437+ 'pfunc_expr_missing_operand' => 'Fout in uitdrukking: operand voor $1 mist',
 1438+ 'pfunc_expr_unexpected_closing_bracket' => 'Fout in uitdrukking: haakje sluiten op onverwachte plaats',
 1439+ 'pfunc_expr_unrecognised_punctuation' => 'Fout in uitdrukking: niet herkend leesteken "$1"',
 1440+ 'pfunc_expr_unclosed_bracket' => 'Fout in uitdrukking: niet gesloten haakje openen',
 1441+ 'pfunc_expr_division_by_zero' => 'Deling door nul',
 1442+ 'pfunc_expr_invalid_argument' => 'Ongeldige parameter voor $1: < -1 of > 1',
 1443+ 'pfunc_expr_invalid_argument_ln' => 'Ongeldige parameter voor ln: <= 0',
 1444+ 'pfunc_expr_unknown_error' => 'Fout in uitdrukking: onbekende fout ($1)',
 1445+ 'pfunc_expr_not_a_number' => 'In $1: resultaat is geen getal',
 1446+ 'pfunc_string_too_long' => 'Fout: De tekst is langer dan de limiet van $1 {{PLURAL:$1|karakter|karakters}}',
 1447+);
 1448+
 1449+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
 1450+ * @author Eirik
 1451+ * @author Frokor
 1452+ * @author Gunnernett
 1453+ * @author Harald Khan
 1454+ */
 1455+$messages['nn'] = array(
 1456+ 'pfunc_desc' => 'Legg til logiske funksjonar i parseren.',
 1457+ 'pfunc_time_error' => 'Feil: Ugyldig tid',
 1458+ 'pfunc_time_too_long' => 'Feil: #time er kalla for mange gonger',
 1459+ 'pfunc_rel2abs_invalid_depth' => 'Feil: Ugyldig djupn i stien: «$1» (prøvde å nå ein node ovanfor rotnoden)',
 1460+ 'pfunc_expr_stack_exhausted' => 'Feil i uttrykket: Stacken er tømd',
 1461+ 'pfunc_expr_unexpected_number' => 'Feil i uttrykket: Uventa tal',
 1462+ 'pfunc_expr_preg_match_failure' => 'Feil i uttrykket: Uventa feil i preg_match',
 1463+ 'pfunc_expr_unrecognised_word' => 'Feil i uttrykket: Ukjent ord, «$1»',
 1464+ 'pfunc_expr_unexpected_operator' => 'Feil i uttrykket: Uventa operatør, $1',
 1465+ 'pfunc_expr_missing_operand' => 'Feil i uttrykket: Operand for $1 manglar',
 1466+ 'pfunc_expr_unexpected_closing_bracket' => 'Feil i uttrykket: Uventa avsluttande parentes',
 1467+ 'pfunc_expr_unrecognised_punctuation' => 'Feil i uttrykket: Ukjent punktumsteikn, «$1»',
 1468+ 'pfunc_expr_unclosed_bracket' => 'Feil i uttrykket: Ein parentes er ikkje avslutta',
 1469+ 'pfunc_expr_division_by_zero' => 'Divisjon med null',
 1470+ 'pfunc_expr_invalid_argument' => 'Ugyldig argument for $1: < -1 eller > 1',
 1471+ 'pfunc_expr_invalid_argument_ln' => 'Ugyldig argument for ln: <= 0',
 1472+ 'pfunc_expr_unknown_error' => 'Feil i uttrykket: Ukjend feil ($1)',
 1473+ 'pfunc_expr_not_a_number' => 'Resultatet i $1 er ikkje eit tal',
 1474+ 'pfunc_string_too_long' => 'Feil: Strengen går over grensa på $1 teikn',
 1475+);
 1476+
 1477+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 1478+ * @author Jon Harald Søby
 1479+ * @author Laaknor
 1480+ */
 1481+$messages['no'] = array(
 1482+ 'pfunc_desc' => 'Utvid parser med logiske funksjoner',
 1483+ 'pfunc_time_error' => 'Feil: ugyldig tid',
 1484+ 'pfunc_time_too_long' => 'Feil: #time brukt for mange ganger',
 1485+ 'pfunc_rel2abs_invalid_depth' => 'Feil: Ugyldig dybde i sti: «$1» (prøvde å få tilgang til en node over rotnoden)',
 1486+ 'pfunc_expr_stack_exhausted' => 'Uttrykksfeil: Stakk utbrukt',
 1487+ 'pfunc_expr_unexpected_number' => 'Uttrykksfeil: Uventet nummer',
 1488+ 'pfunc_expr_preg_match_failure' => 'Uttrykksfeil: Uventet preg_match-feil',
 1489+ 'pfunc_expr_unrecognised_word' => 'Uttrykksfeil: Ugjenkjennelig ord «$1»',
 1490+ 'pfunc_expr_unexpected_operator' => 'Uttrykksfeil: Uventet $1-operator',
 1491+ 'pfunc_expr_missing_operand' => 'Uttrykksfeil: Mangler operand for $1',
 1492+ 'pfunc_expr_unexpected_closing_bracket' => 'Uttrykksfeil: Uventet lukkende parentes',
 1493+ 'pfunc_expr_unrecognised_punctuation' => 'Uttrykksfeil: Ugjenkjennelig tegn «$1»',
 1494+ 'pfunc_expr_unclosed_bracket' => 'Uttrykksfeil: Åpen parentes',
 1495+ 'pfunc_expr_division_by_zero' => 'Deling på null',
 1496+ 'pfunc_expr_invalid_argument' => 'Ugyldig argument for $1: < -1 eller > 1',
 1497+ 'pfunc_expr_invalid_argument_ln' => 'Ugyldig argument for ln: <= 0',
 1498+ 'pfunc_expr_unknown_error' => 'Uttrykksfeil: Ukjent feil ($1)',
 1499+ 'pfunc_expr_not_a_number' => 'I $1: resultat er ikke et tall',
 1500+ 'pfunc_string_too_long' => 'Feil: Strengen går over grensen på $1 tegn',
 1501+);
 1502+
 1503+/** Occitan (Occitan)
 1504+ * @author Cedric31
 1505+ */
 1506+$messages['oc'] = array(
 1507+ 'pfunc_desc' => 'Augmenta lo parser amb de foncions logicas',
 1508+ 'pfunc_time_error' => 'Error: durada invalida',
 1509+ 'pfunc_time_too_long' => 'Error: parser #time apelat tròp de còps',
 1510+ 'pfunc_rel2abs_invalid_depth' => 'Error: nivèl de repertòri invalid dins lo camin : "$1" (a ensajat d’accedir a un nivèl al-dessús del repertòri raiç)',
 1511+ 'pfunc_expr_stack_exhausted' => 'Expression erronèa : pila agotada',
 1512+ 'pfunc_expr_unexpected_number' => 'Expression erronèa : nombre pas esperat',
 1513+ 'pfunc_expr_preg_match_failure' => 'Expression erronèa : una expression pas compresa a pas capitat',
 1514+ 'pfunc_expr_unrecognised_word' => "Error d'expression : lo mot '''$1''' es pas reconegut",
 1515+ 'pfunc_expr_unexpected_operator' => "Error d'expression : l'operador '''$1''' es pas reconegut",
 1516+ 'pfunc_expr_missing_operand' => "Error d'expression : l'operanda '''$1''' es pas reconeguda",
 1517+ 'pfunc_expr_unexpected_closing_bracket' => "Error d'expression : parentèsi tampanta pas prevista",
 1518+ 'pfunc_expr_unrecognised_punctuation' => "Error d'expression : caractèr de ponctuacion « $1 » pas reconegut",
 1519+ 'pfunc_expr_unclosed_bracket' => 'Error d’expression : parentèsi pas tampada',
 1520+ 'pfunc_expr_division_by_zero' => 'Division per zèro',
 1521+ 'pfunc_expr_invalid_argument' => 'Valor incorrècta per $1 : < -1 o > 1',
 1522+ 'pfunc_expr_invalid_argument_ln' => 'Valor incorrècta per ln : ≤ 0',
 1523+ 'pfunc_expr_unknown_error' => "Error d'expression : error desconeguda ($1)",
 1524+ 'pfunc_expr_not_a_number' => 'Dins $1 : lo resultat es pas un nombre',
 1525+ 'pfunc_string_too_long' => 'Error : La cadena depassa lo limit maximal de $1 caractèr{{PLURAL:$1||s}}',
 1526+);
 1527+
 1528+/** Polish (Polski)
 1529+ * @author Derbeth
 1530+ * @author Sp5uhe
 1531+ */
 1532+$messages['pl'] = array(
 1533+ 'pfunc_desc' => 'Rozszerza analizator składni o funkcje logiczne',
 1534+ 'pfunc_time_error' => 'Błąd – niepoprawny czas',
 1535+ 'pfunc_time_too_long' => 'Błąd – zbyt wiele wywołań funkcji #time',
 1536+ 'pfunc_rel2abs_invalid_depth' => 'Błąd – nieprawidłowa głębokość w ścieżce: „$1” (próba dostępu do węzła powyżej korzenia)',
 1537+ 'pfunc_expr_stack_exhausted' => 'Błąd w wyrażeniu – stos wyczerpany',
 1538+ 'pfunc_expr_unexpected_number' => 'Błąd w wyrażeniu – nieoczekiwana liczba',
 1539+ 'pfunc_expr_preg_match_failure' => 'Błąd w wyrażeniu – nieoczekiwany błąd preg_match',
 1540+ 'pfunc_expr_unrecognised_word' => 'Błąd w wyrażeniu – nierozpoznane słowo „$1”',
 1541+ 'pfunc_expr_unexpected_operator' => 'Błąd w wyrażeniu – nieoczekiwany operator $1',
 1542+ 'pfunc_expr_missing_operand' => 'Błąd w wyrażeniu – brak argumentu funkcji $1',
 1543+ 'pfunc_expr_unexpected_closing_bracket' => 'Błąd w wyrażeniu – nieoczekiwany nawias zamykający',
 1544+ 'pfunc_expr_unrecognised_punctuation' => 'Błąd w wyrażeniu – nierozpoznany znak interpunkcyjny „$1”',
 1545+ 'pfunc_expr_unclosed_bracket' => 'Błąd w wyrażeniu – niedomknięty nawias',
 1546+ 'pfunc_expr_division_by_zero' => 'Dzielenie przez zero',
 1547+ 'pfunc_expr_invalid_argument' => 'Nieprawidłowy argument funkcji $1 – mniejszy od -1 lub większy od 1',
 1548+ 'pfunc_expr_invalid_argument_ln' => 'Nieprawidłowy argument funkcji ln – mniejszy lub równy 0',
 1549+ 'pfunc_expr_unknown_error' => 'Błąd w wyrażeniu – nieznany błąd ($1)',
 1550+ 'pfunc_expr_not_a_number' => 'W $1: wynik nie jest liczbą',
 1551+ 'pfunc_string_too_long' => 'Błąd – długość ciągu znaków przekracza dopuszczalne $1',
 1552+);
 1553+
 1554+/** Piedmontese (Piemontèis)
 1555+ * @author Bèrto 'd Sèra
 1556+ * @author Dragonòt
 1557+ */
 1558+$messages['pms'] = array(
 1559+ 'pfunc_desc' => 'Mijora ël parse con funsion lògiche',
 1560+ 'pfunc_time_error' => 'Eror: temp nen bon',
 1561+ 'pfunc_time_too_long' => 'Eror: #time a ven ciamà tròpe vire',
 1562+ 'pfunc_rel2abs_invalid_depth' => 'Eror: profondità nen bon-a ant ël përcors: "$1" (a l\'é provasse a ciamé un grop dzora a la rèis)',
 1563+ 'pfunc_expr_stack_exhausted' => "Eror ëd l'espression: stach esaurìa",
 1564+ 'pfunc_expr_unexpected_number' => "Eror ëd l'espression: nùmer pa spetà",
 1565+ 'pfunc_expr_preg_match_failure' => "Eror ëd l'espression: eror pa spetà an preg_match",
 1566+ 'pfunc_expr_unrecognised_word' => 'Eror ëd l\'espression: paròla "$1" pa arconossùa',
 1567+ 'pfunc_expr_unexpected_operator' => "Eror ëd l'espression: operator $1 pa spetà",
 1568+ 'pfunc_expr_missing_operand' => "Eror ëd l'espression: Operand për $1 mancant",
 1569+ 'pfunc_expr_unexpected_closing_bracket' => "Eror ëd l'espression: paréntesi pa sarà",
 1570+ 'pfunc_expr_unrecognised_punctuation' => 'Eror ëd l\'espression: caràter ëd puntegiadura "$1" pa arconossù',
 1571+ 'pfunc_expr_unclosed_bracket' => "Eror ëd l'espression: paréntesi pa sarà",
 1572+ 'pfunc_expr_division_by_zero' => 'Division për zero',
 1573+ 'pfunc_expr_invalid_argument' => 'Argoment pa bon për $1: < -1 o > 1',
 1574+ 'pfunc_expr_invalid_argument_ln' => 'Argoment pa bon për ln: <= 0',
 1575+ 'pfunc_expr_unknown_error' => "Eror ëd l'espression: Eror pa conossù ($1)",
 1576+ 'pfunc_expr_not_a_number' => "An $1: l'arzultà a l'é pa un nùmer",
 1577+ 'pfunc_string_too_long' => 'Eror: la stringa a passa ël lìmit ëd $1 caràter',
 1578+);
 1579+
 1580+/** Pashto (پښتو)
 1581+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
 1582+ */
 1583+$messages['ps'] = array(
 1584+ 'pfunc_time_error' => 'ستونزه: ناسم وخت',
 1585+ 'pfunc_expr_division_by_zero' => 'وېش په صفر',
 1586+);
 1587+
 1588+/** Portuguese (Português)
 1589+ * @author Hamilton Abreu
 1590+ * @author Malafaya
 1591+ */
 1592+$messages['pt'] = array(
 1593+ 'pfunc_desc' => 'Adiciona funções lógicas ao analisador sintáctico',
 1594+ 'pfunc_time_error' => 'Erro: tempo inválido',
 1595+ 'pfunc_time_too_long' => 'Erro: demasiadas chamadas a #time',
 1596+ 'pfunc_rel2abs_invalid_depth' => 'Erro: Profundidade inválida no caminho: "$1" (foi tentado o acesso a um nó acima do nó raiz)',
 1597+ 'pfunc_expr_stack_exhausted' => 'Erro de expressão: Pilha esgotada',
 1598+ 'pfunc_expr_unexpected_number' => 'Erro de expressão: Número inesperado',
 1599+ 'pfunc_expr_preg_match_failure' => 'Erro de expressão: Falha em preg_match inesperada',
 1600+ 'pfunc_expr_unrecognised_word' => 'Erro de expressão: Palavra "$1" não reconhecida',
 1601+ 'pfunc_expr_unexpected_operator' => 'Erro de expressão: Operador $1 inesperado',
 1602+ 'pfunc_expr_missing_operand' => 'Erro de expressão: Falta operando para $1',
 1603+ 'pfunc_expr_unexpected_closing_bracket' => 'Erro de expressão: Parêntese de fecho inesperado',
 1604+ 'pfunc_expr_unrecognised_punctuation' => 'Erro de expressão: Carácter de pontuação "$1" não reconhecido',
 1605+ 'pfunc_expr_unclosed_bracket' => 'Erro de expressão: Parêntese não fechado',
 1606+ 'pfunc_expr_division_by_zero' => 'Divisão por zero',
 1607+ 'pfunc_expr_invalid_argument' => 'Argumento inválido para $1: < -1 or > 1',
 1608+ 'pfunc_expr_invalid_argument_ln' => 'Argumento inválido para ln: <= 0',
 1609+ 'pfunc_expr_unknown_error' => 'Erro de expressão: Erro desconhecido ($1)',
 1610+ 'pfunc_expr_not_a_number' => 'Em $1: resultado não é um número',
 1611+ 'pfunc_string_too_long' => 'Erro: Texto excede o limite de $1 caracteres',
 1612+);
 1613+
 1614+/** Brazilian Portuguese (Português do Brasil)
 1615+ * @author Eduardo.mps
 1616+ */
 1617+$messages['pt-br'] = array(
 1618+ 'pfunc_desc' => 'Melhora o analisador (parser) com funções lógicas',
 1619+ 'pfunc_time_error' => 'Erro: tempo inválido',
 1620+ 'pfunc_time_too_long' => 'Erro: muitas chamadas a #time',
 1621+ 'pfunc_rel2abs_invalid_depth' => 'Erro: Profundidade inválida no caminho: "$1" (foi tentado o acesso a um nó acima do nó raiz)',
 1622+ 'pfunc_expr_stack_exhausted' => 'Erro de expressão: Pilha esgotada',
 1623+ 'pfunc_expr_unexpected_number' => 'Erro de expressão: Número inesperado',
 1624+ 'pfunc_expr_preg_match_failure' => 'Erro de expressão: Falha em preg_match inesperada',
 1625+ 'pfunc_expr_unrecognised_word' => 'Erro de expressão: Palavra "$1" não reconhecida',
 1626+ 'pfunc_expr_unexpected_operator' => 'Erro de expressão: Operador $1 inesperado',
 1627+ 'pfunc_expr_missing_operand' => 'Erro de expressão: Falta operando para $1',
 1628+ 'pfunc_expr_unexpected_closing_bracket' => 'Erro de expressão: Parêntese de fechamento inesperado',
 1629+ 'pfunc_expr_unrecognised_punctuation' => 'Erro de expressão: Caractere de pontuação "$1" não reconhecido',
 1630+ 'pfunc_expr_unclosed_bracket' => 'Erro de expressão: Parêntese não fechado',
 1631+ 'pfunc_expr_division_by_zero' => 'Divisão por zero',
 1632+ 'pfunc_expr_invalid_argument' => 'Argumento inválido para $1: < -1 or > 1',
 1633+ 'pfunc_expr_invalid_argument_ln' => 'Argumento inválido para ln: <= 0',
 1634+ 'pfunc_expr_unknown_error' => 'Erro de expressão: Erro desconhecido ($1)',
 1635+ 'pfunc_expr_not_a_number' => 'Em $1: resultado não é um número',
 1636+ 'pfunc_string_too_long' => 'Erro: cadeia de caracteres excede o limite de $1 caracteres',
 1637+);
 1638+
 1639+/** Quechua (Runa Simi)
 1640+ * @author AlimanRuna
 1641+ */
 1642+$messages['qu'] = array(
 1643+ 'pfunc_desc' => 'Parser nisqata sullwa ruranakunawan allinchay',
 1644+ 'pfunc_time_error' => 'Pantasqa: Pachaqa manam allinchu',
 1645+ 'pfunc_time_too_long' => 'Pantasqa: nisyu "#time" (pacha)',
 1646+ 'pfunc_rel2abs_invalid_depth' => 'Pantasqa: ñanpa ukhu kayninqa manam allinchu: "$1" (saphi khipu hawanpi kaq khiputam aypayta munaspa)',
 1647+ 'pfunc_expr_stack_exhausted' => 'Rikuchikuypi pantasqa: Nisyu tawqa',
 1648+ 'pfunc_expr_unexpected_number' => 'Rikuchikuypi pantasqa: Mana suyakusqa yupay',
 1649+ 'pfunc_expr_preg_match_failure' => 'Rikuchikuypi pantasqa: Mana suyakusqa preg_match alqa',
 1650+ 'pfunc_expr_unrecognised_word' => 'Rikuchikuypi pantasqa: Mana riqsisqa rima "$1"',
 1651+ 'pfunc_expr_unexpected_operator' => 'Rikuchikuypi pantasqa: Mana suyakusqa ruraq "$1"',
 1652+ 'pfunc_expr_missing_operand' => 'Rikuchikuypi pantasqa: Manam kanchu $1-paq ruraq',
 1653+ 'pfunc_expr_unexpected_closing_bracket' => "Rikuchikuypi pantasqa: Nisyu wichq'aq qinchaq",
 1654+ 'pfunc_expr_unrecognised_punctuation' => 'Rikuchikuypi pantasqa: Mana riqsisqa qillqa unancha "$1"',
 1655+ 'pfunc_expr_unclosed_bracket' => "Rikuchikuypi pantasqa: Manam kanchu wichq'aq qinchaq",
 1656+ 'pfunc_expr_division_by_zero' => "Ch'usaqwan rakisqa",
 1657+ 'pfunc_expr_invalid_argument' => '$1-paq mana allin ninakuy: : < -1 icha > 1',
 1658+ 'pfunc_expr_invalid_argument_ln' => 'ln-paq mana allin ninakuy: <= 0',
 1659+ 'pfunc_expr_unknown_error' => 'Rikuchikuypi pantasqa: Mana riqsisqa pantasqa ($1)',
 1660+ 'pfunc_expr_not_a_number' => '$1-pi: lluqsiyninqa manam yupaychu',
 1661+ 'pfunc_string_too_long' => 'Pantasqa: Qillqa tiwlliqa $1 sanampa saywatam llallin',
 1662+);
 1663+
 1664+/** Romanian (Română)
 1665+ * @author KlaudiuMihaila
 1666+ * @author Stelistcristi
 1667+ */
 1668+$messages['ro'] = array(
 1669+ 'pfunc_desc' => 'Îmbunătățiți parser-ul cu funcții logice',
 1670+ 'pfunc_time_error' => 'Eroare: timp incorect',
 1671+ 'pfunc_time_too_long' => 'Eroare: prea multe apeluri #time',
 1672+ 'pfunc_rel2abs_invalid_depth' => 'Eroare: adâncime incorectă în cale: "$1" (încercat accesarea unui nod deasupra nodului rădăcină)',
 1673+ 'pfunc_expr_stack_exhausted' => 'Eroare de expresie: Stivă epuizată',
 1674+ 'pfunc_expr_unexpected_number' => 'Eroare de expresie: număr neașteptat',
 1675+ 'pfunc_expr_preg_match_failure' => 'Eroare de expresie: eșuare preg_match neașteptată',
 1676+ 'pfunc_expr_unrecognised_word' => 'Eroare de expresie: "$1" este cuvânt necunoscut',
 1677+ 'pfunc_expr_unexpected_operator' => 'Eroare de expresie: operator $1 neașteptat',
 1678+ 'pfunc_expr_missing_operand' => 'Eroare de expresie: operand lipsă pentru $1',
 1679+ 'pfunc_expr_unexpected_closing_bracket' => 'Eroare de expresie: paranteză închisă neașteptată',
 1680+ 'pfunc_expr_unrecognised_punctuation' => 'Eroare de expresie: caracter de punctuație "$1" necunoscut',
 1681+ 'pfunc_expr_unclosed_bracket' => 'Eroare de expresie: paranteză neînchisă',
 1682+ 'pfunc_expr_division_by_zero' => 'Împărțire la zero',
 1683+ 'pfunc_expr_invalid_argument' => 'Argument incorect pentru $1: < -1 sau > 1',
 1684+ 'pfunc_expr_invalid_argument_ln' => 'Argument incorect pentru ln: <= 0',
 1685+ 'pfunc_expr_unknown_error' => 'Eroare de expresie: eroare necunoscută ($1)',
 1686+ 'pfunc_expr_not_a_number' => 'În $1: rezultatul nu este un număr',
 1687+ 'pfunc_string_too_long' => 'Eroare: Şirul depășește limita de caractere de $1',
 1688+);
 1689+
 1690+/** Tarandíne (Tarandíne)
 1691+ * @author Joetaras
 1692+ */
 1693+$messages['roa-tara'] = array(
 1694+ 'pfunc_desc' => "L'analizzatore avanzate cu le funziune loggeche",
 1695+ 'pfunc_time_error' => 'Errore: Orarie invalide',
 1696+ 'pfunc_time_too_long' => 'Errore: stonne troppe #time chiamate',
 1697+ 'pfunc_rel2abs_invalid_depth' => "Errore: Profondità invalide jndr'à 'u percorse: \"\$1\" (s'à pruvate a pigghià 'nu node sus a 'u node radice)",
 1698+ 'pfunc_expr_stack_exhausted' => 'Espressione in errore: Stack anghiute',
 1699+ 'pfunc_expr_unexpected_number' => 'Espressione in errore: Numere inaspettate',
 1700+ 'pfunc_expr_preg_match_failure' => 'Espressione in errore: preg_match inaspettate e fallite',
 1701+ 'pfunc_expr_unrecognised_word' => 'Espressione in errore: Parola scanusciute "$1"',
 1702+ 'pfunc_expr_unexpected_operator' => 'Espressione in errore: Operatore $1 inaspettate',
 1703+ 'pfunc_expr_missing_operand' => 'Espressione in errore: Operande zumbate pe $1',
 1704+ 'pfunc_expr_unexpected_closing_bracket' => "Espressione in errore: Non g'onne state achiuse le parendesi",
 1705+ 'pfunc_expr_unrecognised_punctuation' => 'Espressione in errore: Carattere de punde "$1" scanusciute',
 1706+ 'pfunc_expr_unclosed_bracket' => 'Espressione in errore: Parendesi non achiuse',
 1707+ 'pfunc_expr_division_by_zero' => 'Divisione pe zero',
 1708+ 'pfunc_expr_invalid_argument' => 'Argomende invalide pe $1: < -1 o > 1',
 1709+ 'pfunc_expr_invalid_argument_ln' => 'Argomende invalide pe ln: <= 0',
 1710+ 'pfunc_expr_unknown_error' => 'Espressione in errore: Errore scanusciute ($1)',
 1711+ 'pfunc_expr_not_a_number' => "In $1: 'u resultate non g'è 'nu numere",
 1712+ 'pfunc_string_too_long' => "Errore: 'A stringhe supranesce 'u limite de $1 carattere",
 1713+);
 1714+
 1715+/** Russian (Русский)
 1716+ * @author G0rn
 1717+ * @author Александр Сигачёв
 1718+ */
 1719+$messages['ru'] = array(
 1720+ 'pfunc_desc' => 'Улучшенный синтаксический анализатор с логическими функциями',
 1721+ 'pfunc_time_error' => 'Ошибка: неправильное время',
 1722+ 'pfunc_time_too_long' => 'Ошибка: слишком много вызовов функции #time',
 1723+ 'pfunc_rel2abs_invalid_depth' => 'Ошибка: ошибочная глубина пути: «$1» (попытка доступа к узлу, находящемуся выше, чем корневой)',
 1724+ 'pfunc_expr_stack_exhausted' => 'Ошибка выражения: переполнение стека',
 1725+ 'pfunc_expr_unexpected_number' => 'Ошибка выражения: неожидаемое число',
 1726+ 'pfunc_expr_preg_match_failure' => 'Ошибка выражения: сбой preg_match',
 1727+ 'pfunc_expr_unrecognised_word' => 'Ошибка выражения: неопознанное слово «$1»',
 1728+ 'pfunc_expr_unexpected_operator' => 'Ошибка выражения: неожидаемый оператор $1',
 1729+ 'pfunc_expr_missing_operand' => 'Ошибка выражения: $1 не хватает операнда',
 1730+ 'pfunc_expr_unexpected_closing_bracket' => 'Ошибка выражения: неожидаемая закрывающая скобка',
 1731+ 'pfunc_expr_unrecognised_punctuation' => 'Ошибка выражения: неопознанный символ пунктуации «$1»',
 1732+ 'pfunc_expr_unclosed_bracket' => 'Ошибка выражения: незакрытая скобка',
 1733+ 'pfunc_expr_division_by_zero' => 'Деление на ноль',
 1734+ 'pfunc_expr_invalid_argument' => 'Ошибочный аргумент $1: < -1 или > 1',
 1735+ 'pfunc_expr_invalid_argument_ln' => 'Ошибочный аргумент ln: <= 0',
 1736+ 'pfunc_expr_unknown_error' => 'Ошибка выражения: неизвестная ошибка ($1)',
 1737+ 'pfunc_expr_not_a_number' => 'В $1: результат не является числом',
 1738+ 'pfunc_string_too_long' => 'Ошибка: строка превышает ограничение в $1 символов',
 1739+);
 1740+
 1741+/** Rusyn (Русиньскый)
 1742+ * @author Gazeb
 1743+ */
 1744+$messages['rue'] = array(
 1745+ 'pfunc_desc' => 'Росшырїня парсера о лоґічны функції',
 1746+ 'pfunc_time_error' => 'Хына: неплатный час',
 1747+ 'pfunc_time_too_long' => 'Хыба: дуже много кликаня #time',
 1748+ 'pfunc_rel2abs_invalid_depth' => 'Хыба: Неплатна глубка в стежцї: "$1" (проба о приступ до узла высшого як корїнь)',
 1749+ 'pfunc_expr_stack_exhausted' => 'Хыба выразу: Засобник переповненый',
 1750+ 'pfunc_expr_unexpected_number' => 'Хыба выразу: Чекане чісло',
 1751+ 'pfunc_expr_preg_match_failure' => 'Хыба выразу: Нечекана хыба функції preg_match',
 1752+ 'pfunc_expr_unrecognised_word' => 'Хыба выразу: Нерозпознане слово „$1“',
 1753+ 'pfunc_expr_unexpected_operator' => 'Хыба выразу: Нечеканый оператор: $1',
 1754+ 'pfunc_expr_missing_operand' => 'Хыба выразу: Хыбить операнд про $1',
 1755+ 'pfunc_expr_unexpected_closing_bracket' => 'Хыба выразу: Нечекана заперача заперка',
 1756+ 'pfunc_expr_unrecognised_punctuation' => 'Хыба выразу: Нерозпознаный роздїловый знак „$1“',
 1757+ 'pfunc_expr_unclosed_bracket' => 'Хыба ыразу: Незаперты заперкы',
 1758+ 'pfunc_expr_division_by_zero' => 'Дїлїня нулов',
 1759+ 'pfunc_expr_invalid_argument' => 'Неправилный арґумент про $1: < -1 або > 1',
 1760+ 'pfunc_expr_invalid_argument_ln' => 'Неправилный арґумент про ln: <= 0',
 1761+ 'pfunc_expr_unknown_error' => 'Хыба выразу: Незнама хыба ($1)',
 1762+ 'pfunc_expr_not_a_number' => 'У $1: резултат не є чісло',
 1763+ 'pfunc_string_too_long' => 'Хыба: Ланц є довшый як $1 {{PLURAL:$1|знак|знакы|знаків}}, што є ліміт',
 1764+);
 1765+
 1766+/** Yakut (Саха тыла)
 1767+ * @author HalanTul
 1768+ */
 1769+$messages['sah'] = array(
 1770+ 'pfunc_desc' => 'Логическай функциялаах тупсарыллыбыт синтаксическай анализатор',
 1771+ 'pfunc_time_error' => 'Алҕас: сыыһа кэм',
 1772+ 'pfunc_time_too_long' => 'Алҕас: #time функция наһаа элбэхтик хатыламмыт',
 1773+ 'pfunc_rel2abs_invalid_depth' => 'Алҕас: ошибочная глубина пути: «$1» (попытка доступа к узлу, находящемуся выше, чем корневой)',
 1774+ 'pfunc_expr_stack_exhausted' => 'Ошибка выражения: переполнение стека',
 1775+ 'pfunc_expr_unexpected_number' => 'Алҕас: кэтэһиллибэтэх чыыһыла',
 1776+ 'pfunc_expr_preg_match_failure' => 'Алҕас: preg_match моһуоктанна',
 1777+ 'pfunc_expr_unrecognised_word' => 'Алҕас: биллибэт тыл «$1»',
 1778+ 'pfunc_expr_unexpected_operator' => 'Алҕас: кэтэһиллибэтэх оператор $1',
 1779+ 'pfunc_expr_missing_operand' => 'Алҕас: $1 операнда тиийбэт',
 1780+ 'pfunc_expr_unexpected_closing_bracket' => 'Алҕас: кэтэһиллибэтэх сабар ускуопка',
 1781+ 'pfunc_expr_unrecognised_punctuation' => 'Алҕас: биллибэт пунктуация бэлиэтэ «$1»',
 1782+ 'pfunc_expr_unclosed_bracket' => 'Алҕас: сабыллыбатах ускуопка',
 1783+ 'pfunc_expr_division_by_zero' => 'Нуулга түҥэттии',
 1784+ 'pfunc_expr_invalid_argument' => '$1 алҕас аргуменнаах: < -1 or > 1',
 1785+ 'pfunc_expr_invalid_argument_ln' => 'ln аргумена сыыһалаах: <= 0',
 1786+ 'pfunc_expr_unknown_error' => 'Expression error (ошибка выражения): Биллибэт алҕас ($1)',
 1787+ 'pfunc_expr_not_a_number' => '$1 иһигэр: эппиэтэ чыыһыла буолбатах',
 1788+ 'pfunc_string_too_long' => 'Алҕас: Устуруока уһуна $1 бэлиэннэн хааччахха баппат',
 1789+);
 1790+
 1791+/** Sicilian (Sicilianu)
 1792+ * @author Melos
 1793+ * @author Santu
 1794+ */
 1795+$messages['scn'] = array(
 1796+ 'pfunc_desc' => 'Ci junci ô parser na sèrii di funzioni lòggichi',
 1797+ 'pfunc_time_error' => 'Sbàgghiu: uràriu nun vàlidu',
 1798+ 'pfunc_time_too_long' => 'Sbàgghiu: troppi chiamati a #time',
 1799+ 'pfunc_rel2abs_invalid_depth' => 'Sbàgghiu: prufunnità non vàlida ntô pircorsu "$1" (si tintau di tràsiri a nu nodu cchiù supra di la ràdica)',
 1800+ 'pfunc_expr_stack_exhausted' => 'Sbàgghiu nti la sprissioni: lu stack finìu',
 1801+ 'pfunc_expr_unexpected_number' => 'Sbàgghiu nti la sprissioni: nùmmiru non privistu',
 1802+ 'pfunc_expr_preg_match_failure' => "Sbàgghiu nti la sprissioni: sbàgghiu non privistu 'n preg_match",
 1803+ 'pfunc_expr_unrecognised_word' => 'Sbàgghiu nti la sprissioni: palora "$1" non canusciuta',
 1804+ 'pfunc_expr_unexpected_operator' => 'Sbàgghiu nti la sprissioni: upiraturi $1 non privistu',
 1805+ 'pfunc_expr_missing_operand' => 'Sbàgghiu nti la sprissioni: upirandu mancanti pi $1',
 1806+ 'pfunc_expr_unexpected_closing_bracket' => 'Sbàgghiu nti la sprissioni: parèntisi chiusa non aspittata',
 1807+ 'pfunc_expr_unrecognised_punctuation' => 'Sbàgghiu nti la sprissioni: caràttiri di puntiggiatura "$1" non canusciutu',
 1808+ 'pfunc_expr_unclosed_bracket' => 'Sbàgghiu nti la sprissioni: parèntisi non chiuruta',
 1809+ 'pfunc_expr_division_by_zero' => 'Divisioni pi zeru',
 1810+ 'pfunc_expr_invalid_argument' => 'Argumentu non vàlidu pi $1: < -1 o > 1',
 1811+ 'pfunc_expr_invalid_argument_ln' => 'Argumentu non vàlidu pi ln: <= 0',
 1812+ 'pfunc_expr_unknown_error' => 'Sbàgghiu nti la sprissioni: sbàgghiu scanusciutu ($1)',
 1813+ 'pfunc_expr_not_a_number' => 'Nti $1: lu risurtatu nun è nu nùmmiru',
 1814+ 'pfunc_string_too_long' => 'Erruri: la stringa supira lu limiti di $1 carattiri',
 1815+);
 1816+
 1817+/** Sinhala (සිංහල)
 1818+ * @author නන්දිමිතුරු
 1819+ */
 1820+$messages['si'] = array(
 1821+ 'pfunc_desc' => 'තාර්කීක ශ්‍රිතයන් උපයෝගී කරගනිමින් ව්‍යාකරණ විග්‍රහකය වර්ධනය කරන්න',
 1822+ 'pfunc_time_error' => 'දෝෂය: අනීතික වේලාව',
 1823+ 'pfunc_time_too_long' => 'දෝෂය: වේලා ඇමතුම් # පමණට වැඩිය',
 1824+ 'pfunc_rel2abs_invalid_depth' => 'දෝෂය: පෙතෙහි ගැඹුර අනීතිකයි: "$1" (මූල මංසලට ඉහළ මංසලක් ප්‍රවේශනයට උත්සාහ දැරිණි)',
 1825+ 'pfunc_expr_stack_exhausted' => 'ප්‍රකාශන දෝෂය: ඇසිරුම හිස්ව පැවතිණි',
 1826+ 'pfunc_expr_unexpected_number' => 'ප්‍රකාශන දෝෂය: අනපේක්‍ෂිත සංඛ්‍යාව',
 1827+ 'pfunc_expr_unrecognised_word' => 'ප්‍රකාශන දෝෂය: හඳුනානොගත් වදන "$1"',
 1828+ 'pfunc_expr_unexpected_operator' => 'ප්‍රකාශන දෝෂය: අනපේක්‍ෂිත $1 මෙහෙයුම්කාරකය',
 1829+ 'pfunc_expr_missing_operand' => 'ප්‍රකාශන දෝෂය: $1 සඳහා අස්ථානගත ප්‍රවර්ත්‍යය',
 1830+ 'pfunc_expr_unexpected_closing_bracket' => 'ප්‍රකාශන දෝෂය: අනපේක්‍ෂිත වැසීම් වරහන',
 1831+ 'pfunc_expr_unrecognised_punctuation' => 'ප්‍රකාශන දෝෂය: හඳුනානොගත් විරාම අක්ෂරය "$1"',
 1832+ 'pfunc_expr_unclosed_bracket' => 'ප්‍රකාශන දෝෂය: නොවැසූ වරහන',
 1833+ 'pfunc_expr_division_by_zero' => 'ශුන්‍යයෙන් බෙදීම',
 1834+ 'pfunc_expr_invalid_argument' => '$1: < -1 හෝ > 1 සඳහා අනීතික විස්තාරකය',
 1835+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 සඳහා අනීතික විස්තාරකය',
 1836+ 'pfunc_expr_unknown_error' => 'ප්‍රකාශන දෝෂය: අඥාත දෝෂය ($1)',
 1837+ 'pfunc_expr_not_a_number' => '$1: හි ප්‍රතිඵලය සංඛ්‍යාවක් නොවේ',
 1838+);
 1839+
 1840+/** Slovak (Slovenčina)
 1841+ * @author Helix84
 1842+ */
 1843+$messages['sk'] = array(
 1844+ 'pfunc_desc' => 'Rozšírenie syntaktického analyzátora o logické funkcie',
 1845+ 'pfunc_time_error' => 'Chyba: Neplatný čas',
 1846+ 'pfunc_time_too_long' => 'Chyba: príliš veľa volaní #time',
 1847+ 'pfunc_rel2abs_invalid_depth' => 'Chyba: Neplatná hĺbka v ceste: „$1“ (pokus o prístup k uzlu nad koreňovým uzlom)',
 1848+ 'pfunc_expr_stack_exhausted' => 'Chyba výrazu: Zásobník vyčerpaný',
 1849+ 'pfunc_expr_unexpected_number' => 'Chyba výrazu: Neočakávané číslo',
 1850+ 'pfunc_expr_preg_match_failure' => 'Chyba výrazu: Neočakávané zlyhanie funkcie preg_match',
 1851+ 'pfunc_expr_unrecognised_word' => 'Chyba výrazu: Nerozpoznané slovo „$1“',
 1852+ 'pfunc_expr_unexpected_operator' => 'Chyba výrazu: Neočakávaný operátor $1',
 1853+ 'pfunc_expr_missing_operand' => 'Chyba výrazu: Chýbajúci operand pre $1',
 1854+ 'pfunc_expr_unexpected_closing_bracket' => 'Chyba výrazu: Neočakávaná zatvárajúca hranatá zátvorka',
 1855+ 'pfunc_expr_unrecognised_punctuation' => 'Chyba výrazu: Nerozpoznané diakritické znamienko „$1“',
 1856+ 'pfunc_expr_unclosed_bracket' => 'Chyba výrazu: Neuzavretá hranatá zátvorka',
 1857+ 'pfunc_expr_division_by_zero' => 'Chyba výrazu: Delenie nulou',
 1858+ 'pfunc_expr_invalid_argument' => 'Neplatný argument pre $1: < -1 alebo > 1',
 1859+ 'pfunc_expr_invalid_argument_ln' => 'Neplatný argument pre ln: <= 0',
 1860+ 'pfunc_expr_unknown_error' => 'Chyba výrazu: Neznáma chyba ($1)',
 1861+ 'pfunc_expr_not_a_number' => 'V $1: výsledok nie je číslo',
 1862+ 'pfunc_string_too_long' => 'Chyba: Reťazec prekračuje limit $1 znakov',
 1863+);
 1864+
 1865+/** Slovenian (Slovenščina)
 1866+ * @author Dbc334
 1867+ */
 1868+$messages['sl'] = array(
 1869+ 'pfunc_desc' => 'Izboljša razčlenjevalnik z logičnimi funkcijami',
 1870+ 'pfunc_time_error' => 'Napaka: neveljaven čas',
 1871+ 'pfunc_time_too_long' => 'Napaka: preveč klicev #time',
 1872+ 'pfunc_rel2abs_invalid_depth' => 'Napaka: Neveljavna globina poti: »$1« (poskus dostopanja do vozlišča višjega od korenskega vozlišča)',
 1873+ 'pfunc_expr_stack_exhausted' => 'Napaka v izrazu: Sklad je izčrpan',
 1874+ 'pfunc_expr_unexpected_number' => 'Napaka v izrazu: Nepričakovani število',
 1875+ 'pfunc_expr_preg_match_failure' => 'Napaka v izrazu: Nepričakovan neuspeh preg_match',
 1876+ 'pfunc_expr_unrecognised_word' => 'Napaka v izrazu: Neprepoznana beseda »$1«',
 1877+ 'pfunc_expr_unexpected_operator' => 'Napaka v izrazu: Nepričakovan operator $1',
 1878+ 'pfunc_expr_missing_operand' => 'Napaka v izrazu: Manjkajoč operand za $1',
 1879+ 'pfunc_expr_unexpected_closing_bracket' => 'Napaka v izrazu: Nepričakovan zaključni oklepaj',
 1880+ 'pfunc_expr_unrecognised_punctuation' => 'Napaka v izrazu: Nepričakovan znak za ločilo »$1«',
 1881+ 'pfunc_expr_unclosed_bracket' => 'Napaka v izrazu: Nezaprti oklepaj',
 1882+ 'pfunc_expr_division_by_zero' => 'Deljenje z ničlo',
 1883+ 'pfunc_expr_invalid_argument' => 'Napačen argument za $1: < -1 ali > 1',
 1884+ 'pfunc_expr_invalid_argument_ln' => 'Napačen argument za ln: <= 0',
 1885+ 'pfunc_expr_unknown_error' => 'Napaka v izrazu: Neznana napaka ($1)',
 1886+ 'pfunc_expr_not_a_number' => 'V $1: rezultat ni število',
 1887+ 'pfunc_string_too_long' => 'Napaka: Niz presega omejitev $1 {{PLURAL:$1|znaka|znakov}}',
 1888+);
 1889+
 1890+/** Serbian Cyrillic ekavian (Српски (ћирилица))
 1891+ * @author Millosh
 1892+ * @author Verlor
 1893+ */
 1894+$messages['sr-ec'] = array(
 1895+ 'pfunc_desc' => 'обогати парсер логичким функцијама',
 1896+ 'pfunc_time_error' => 'Грешка: лоше време',
 1897+ 'pfunc_time_too_long' => 'Грешка: превише #time позива',
 1898+ 'pfunc_expr_stack_exhausted' => 'Грешка у изразу: стек напуњен',
 1899+ 'pfunc_expr_unexpected_number' => 'Грешка у изразу: неочекивани број',
 1900+ 'pfunc_expr_preg_match_failure' => 'Грешка у изразу: Неочекивана preg_match грешка',
 1901+ 'pfunc_expr_unrecognised_word' => 'Грешка у изразу: непозната реч "$1"',
 1902+ 'pfunc_expr_unexpected_operator' => 'Грешка у изразу: непознати оператор "$1"',
 1903+ 'pfunc_expr_missing_operand' => 'Грешка у изразу: недостаје операнд за $1',
 1904+ 'pfunc_expr_unexpected_closing_bracket' => 'Грешка у изразу: Неочекивано затварање средње заграде.',
 1905+ 'pfunc_expr_unrecognised_punctuation' => 'Грешка у изразу: Непознати интерпункцијски карактер "$1".',
 1906+ 'pfunc_expr_unclosed_bracket' => 'Грешка у изразу: Незатворена средња заграда.',
 1907+ 'pfunc_expr_division_by_zero' => 'Дељење са нулом.',
 1908+ 'pfunc_expr_invalid_argument' => 'Лош аргумент: $1 је < -1 или > 1',
 1909+ 'pfunc_expr_invalid_argument_ln' => 'Лош аргумент: ln <= 0',
 1910+ 'pfunc_expr_unknown_error' => 'Грешка у изразу: Непозната грешка ($1)',
 1911+ 'pfunc_expr_not_a_number' => 'Резултат у $1 није број.',
 1912+ 'pfunc_string_too_long' => 'Грешка: реч прекорачује $1 слова, што је постављено ограничење',
 1913+);
 1914+
 1915+/** Serbian Latin ekavian (Srpski (latinica))
 1916+ * @author Michaello
 1917+ */
 1918+$messages['sr-el'] = array(
 1919+ 'pfunc_desc' => 'obogati parser logičkim funkcijama',
 1920+ 'pfunc_time_error' => 'Greška: loše vreme',
 1921+ 'pfunc_time_too_long' => 'Greška: previše #time poziva',
 1922+ 'pfunc_expr_stack_exhausted' => 'Greška u izrazu: stek napunjen',
 1923+ 'pfunc_expr_unexpected_number' => 'Greška u izrazu: neočekivani broj',
 1924+ 'pfunc_expr_preg_match_failure' => 'Greška u izrazu: Neočekivana preg_match greška',
 1925+ 'pfunc_expr_unrecognised_word' => 'Greška u izrazu: nepoznata reč "$1"',
 1926+ 'pfunc_expr_unexpected_operator' => 'Greška u izrazu: nepoznati operator "$1"',
 1927+ 'pfunc_expr_missing_operand' => 'Greška u izrazu: nedostaje operand za $1',
 1928+ 'pfunc_expr_unexpected_closing_bracket' => 'Greška u izrazu: Neočekivano zatvaranje srednje zagrade.',
 1929+ 'pfunc_expr_unrecognised_punctuation' => 'Greška u izrazu: Nepoznati interpunkcijski karakter "$1".',
 1930+ 'pfunc_expr_unclosed_bracket' => 'Greška u izrazu: Nezatvorena srednja zagrada.',
 1931+ 'pfunc_expr_division_by_zero' => 'Deljenje sa nulom.',
 1932+ 'pfunc_expr_invalid_argument' => 'Loš argument: $1 je < -1 ili > 1',
 1933+ 'pfunc_expr_invalid_argument_ln' => 'Loš argument: ln <= 0',
 1934+ 'pfunc_expr_unknown_error' => 'Greška u izrazu: Nepoznata greška ($1)',
 1935+ 'pfunc_expr_not_a_number' => 'Rezultat u $1 nije broj.',
 1936+ 'pfunc_string_too_long' => 'Greška: reč prekoračuje $1 slova, što je postavljeno ograničenje',
 1937+);
 1938+
 1939+/** Seeltersk (Seeltersk)
 1940+ * @author Pyt
 1941+ */
 1942+$messages['stq'] = array(
 1943+ 'pfunc_desc' => 'Ärwiedert dän Parser uum logiske Funktione',
 1944+ 'pfunc_time_error' => 'Failer: uungultige Tiedangoawe',
 1945+ 'pfunc_time_too_long' => 'Failer: tou fuul #time-Aproupe',
 1946+ 'pfunc_rel2abs_invalid_depth' => 'Failer: uungultige Djüpte in Paad: „$1“ (Fersäik, ap n Knättepunkt buppe dän Haudknättepunkt toutougriepen)',
 1947+ 'pfunc_expr_stack_exhausted' => 'Expression-Failer: Stack-Uurloop',
 1948+ 'pfunc_expr_unexpected_number' => 'Expression-Failer: Nit ferwachtede Taal',
 1949+ 'pfunc_expr_preg_match_failure' => 'Expression-Failer: Uunferwachtede „preg_match“-Failfunktion',
 1950+ 'pfunc_expr_unrecognised_word' => 'Expression-Failer: Nit wierkoand Woud „$1“',
 1951+ 'pfunc_expr_unexpected_operator' => 'Expression-Failer: Uunferwachteden Operator: <strong><tt>$1</tt></strong>',
 1952+ 'pfunc_expr_missing_operand' => 'Expression-Failer: Failenden Operand foar <strong><tt>$1</tt></strong>',
 1953+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Failer: Uunferwachte sluutende kaantige Klammere',
 1954+ 'pfunc_expr_unrecognised_punctuation' => 'Expression-Failer: Nit wierkoand Satsteeken „$1“',
 1955+ 'pfunc_expr_unclosed_bracket' => 'Expression-Failer: Nit sleetene kaantige Klammer',
 1956+ 'pfunc_expr_division_by_zero' => 'Expression-Failer: Division truch Null',
 1957+ 'pfunc_expr_invalid_argument' => 'Uungultich Argument foar $1: < -1 of > 1',
 1958+ 'pfunc_expr_invalid_argument_ln' => 'Uungultich Argument foar ln: <= 0',
 1959+ 'pfunc_expr_unknown_error' => 'Expression-Failer: Uunbekoanden Failer ($1)',
 1960+ 'pfunc_expr_not_a_number' => 'Expression-Failer: In $1: Resultoat is neen Taal',
 1961+ 'pfunc_string_too_long' => 'Failer: Teekenkätte is laanger as dät Teekenlimit fon $1',
 1962+);
 1963+
 1964+/** Sundanese (Basa Sunda)
 1965+ * @author Irwangatot
 1966+ * @author Kandar
 1967+ */
 1968+$messages['su'] = array(
 1969+ 'pfunc_desc' => 'Ngembangkeun parser kalawan fungsi logis',
 1970+ 'pfunc_time_error' => 'Éror: titimangsa teu valid',
 1971+ 'pfunc_expr_division_by_zero' => 'Pambagi ku nol',
 1972+);
 1973+
 1974+/** Swedish (Svenska)
 1975+ * @author Lejonel
 1976+ * @author M.M.S.
 1977+ * @author Najami
 1978+ */
 1979+$messages['sv'] = array(
 1980+ 'pfunc_desc' => 'Lägger till logiska funktioner i parsern',
 1981+ 'pfunc_time_error' => 'Fel: ogiltig tid',
 1982+ 'pfunc_time_too_long' => 'Fel: för många anrop av #time',
 1983+ 'pfunc_rel2abs_invalid_depth' => 'Fel: felaktig djup i sökväg: "$1" (försöker nå en nod ovanför rotnoden)',
 1984+ 'pfunc_expr_stack_exhausted' => 'Fel i uttryck: Stackutrymmet tog slut',
 1985+ 'pfunc_expr_unexpected_number' => 'Fel i uttryck: Oväntat tal',
 1986+ 'pfunc_expr_preg_match_failure' => 'Fel i uttryck: Oväntad fel i preg_match',
 1987+ 'pfunc_expr_unrecognised_word' => 'Fel i uttryck: Okänt ord "$1"',
 1988+ 'pfunc_expr_unexpected_operator' => 'Fel i uttryck: Oväntad operator $1',
 1989+ 'pfunc_expr_missing_operand' => 'Fel i uttryck: Operand saknas för $1',
 1990+ 'pfunc_expr_unexpected_closing_bracket' => 'Fel i uttryck: Oväntad avslutande parentes',
 1991+ 'pfunc_expr_unrecognised_punctuation' => 'Fel i uttryck: Okänt interpunktionstecken "$1"',
 1992+ 'pfunc_expr_unclosed_bracket' => 'Fel i uttryck: Oavslutad parentes',
 1993+ 'pfunc_expr_division_by_zero' => 'Division med noll',
 1994+ 'pfunc_expr_invalid_argument' => 'Ogiltigt argument för $1: < -1 eller > 1',
 1995+ 'pfunc_expr_invalid_argument_ln' => 'Ogiltigt argument för ln: <= 0',
 1996+ 'pfunc_expr_unknown_error' => 'Fel i uttryck: Okänt fel ($1)',
 1997+ 'pfunc_expr_not_a_number' => 'I $1: resultatet är inte ett tal',
 1998+ 'pfunc_string_too_long' => 'Fel: Strängen överskrider gränsen på $1 tecken',
 1999+);
 2000+
 2001+/** Telugu (తెలుగు)
 2002+ * @author Mpradeep
 2003+ * @author Veeven
 2004+ */
 2005+$messages['te'] = array(
 2006+ 'pfunc_time_error' => 'లోపం: సమయం సరిగ్గా లేదు',
 2007+ 'pfunc_time_too_long' => 'లోపం: #timeను చాలా సార్లు ఉపయోగించారు',
 2008+ 'pfunc_rel2abs_invalid_depth' => 'లోపం: పాత్ యొక్క డెప్తు సరిగ్గాలేదు: "$1" (రూట్ నోడు కంటే పైన ఉన్న నోడు ఉపయోగించటానికి ప్రయత్నం జరిగింది)',
 2009+ 'pfunc_expr_stack_exhausted' => 'సమాసంలో(Expression) లోపం: స్టాకు మొత్తం అయిపోయింది',
 2010+ 'pfunc_expr_unexpected_number' => 'సమాసంలో(Expression) లోపం: ఊహించని సంఖ్య వచ్చింది',
 2011+ 'pfunc_expr_preg_match_failure' => 'సమాసంలో(Expression) లోపం: preg_matchలో ఊహించని విఫలం',
 2012+ 'pfunc_expr_unrecognised_word' => 'సమాసంలో(Expression) లోపం: "$1" అనే పదాన్ని గుర్తుపట్టలేకపోతున్నాను',
 2013+ 'pfunc_expr_unexpected_operator' => 'సమాసంలో(Expression) లోపం: $1 పరికర్తను(operator) ఊహించలేదు',
 2014+ 'pfunc_expr_missing_operand' => 'సమాసంలో(Expression) లోపం: $1కు ఒక ఆపరాండును ఇవ్వలేదు',
 2015+ 'pfunc_expr_unexpected_closing_bracket' => 'సమాసంలో(Expression) లోపం: ఊహించని బ్రాకెట్టు ముగింపు',
 2016+ 'pfunc_expr_unrecognised_punctuation' => 'సమాసంలో(Expression) లోపం: "$1" అనే విరామ చిహ్నాన్ని గుర్తించలేకపోతున్నాను',
 2017+ 'pfunc_expr_unclosed_bracket' => 'సమాసంలో(Expression) లోపం: బ్రాకెట్టును మూయలేదు',
 2018+ 'pfunc_expr_division_by_zero' => 'సున్నాతో భాగించారు',
 2019+ 'pfunc_expr_unknown_error' => 'సమాసంలో(Expression) లోపం: తెలియని లోపం ($1)',
 2020+ 'pfunc_expr_not_a_number' => '$1లో: వచ్చిన ఫలితం సంఖ్య కాదు',
 2021+);
 2022+
 2023+/** Tajik (Cyrillic) (Тоҷикӣ (Cyrillic))
 2024+ * @author Ibrahim
 2025+ */
 2026+$messages['tg-cyrl'] = array(
 2027+ 'pfunc_desc' => 'Ба таҷзеҳкунанда, дастурҳои мантиқӣ меафзояд',
 2028+ 'pfunc_time_error' => 'Хато: замони ғайримиҷоз',
 2029+ 'pfunc_time_too_long' => 'Хато: #time фарохонии беш аз ҳад',
 2030+ 'pfunc_rel2abs_invalid_depth' => 'Хато: Чуқурии ғайримиҷоз дар нишонӣ: "$1" (талош барои дастраси ба як нишонӣ болотар аз нишонии реша)',
 2031+ 'pfunc_expr_stack_exhausted' => 'Хатои ибора: Пушта аз даст рафтааст',
 2032+ 'pfunc_expr_unexpected_number' => 'Хатои ибора: Адади ғайримунтазир',
 2033+ 'pfunc_expr_preg_match_failure' => 'Хатои ибора: Хатои ғайримунтазири preg_match',
 2034+ 'pfunc_expr_unrecognised_word' => 'Хатои ибора: Калимаи ношинохта "$1"',
 2035+ 'pfunc_expr_unexpected_operator' => 'Хатои ибора: Амалгари ғайримунтазири $1',
 2036+ 'pfunc_expr_missing_operand' => 'Хатои ибора: Амалгари гумшуда барои $1',
 2037+ 'pfunc_expr_unexpected_closing_bracket' => 'Хатои ибора: Қафси бастаи номунтазир',
 2038+ 'pfunc_expr_unrecognised_punctuation' => 'Хатои ибора: Аломати нуқтагузории шинохтанашуда "$1"',
 2039+ 'pfunc_expr_unclosed_bracket' => 'Хатои ибора: Қафси бастанашуда',
 2040+ 'pfunc_expr_division_by_zero' => 'Тақсим бар сифр',
 2041+ 'pfunc_expr_unknown_error' => 'Хатои ибора: Хатои ношинос ($1)',
 2042+ 'pfunc_expr_not_a_number' => 'Дар $1: натиҷа адад нест',
 2043+);
 2044+
 2045+/** Tajik (Latin) (Тоҷикӣ (Latin))
 2046+ * @author Liangent
 2047+ */
 2048+$messages['tg-latn'] = array(
 2049+ 'pfunc_desc' => 'Ba taçzehkunanda, dasturhoi mantiqī meafzojad',
 2050+ 'pfunc_time_error' => 'Xato: zamoni ƣajrimiçoz',
 2051+ 'pfunc_time_too_long' => 'Xato: #time faroxoniji beş az had',
 2052+ 'pfunc_rel2abs_invalid_depth' => 'Xato: Cuquriji ƣajrimiçoz dar nişonī: "$1" (taloş baroi dastrasi ba jak nişonī bolotar az nişoniji reşa)',
 2053+ 'pfunc_expr_stack_exhausted' => 'Xatoi ibora: Puşta az dast raftaast',
 2054+ 'pfunc_expr_unexpected_number' => 'Xatoi ibora: Adadi ƣajrimuntazir',
 2055+ 'pfunc_expr_preg_match_failure' => 'Xatoi ibora: Xatoi ƣajrimuntaziri preg_match',
 2056+ 'pfunc_expr_unrecognised_word' => 'Xatoi ibora: Kalimai noşinoxta "$1"',
 2057+ 'pfunc_expr_unexpected_operator' => 'Xatoi ibora: Amalgari ƣajrimuntaziri $1',
 2058+ 'pfunc_expr_missing_operand' => 'Xatoi ibora: Amalgari gumşuda baroi $1',
 2059+ 'pfunc_expr_unexpected_closing_bracket' => 'Xatoi ibora: Qafsi bastai nomuntazir',
 2060+ 'pfunc_expr_unrecognised_punctuation' => 'Xatoi ibora: Alomati nuqtaguzoriji şinoxtanaşuda "$1"',
 2061+ 'pfunc_expr_unclosed_bracket' => 'Xatoi ibora: Qafsi bastanaşuda',
 2062+ 'pfunc_expr_division_by_zero' => 'Taqsim bar sifr',
 2063+ 'pfunc_expr_unknown_error' => 'Xatoi ibora: Xatoi noşinos ($1)',
 2064+ 'pfunc_expr_not_a_number' => 'Dar $1: natiça adad nest',
 2065+);
 2066+
 2067+/** Thai (ไทย)
 2068+ * @author Ans
 2069+ */
 2070+$messages['th'] = array(
 2071+ 'pfunc_time_error' => 'เกิดข้อผิดพลาด: ค่าเวลาไม่ถูกต้อง',
 2072+ 'pfunc_time_too_long' => 'เกิดข้อผิดพลาด: มีการเรียกใช้ #time มากเกินไป',
 2073+ 'pfunc_rel2abs_invalid_depth' => 'เกิดข้อผิดพลาด: path depth ไม่ถูกต้อง: "$1" (เป็นการพยายามที่จะเข้าถึงตำแหน่งที่อยู่เหนือตำแหน่งราก)',
 2074+ 'pfunc_expr_stack_exhausted' => 'สูตรเกิดข้อผิดพลาด: มี stack ไม่พอในการคำนวณสูตร',
 2075+ 'pfunc_expr_unexpected_number' => 'สูตรไม่ถูกต้อง: ค่าตัวเลขอยู่ผิดที่',
 2076+ 'pfunc_expr_preg_match_failure' => 'สูตรเกิดข้อผิดพลาด: เกิดความล้มเหลวในการสั่ง preg_match โดยไม่ทราบสาเหตุ',
 2077+ 'pfunc_expr_unrecognised_word' => 'สูตรไม่ถูกต้อง: "$1" เป็นคำที่ไม่รู้จัก',
 2078+ 'pfunc_expr_unexpected_operator' => 'สูตรไม่ถูกต้อง: $1 อยู่ผิดที่',
 2079+ 'pfunc_expr_missing_operand' => 'สูตรไม่ถูกต้อง: ได้รับค่าไม่ครบในการคำนวณ $1',
 2080+ 'pfunc_expr_unexpected_closing_bracket' => 'สูตรไม่ถูกต้อง: ปิดวงเล็บเกิน หรือ ปิดวงเล็บผิดที่',
 2081+ 'pfunc_expr_unrecognised_punctuation' => 'สูตรไม่ถูกต้อง: "$1" เป็นเครื่องหมายหรือตัวอักษรที่ไม่รู้จัก',
 2082+ 'pfunc_expr_unclosed_bracket' => 'สูตรไม่ถูกต้อง: ไม่ได้ปิดวงเล็บ',
 2083+ 'pfunc_expr_division_by_zero' => 'ตัวหารเป็นศูนย์',
 2084+ 'pfunc_expr_invalid_argument' => 'ค่าตัวแปรไม่ถูกต้อง: $1 ไม่สามารถรับค่าที่น้อยกว่า -1 หรือ มากกว่า 1',
 2085+ 'pfunc_expr_invalid_argument_ln' => 'ค่าตัวแปรไม่ถูกต้อง: ln ไม่สามารถรับค่าที่น้อยกว่าหรือเท่ากับศูนย์',
 2086+ 'pfunc_expr_unknown_error' => 'สูตรไม่ถูกต้อง: เกิดความผิดพลาดในสูตรโดยไม่ทราบสาเหตุ ($1)',
 2087+ 'pfunc_expr_not_a_number' => '$1: ผลลัพธ์ไม่สามารถแทนด้วยจำนวน (NAN or not a number)',
 2088+);
 2089+
 2090+/** Turkmen (Türkmençe)
 2091+ * @author Hanberke
 2092+ */
 2093+$messages['tk'] = array(
 2094+ 'pfunc_desc' => 'Parseri logiki funksiýalar bilen güýçlendir',
 2095+ 'pfunc_time_error' => 'Säwlik: nädogry wagt',
 2096+ 'pfunc_time_too_long' => 'Säwlik: aşa köp #time çagyryşlary',
 2097+ 'pfunc_rel2abs_invalid_depth' => 'Säwlik: Ýolda nädogry çuňluk: "$1" (kök düwüniň üstündäki bir düwüne barjak boldy)',
 2098+ 'pfunc_expr_stack_exhausted' => 'Aňlatma säwligi: Stek gutardy',
 2099+ 'pfunc_expr_unexpected_number' => 'Aňlatma säwligi: Garaşylmaýan san',
 2100+ 'pfunc_expr_preg_match_failure' => 'Aňlatma säwligi: Garaşylmaýan preg_match näsazlygy',
 2101+ 'pfunc_expr_unrecognised_word' => 'Aňlatma säwligi: Bilinmeýän "$1" sözi',
 2102+ 'pfunc_expr_unexpected_operator' => 'Aňlatma säwligi: Garaşylmaýan $1 operatory',
 2103+ 'pfunc_expr_missing_operand' => 'Aňlatma säwligi: $1 üçin kem operand',
 2104+ 'pfunc_expr_unexpected_closing_bracket' => 'Aňlatma säwligi: Garaşylmaýan ýapyjy ýaý',
 2105+ 'pfunc_expr_unrecognised_punctuation' => 'Aňlatma säwligi: Bilinmeýän punktuasiýa simwoly "$1"',
 2106+ 'pfunc_expr_unclosed_bracket' => 'Aňlatma säwligi: Ýapylmadyk ýaý',
 2107+ 'pfunc_expr_division_by_zero' => 'Nola bölmek',
 2108+ 'pfunc_expr_invalid_argument' => '$1: < -1 ýa-da > 1 üçin nädogry argument',
 2109+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 üçin nädogry argument',
 2110+ 'pfunc_expr_unknown_error' => 'Aňlatma säwligi: Näbelli säwlik ($1)',
 2111+ 'pfunc_expr_not_a_number' => '$1-de: netije san däl',
 2112+ 'pfunc_string_too_long' => 'Säwlik: Setir $1 simwol çäginden geçýär',
 2113+);
 2114+
 2115+/** Tagalog (Tagalog)
 2116+ * @author AnakngAraw
 2117+ */
 2118+$messages['tl'] = array(
 2119+ 'pfunc_desc' => 'Pagibayuhin ang katangian ng banghay na may mga tungkuling makatwiran (may lohika)',
 2120+ 'pfunc_time_error' => 'Kamalian: hindi tanggap na oras',
 2121+ 'pfunc_time_too_long' => 'Kamalian: napakaraming mga pagtawag sa #oras',
 2122+ 'pfunc_rel2abs_invalid_depth' => 'Kamalian: Hindi tanggap na sukat ng lalim sa daanan: "$1" (sinubok na puntahan ang isang alimpusong nasa itaas ng bugkol ng ugat)',
 2123+ 'pfunc_expr_stack_exhausted' => 'Kamalian sa pagpapahayag: Naubos na ang salansan',
 2124+ 'pfunc_expr_unexpected_number' => 'Kamalian sa pagpapahayag: Hindi inaasahang bilang',
 2125+ 'pfunc_expr_preg_match_failure' => "Kamalian sa pagpapahayag: Hindi inaasahang pagkabigo ng \"pagtutugma_ng_hibla\" (''preg_match'')",
 2126+ 'pfunc_expr_unrecognised_word' => 'Kamalian sa pagpapahayag: Hindi nakikilalang salitang "$1"',
 2127+ 'pfunc_expr_unexpected_operator' => "Kamalian sa pagpapahayag: Hindi inaasahang bantas na tagapagsagawa (''operator'') ng $1",
 2128+ 'pfunc_expr_missing_operand' => "Kamalian sa pagpapahayag: Nawawalang halaga (''operand'') para sa $1",
 2129+ 'pfunc_expr_unexpected_closing_bracket' => 'Kamalian sa pagpapahayag: Hindi inaasahang pangpagtatapos na panaklong na kasingay (braket)',
 2130+ 'pfunc_expr_unrecognised_punctuation' => 'Kamalian sa pagpapahayag: Hindi nakikilalang panitik na pangpalabantasang "$1"',
 2131+ 'pfunc_expr_unclosed_bracket' => 'Kamalian sa pagpapahayag: Hindi naisarang panaklong na kasingay (braket)',
 2132+ 'pfunc_expr_division_by_zero' => 'Paghahati sa pamamagitan ng wala (sero)',
 2133+ 'pfunc_expr_invalid_argument' => 'Hindi tanggap na pangangatwiran (argumento) para sa $1: < -1 o > 1',
 2134+ 'pfunc_expr_invalid_argument_ln' => 'Hindi tanggap na pangangatwiran (argumento) para sa ln: <= 0',
 2135+ 'pfunc_expr_unknown_error' => 'Kamalian sa pagpapahayag: Hindi nalalamang kamalian ($1)',
 2136+ 'pfunc_expr_not_a_number' => 'Sa $1: ang kinalabasan ay hindi isang bilang',
 2137+ 'pfunc_string_too_long' => 'Kamalian: Lumampas ang bagting sa $1 hangganang panitik',
 2138+);
 2139+
 2140+/** Turkish (Türkçe)
 2141+ * @author Joseph
 2142+ */
 2143+$messages['tr'] = array(
 2144+ 'pfunc_desc' => 'Derleyiciyi mantıksal fonksiyonlarla geliştir',
 2145+ 'pfunc_time_error' => 'Hata: geçersiz zaman',
 2146+ 'pfunc_time_too_long' => 'Hata: çok fazla #time çağrısı',
 2147+ 'pfunc_rel2abs_invalid_depth' => 'Hata: Yolda geçersiz derinlik: "$1" (kök düğümünün üstünde bir düğüme erişmeye çalıştı)',
 2148+ 'pfunc_expr_stack_exhausted' => 'İfade hatası: Stack bitti',
 2149+ 'pfunc_expr_unexpected_number' => 'İfade hatası: Beklenmeyen sayı',
 2150+ 'pfunc_expr_preg_match_failure' => 'İfade hatası: Beklenmedik preg_match arızası',
 2151+ 'pfunc_expr_unrecognised_word' => 'İfade hatası: Tanınmayan "$1" kelimesi',
 2152+ 'pfunc_expr_unexpected_operator' => 'İfade hatası: Beklenmedik $1 operatörü',
 2153+ 'pfunc_expr_missing_operand' => 'İfade hatası: $1 için eksik terim',
 2154+ 'pfunc_expr_unexpected_closing_bracket' => 'İfade hatası: Beklenmedik kapa parantez',
 2155+ 'pfunc_expr_unrecognised_punctuation' => 'İfade hatası: Tanınmayan noktalama karakteri "$1"',
 2156+ 'pfunc_expr_unclosed_bracket' => 'İfade hatası: Kapanmamış parantez',
 2157+ 'pfunc_expr_division_by_zero' => 'Sıfır ile bölme',
 2158+ 'pfunc_expr_invalid_argument' => '$1 için geçersiz değişken: < -1 ya da > 1',
 2159+ 'pfunc_expr_invalid_argument_ln' => 'ln için geçersiz değişken: <= 0',
 2160+ 'pfunc_expr_unknown_error' => 'İfade hatası: Bilinmeyen hata ($1)',
 2161+ 'pfunc_expr_not_a_number' => "$1'de: sonuç bir sayı değil",
 2162+ 'pfunc_string_too_long' => 'Hata: Dize $1 karakter sınırını geçiyor',
 2163+);
 2164+
 2165+/** Ukrainian (Українська)
 2166+ * @author AS
 2167+ * @author Ahonc
 2168+ */
 2169+$messages['uk'] = array(
 2170+ 'pfunc_desc' => 'Покращений синтаксичний аналізатор з логічними функціями',
 2171+ 'pfunc_time_error' => 'Помилка: неправильний час',
 2172+ 'pfunc_time_too_long' => 'Помилка: забагато викликів функції #time',
 2173+ 'pfunc_rel2abs_invalid_depth' => 'Помилка: неправильна глибина шляху: «$1» (спроба доступу до вузла, що знаходиться вище, ніж кореневий)',
 2174+ 'pfunc_expr_stack_exhausted' => 'Помилка виразу: стек переповнений',
 2175+ 'pfunc_expr_unexpected_number' => 'Помилка виразу: неочікуване число',
 2176+ 'pfunc_expr_preg_match_failure' => 'Помилка виразу: збій preg_match',
 2177+ 'pfunc_expr_unrecognised_word' => 'Помилка виразу: незрозуміле слово «$1»',
 2178+ 'pfunc_expr_unexpected_operator' => 'Помилка виразу: неочікуваний оператор $1',
 2179+ 'pfunc_expr_missing_operand' => 'Помилка виразу: бракує операнда для $1',
 2180+ 'pfunc_expr_unexpected_closing_bracket' => 'Помилка виразу: неочікувана закрита дужка',
 2181+ 'pfunc_expr_unrecognised_punctuation' => 'Помилка виразу: незрозумілий розділовий знак «$1»',
 2182+ 'pfunc_expr_unclosed_bracket' => 'Помилка виразу: незакрита дужка',
 2183+ 'pfunc_expr_division_by_zero' => 'Ділення на нуль',
 2184+ 'pfunc_expr_invalid_argument' => 'Неправильний аргумент для $1: < -1 або > 1',
 2185+ 'pfunc_expr_invalid_argument_ln' => 'Помилковий аргумент логарифма (має бути більший від нуля)',
 2186+ 'pfunc_expr_unknown_error' => 'Помилка виразу: невідома помилка ($1)',
 2187+ 'pfunc_expr_not_a_number' => 'У $1: результат не є числом',
 2188+ 'pfunc_string_too_long' => 'Помилка: довжина рядка перевищує межу в {{PLURAL:$1|$1 символ|$1 символи|$1 символів}}',
 2189+);
 2190+
 2191+/** Vèneto (Vèneto)
 2192+ * @author Candalua
 2193+ */
 2194+$messages['vec'] = array(
 2195+ 'pfunc_desc' => 'Zonta al parser na serie de funsion logiche',
 2196+ 'pfunc_time_error' => 'Eror: orario mìa valido',
 2197+ 'pfunc_time_too_long' => 'Eror: massa chiamate a #time',
 2198+ 'pfunc_rel2abs_invalid_depth' => 'Eror: profondità mìa valida nel percorso "$1" (se gà proà a accédar a un nodo piassè sora de la raìsa)',
 2199+ 'pfunc_expr_stack_exhausted' => "Eror ne l'espression: stack esaurìo",
 2200+ 'pfunc_expr_unexpected_number' => "Eror ne l'espression: xe vegnù fora un nùmaro che no se se spetava",
 2201+ 'pfunc_expr_preg_match_failure' => "Eror ne l'espression: eror inateso in preg_match",
 2202+ 'pfunc_expr_unrecognised_word' => 'Eror ne l\'espression: parola "$1" mìa riconossiùa',
 2203+ 'pfunc_expr_unexpected_operator' => "Eror ne l'espression: operator $1 inateso",
 2204+ 'pfunc_expr_missing_operand' => "Eror ne l'espression: operando mancante par $1",
 2205+ 'pfunc_expr_unexpected_closing_bracket' => "Eror ne l'espression: parentesi chiusa inatesa",
 2206+ 'pfunc_expr_unrecognised_punctuation' => 'Eror ne l\'espression: caràtere de puntegiatura "$1" mìa riconossiùo',
 2207+ 'pfunc_expr_unclosed_bracket' => "Eror ne l'espression: parentesi verta e mìa sarà",
 2208+ 'pfunc_expr_division_by_zero' => 'Division par zero',
 2209+ 'pfunc_expr_invalid_argument' => 'Argomento mìa valido par $1: < -1 or > 1',
 2210+ 'pfunc_expr_invalid_argument_ln' => 'Argomento mìa valido par ln: <= 0',
 2211+ 'pfunc_expr_unknown_error' => "Eror ne l'espression: eror sconossiùo ($1)",
 2212+ 'pfunc_expr_not_a_number' => "In $1: el risultato no'l xe mìa un nùmaro",
 2213+ 'pfunc_string_too_long' => 'Eròr: la stringa la va fora dal limite de {{PLURAL:$1|1 caràtere|$1 caràteri}}',
 2214+);
 2215+
 2216+/** Veps (Vepsan kel')
 2217+ * @author Игорь Бродский
 2218+ */
 2219+$messages['vep'] = array(
 2220+ 'pfunc_time_error' => 'Petuz: vär aig',
 2221+);
 2222+
 2223+/** Vietnamese (Tiếng Việt)
 2224+ * @author Minh Nguyen
 2225+ * @author Vinhtantran
 2226+ */
 2227+$messages['vi'] = array(
 2228+ 'pfunc_desc' => 'Nâng cao bộ xử lý với những hàm cú pháp lôgic',
 2229+ 'pfunc_time_error' => 'Lỗi: thời gian không hợp lệ',
 2230+ 'pfunc_time_too_long' => 'Lỗi: quá nhiều lần gọi #time',
 2231+ 'pfunc_rel2abs_invalid_depth' => 'Lỗi: độ sâu không hợp lệ trong đường dẫn “$1” (do cố gắng truy cập nút phía trên nút gốc)',
 2232+ 'pfunc_expr_stack_exhausted' => 'Lỗi biểu thức: Đã cạn stack',
 2233+ 'pfunc_expr_unexpected_number' => 'Lỗi biểu thức: Dư số',
 2234+ 'pfunc_expr_preg_match_failure' => 'Lỗi biểu thức: Hàm preg_match thất bại',
 2235+ 'pfunc_expr_unrecognised_word' => 'Lỗi biểu thức: Từ “$1” không rõ ràng',
 2236+ 'pfunc_expr_unexpected_operator' => "Lỗi biểu thức: Dư toán tử '''$1'''",
 2237+ 'pfunc_expr_missing_operand' => 'Lỗi biểu thức: Thiếu toán hạng trong $1',
 2238+ 'pfunc_expr_unexpected_closing_bracket' => 'Lỗi biểu thức: Dư dấu đóng ngoặc',
 2239+ 'pfunc_expr_unrecognised_punctuation' => 'Lỗi biểu thức: Dấu phân cách “$1” không rõ ràng',
 2240+ 'pfunc_expr_unclosed_bracket' => 'Lỗi biểu thức: Dấu ngoặc chưa được đóng',
 2241+ 'pfunc_expr_division_by_zero' => 'Chia cho zero',
 2242+ 'pfunc_expr_invalid_argument' => 'Tham số không hợp lệ cho $1: < −1 hay > 1',
 2243+ 'pfunc_expr_invalid_argument_ln' => 'Tham số không hợp lệ cho ln: ≤ 0',
 2244+ 'pfunc_expr_unknown_error' => 'Lỗi biểu thức: Lỗi không rõ nguyên nhân ($1)',
 2245+ 'pfunc_expr_not_a_number' => 'Trong $1: kết quả không phải là kiểu số',
 2246+ 'pfunc_string_too_long' => 'Lỗi: Chuỗi vượt quá giới hạn $1 ký tự',
 2247+);
 2248+
 2249+/** Volapük (Volapük)
 2250+ * @author Smeira
 2251+ */
 2252+$messages['vo'] = array(
 2253+ 'pfunc_time_error' => 'Pök: tim no lonöföl',
 2254+ 'pfunc_expr_division_by_zero' => 'Müedam dub ser',
 2255+ 'pfunc_expr_unknown_error' => 'Notidotapöl: pöl nesevädik ($1)',
 2256+ 'pfunc_expr_not_a_number' => 'In $1: sek no binon num',
 2257+);
 2258+
 2259+/** Yiddish (ייִדיש)
 2260+ * @author פוילישער
 2261+ */
 2262+$messages['yi'] = array(
 2263+ 'pfunc_time_error' => 'גרײַז: אומגילטיגע צײַט',
 2264+ 'pfunc_expr_unexpected_operator' => 'אויסדריק גרײַז: אומגעריכטער $1 אפעראַטאר',
 2265+ 'pfunc_expr_unclosed_bracket' => 'אויסדריק גרײַז: אומגעשלאסענער קלאַמער',
 2266+ 'pfunc_expr_not_a_number' => 'אין $1: רעזולטאַט איז נישט קיין נומער',
 2267+);
 2268+
 2269+/** Yoruba (Yorùbá)
 2270+ * @author Demmy
 2271+ */
 2272+$messages['yo'] = array(
 2273+ 'pfunc_time_error' => 'Àsìṣe: àsìkò àìtọ́',
 2274+ 'pfunc_expr_unexpected_number' => 'Àsìṣe ìgbékalẹ̀ọ̀rọ̀: Nọ́mbà àìretí',
 2275+ 'pfunc_expr_division_by_zero' => 'Pínpín pẹ̀lú òdo',
 2276+ 'pfunc_expr_not_a_number' => 'Nínú $1: èsì kìí ṣe nọ́mbà',
 2277+);
 2278+
 2279+/** Cantonese (粵語)
 2280+ * @author Shinjiman
 2281+ */
 2282+$messages['yue'] = array(
 2283+ 'pfunc_desc' => '用邏輯功能去加強處理器',
 2284+ 'pfunc_time_error' => '錯: 唔啱嘅時間',
 2285+ 'pfunc_time_too_long' => '錯: 太多 #time 呼叫',
 2286+ 'pfunc_rel2abs_invalid_depth' => '錯: 唔啱路徑嘅深度: "$1" (已經試過由頭點落個點度)',
 2287+ 'pfunc_expr_stack_exhausted' => '表達錯: 堆叠耗盡',
 2288+ 'pfunc_expr_unexpected_number' => '表達錯: 未預料嘅數字',
 2289+ 'pfunc_expr_preg_match_failure' => '表達錯: 未預料嘅 preg_match失敗',
 2290+ 'pfunc_expr_unrecognised_word' => '表達錯: 未預料嘅字 "$1"',
 2291+ 'pfunc_expr_unexpected_operator' => '表達錯: 未預料嘅 $1 運算符',
 2292+ 'pfunc_expr_missing_operand' => '表達錯: 缺少 $1 嘅運算符',
 2293+ 'pfunc_expr_unexpected_closing_bracket' => '表達錯: 未預料嘅閂括號',
 2294+ 'pfunc_expr_unrecognised_punctuation' => '表達錯: 未能認得到嘅標點 "$1"',
 2295+ 'pfunc_expr_unclosed_bracket' => '表達錯: 未閂好嘅括號',
 2296+ 'pfunc_expr_division_by_zero' => '除以零',
 2297+ 'pfunc_expr_invalid_argument' => '$1嘅無效參數: < -1 or > 1',
 2298+ 'pfunc_expr_invalid_argument_ln' => 'ln嘅無效參數: <= 0',
 2299+ 'pfunc_expr_unknown_error' => '表達錯: 未知嘅錯 ($1)',
 2300+ 'pfunc_expr_not_a_number' => '響 $1: 結果唔係數字',
 2301+);
 2302+
 2303+/** Simplified Chinese (‪中文(简体)‬)
 2304+ * @author Liangent
 2305+ * @author Philip
 2306+ * @author Shinjiman
 2307+ */
 2308+$messages['zh-hans'] = array(
 2309+ 'pfunc_desc' => '用逻辑函数加强解析器',
 2310+ 'pfunc_time_error' => '错误:无效时间',
 2311+ 'pfunc_time_too_long' => '错误:#time调用次数过多',
 2312+ 'pfunc_rel2abs_invalid_depth' => '错误:无效路径深度:“$1”(尝试访问根节点以上节点)',
 2313+ 'pfunc_expr_stack_exhausted' => '表达式错误:堆栈耗尽',
 2314+ 'pfunc_expr_unexpected_number' => '表达式错误:未预料的数字',
 2315+ 'pfunc_expr_preg_match_failure' => '表达式错误:未预料的preg_match失败',
 2316+ 'pfunc_expr_unrecognised_word' => '表达式错误:无法识别的词语“$1”',
 2317+ 'pfunc_expr_unexpected_operator' => '表达式错误:未预料的$1操作符',
 2318+ 'pfunc_expr_missing_operand' => '表达式错误:缺少$1的操作数',
 2319+ 'pfunc_expr_unexpected_closing_bracket' => '表达式错误:未预料的反括号',
 2320+ 'pfunc_expr_unrecognised_punctuation' => '表达式错误:无法识别的标点“$1”',
 2321+ 'pfunc_expr_unclosed_bracket' => '表达式错误:未封闭的括号',
 2322+ 'pfunc_expr_division_by_zero' => '零除',
 2323+ 'pfunc_expr_invalid_argument' => '$1的无效参数:< -1 或 > 1',
 2324+ 'pfunc_expr_invalid_argument_ln' => 'ln的无效参数:<= 0',
 2325+ 'pfunc_expr_unknown_error' => '表达式错误:未知错误($1)',
 2326+ 'pfunc_expr_not_a_number' => '在$1中:结果不是数字',
 2327+ 'pfunc_string_too_long' => '错误:字符串超过$1字符限制',
 2328+);
 2329+
 2330+/** Traditional Chinese (‪中文(繁體)‬)
 2331+ * @author Gaoxuewei
 2332+ * @author Liangent
 2333+ * @author Shinjiman
 2334+ */
 2335+$messages['zh-hant'] = array(
 2336+ 'pfunc_desc' => '用邏輯函數加強解析器',
 2337+ 'pfunc_time_error' => '錯誤:無效時間',
 2338+ 'pfunc_time_too_long' => '錯誤:過多的#time呼叫',
 2339+ 'pfunc_rel2abs_invalid_depth' => '錯誤:無效路徑深度:「$1」(嘗試訪問頂點以上節點)',
 2340+ 'pfunc_expr_stack_exhausted' => '表達式錯誤:堆疊耗盡',
 2341+ 'pfunc_expr_unexpected_number' => '表達式錯誤:未預料的數字',
 2342+ 'pfunc_expr_preg_match_failure' => '表達式錯誤:未預料的preg_match失敗',
 2343+ 'pfunc_expr_unrecognised_word' => '表達式錯誤:無法識別的詞語「$1」',
 2344+ 'pfunc_expr_unexpected_operator' => '表達式錯誤:未預料的$1運算子',
 2345+ 'pfunc_expr_missing_operand' => '表達式錯誤:缺少$1的運算元',
 2346+ 'pfunc_expr_unexpected_closing_bracket' => '表達式錯誤:未預料的反括號',
 2347+ 'pfunc_expr_unrecognised_punctuation' => '表達式錯誤:無法識別的標點「$1」',
 2348+ 'pfunc_expr_unclosed_bracket' => '表達式錯誤:未封閉的括號',
 2349+ 'pfunc_expr_division_by_zero' => '零除',
 2350+ 'pfunc_expr_invalid_argument' => '$1的無效參量:< -1 或 > 1',
 2351+ 'pfunc_expr_invalid_argument_ln' => 'ln的無效參量:<= 0',
 2352+ 'pfunc_expr_unknown_error' => '表達式錯誤:未知錯誤($1)',
 2353+ 'pfunc_expr_not_a_number' => '在$1中:結果不是數字',
 2354+ 'pfunc_string_too_long' => '錯誤:字符串超過$1字符限制',
 2355+);
 2356+
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions.i18n.php
___________________________________________________________________
Added: svn:eol-style
12357 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions.php
@@ -0,0 +1,124 @@
 2+<?php
 3+
 4+if ( !defined( 'MEDIAWIKI' ) ) {
 5+ die( 'This file is a MediaWiki extension, it is not a valid entry point' );
 6+}
 7+
 8+/**
 9+ * CONFIGURATION
 10+ * These variables may be overridden in LocalSettings.php after you include the
 11+ * extension file.
 12+ */
 13+
 14+/**
 15+ * Defines the maximum length of a string that string functions are allowed to operate on
 16+ * Prevention against denial of service by string function abuses.
 17+ */
 18+$wgPFStringLengthLimit = 1000;
 19+
 20+/**
 21+ * Enable string functions.
 22+ *
 23+ * Set this to true if you want your users to be able to implement their own
 24+ * parsers in the ugliest, most inefficient programming language known to man:
 25+ * MediaWiki wikitext with ParserFunctions.
 26+ *
 27+ * WARNING: enabling this may have an adverse impact on the sanity of your users.
 28+ * An alternative, saner solution for embedding complex text processing in
 29+ * MediaWiki templates can be found at: http://www.mediawiki.org/wiki/Extension:Lua
 30+ */
 31+$wgPFEnableStringFunctions = false;
 32+
 33+/** REGISTRATION */
 34+$wgExtensionFunctions[] = 'wfSetupParserFunctions';
 35+$wgExtensionCredits['parserhook'][] = array(
 36+ 'path' => __FILE__,
 37+ 'name' => 'ParserFunctions',
 38+ 'version' => '1.4.0',
 39+ 'url' => 'http://www.mediawiki.org/wiki/Extension:ParserFunctions',
 40+ 'author' => array( 'Tim Starling', 'Robert Rohde', 'Ross McClure', 'Juraj Simlovic' ),
 41+ 'descriptionmsg' => 'pfunc_desc',
 42+);
 43+
 44+$wgAutoloadClasses['ExtParserFunctions'] = dirname( __FILE__ ) . '/ParserFunctions_body.php';
 45+$wgExtensionMessagesFiles['ParserFunctions'] = dirname( __FILE__ ) . '/ParserFunctions.i18n.php';
 46+$wgExtensionMessagesFiles['ParserFunctionsMagic'] = dirname( __FILE__ ) . '/ParserFunctions.i18n.magic.php';
 47+
 48+$wgParserTestFiles[] = dirname( __FILE__ ) . "/funcsParserTests.txt";
 49+$wgParserTestFiles[] = dirname( __FILE__ ) . "/stringFunctionTests.txt";
 50+
 51+function wfSetupParserFunctions() {
 52+ global $wgPFHookStub, $wgHooks;
 53+
 54+ $wgPFHookStub = new ParserFunctions_HookStub;
 55+
 56+ $wgHooks['ParserFirstCallInit'][] = array( &$wgPFHookStub, 'registerParser' );
 57+
 58+ $wgHooks['ParserClearState'][] = array( &$wgPFHookStub, 'clearState' );
 59+}
 60+
 61+/**
 62+ * Stub class to defer loading of the bulk of the code until a parser function is
 63+ * actually used.
 64+ */
 65+class ParserFunctions_HookStub {
 66+ var $realObj;
 67+
 68+ function registerParser( $parser ) {
 69+ global $wgPFEnableStringFunctions;
 70+
 71+ if ( defined( get_class( $parser ) . '::SFH_OBJECT_ARGS' ) ) {
 72+ // These functions accept DOM-style arguments
 73+ $parser->setFunctionHook( 'if', array( &$this, 'ifObj' ), SFH_OBJECT_ARGS );
 74+ $parser->setFunctionHook( 'ifeq', array( &$this, 'ifeqObj' ), SFH_OBJECT_ARGS );
 75+ $parser->setFunctionHook( 'switch', array( &$this, 'switchObj' ), SFH_OBJECT_ARGS );
 76+ $parser->setFunctionHook( 'ifexist', array( &$this, 'ifexistObj' ), SFH_OBJECT_ARGS );
 77+ $parser->setFunctionHook( 'ifexpr', array( &$this, 'ifexprObj' ), SFH_OBJECT_ARGS );
 78+ $parser->setFunctionHook( 'iferror', array( &$this, 'iferrorObj' ), SFH_OBJECT_ARGS );
 79+ } else {
 80+ $parser->setFunctionHook( 'if', array( &$this, 'ifHook' ) );
 81+ $parser->setFunctionHook( 'ifeq', array( &$this, 'ifeq' ) );
 82+ $parser->setFunctionHook( 'switch', array( &$this, 'switchHook' ) );
 83+ $parser->setFunctionHook( 'ifexist', array( &$this, 'ifexist' ) );
 84+ $parser->setFunctionHook( 'ifexpr', array( &$this, 'ifexpr' ) );
 85+ $parser->setFunctionHook( 'iferror', array( &$this, 'iferror' ) );
 86+ }
 87+
 88+ $parser->setFunctionHook( 'expr', array( &$this, 'expr' ) );
 89+ $parser->setFunctionHook( 'time', array( &$this, 'time' ) );
 90+ $parser->setFunctionHook( 'timel', array( &$this, 'localTime' ) );
 91+ $parser->setFunctionHook( 'rel2abs', array( &$this, 'rel2abs' ) );
 92+ $parser->setFunctionHook( 'titleparts', array( &$this, 'titleparts' ) );
 93+
 94+ // String Functions
 95+ if ( $wgPFEnableStringFunctions ) {
 96+ $parser->setFunctionHook( 'len', array( &$this, 'runLen' ) );
 97+ $parser->setFunctionHook( 'pos', array( &$this, 'runPos' ) );
 98+ $parser->setFunctionHook( 'rpos', array( &$this, 'runRPos' ) );
 99+ $parser->setFunctionHook( 'sub', array( &$this, 'runSub' ) );
 100+ $parser->setFunctionHook( 'count', array( &$this, 'runCount' ) );
 101+ $parser->setFunctionHook( 'replace', array( &$this, 'runReplace' ) );
 102+ $parser->setFunctionHook( 'explode', array( &$this, 'runExplode' ) );
 103+ $parser->setFunctionHook( 'urldecode', array( &$this, 'runUrlDecode' ) );
 104+ }
 105+
 106+ return true;
 107+ }
 108+
 109+ /** Defer ParserClearState */
 110+ function clearState( $parser ) {
 111+ if ( !is_null( $this->realObj ) ) {
 112+ $this->realObj->clearState( $parser );
 113+ }
 114+ return true;
 115+ }
 116+
 117+ /** Pass through function call */
 118+ function __call( $name, $args ) {
 119+ if ( is_null( $this->realObj ) ) {
 120+ $this->realObj = new ExtParserFunctions;
 121+ $this->realObj->clearState( $args[0] );
 122+ }
 123+ return call_user_func_array( array( $this->realObj, $name ), $args );
 124+ }
 125+}
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/ParserFunctions.php
___________________________________________________________________
Added: svn:eol-style
1126 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/funcsParserTests.txt
@@ -0,0 +1,177 @@
 2+# Force the test runner to ensure the extension is loaded
 3+# fixme... this doesn't seem to work :D
 4+#!! functionhooks
 5+#time
 6+#!! endfunctionhooks
 7+
 8+# fixme: #time seems to be accepting input as local time, which strikes me as wrong
 9+
 10+!! article
 11+ParserFunctions page
 12+!! text
 13+A sample page so we can test ifexist.
 14+
 15+This used to be a Main Page, but that caused duplicate article
 16+warnings when running the normal tests at the same time.
 17+!! endarticle
 18+
 19+!! article
 20+File:Dionysos-Brunnen am Kölner Dom.jpg
 21+!! text
 22+blah blah
 23+!! endarticle
 24+
 25+!! test
 26+Input times should probably be UTC, not local time
 27+!! input
 28+{{#time:c|15 January 2001}}
 29+!!result
 30+<p>2001-01-15T00:00:00+00:00
 31+</p>
 32+!! end
 33+
 34+!! test
 35+Time test in traditional range...
 36+!! input
 37+{{#time:Y|15 January 2001}}
 38+!! result
 39+<p>2001
 40+</p>
 41+!! end
 42+
 43+!! test
 44+Time test prior to 1970 Unix creation myth
 45+!! input
 46+{{#time:Y|5 April 1967}}
 47+!! result
 48+<p>1967
 49+</p>
 50+!! end
 51+
 52+!! test
 53+Time test after the 2038 32-bit Apocalype
 54+!! input
 55+{{#time:Y|28 July 2061}}
 56+!! result
 57+<p>2061
 58+</p>
 59+!! end
 60+
 61+!! test
 62+Bug 19093: Default values don't fall through in switch
 63+!! input
 64+<{{#switch: foo | bar | #default = DEF }}>
 65+<{{#switch: foo | #default | bar = DEF }}>
 66+!! result
 67+<p>&lt;DEF&gt;
 68+&lt;DEF&gt;
 69+</p>
 70+!! end
 71+
 72+!! test
 73+{{#ifexist}}
 74+!! input
 75+{{#ifexist:Media:Foobar.jpg|Found|Not found}}
 76+{{#ifexist:ParserFunctions page|Found|Not found}}
 77+{{#ifexist:Missing|Found|Not found}}
 78+!! result
 79+<p>Found
 80+Found
 81+Not found
 82+</p>
 83+!! end
 84+
 85+!! test
 86+#if
 87+!! input
 88+{{#if: | yes | no}}
 89+{{#if: string | yes | no}}
 90+{{#if: | yes | no}}
 91+{{#if:
 92+
 93+
 94+| yes | no}}
 95+{{#if: 1==2 | yes | no}}
 96+{{#if: foo | yes }}
 97+{{#if: | yes }}(empty)
 98+{{#if: foo | | no}}(empty)
 99+{{#if: {{{1}}} | yes | no}}
 100+{{#if: {{{1|}}} | yes | no}}
 101+!! result
 102+<p>no
 103+yes
 104+no
 105+no
 106+yes
 107+yes
 108+(empty)
 109+(empty)
 110+yes
 111+no
 112+</p>
 113+!! end
 114+
 115+!! test
 116+#ifeq
 117+!!input
 118+{{#ifeq: 01 | 1 | yes | no}}
 119+{{#ifeq: 0 | -0 | yes | no}}
 120+{{#ifeq: foo | bar | yes | no}}
 121+{{#ifeq: foo | Foo | yes | no}}
 122+{{#ifeq: "01" | "1" | yes | no}}
 123+!! result
 124+<p>yes
 125+yes
 126+no
 127+no
 128+no
 129+</p>
 130+!! end
 131+
 132+!! test
 133+#iferror
 134+!!input
 135+{{#iferror: {{#expr: 1 + 2 }} | error | correct }}
 136+{{#iferror: {{#expr: 1 + X }} | error | correct }}
 137+{{#iferror: {{#expr: 1 + 2 }} | error }}
 138+{{#iferror: {{#expr: 1 + X }} | error }}
 139+{{#iferror: {{#expr: 1 + 2 }} }}
 140+{{#iferror: {{#expr: 1 + X }} }}empty
 141+!! result
 142+<p>correct
 143+error
 144+3
 145+error
 146+3
 147+empty
 148+</p>
 149+!! end
 150+
 151+
 152+!! test
 153+#ifexpr
 154+!! input
 155+{{#ifexpr: | yes | no}}
 156+{{#ifexpr: 1 > 0 | yes }}
 157+{{#ifexpr: 1 < 0 | yes }}empty
 158+{{#ifexpr: 1 > 0 | | no}}empty
 159+{{#ifexpr: 1 < 0 | | no}}
 160+{{#ifexpr: 1 > 0 }}empty
 161+!! result
 162+<p>no
 163+yes
 164+empty
 165+empty
 166+no
 167+empty
 168+</p>
 169+!! end
 170+
 171+!! test
 172+Bug 22866: #ifexpr should evaluate "-0" as false
 173+!! input
 174+{{#ifexpr: (-1)*0 | true | false }}
 175+!! result
 176+<p>false
 177+</p>
 178+!! end
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/funcsParserTests.txt
___________________________________________________________________
Added: svn:eol-style
1179 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/README
@@ -0,0 +1,21 @@
 2+ParserFunctions v1.4.0
 3+
 4+1. Licensing
 5+2. How to install
 6+3. How to config
 7+
 8+1. Licensing
 9+Licensed under GNU GPL. See COPYING for more license information.
 10+
 11+2. How to install
 12+ a. Download this tarbell and extract the contents to $IP/extensions/ParserFunctions/
 13+ where $IP is your root wiki install
 14+ b. Add 'require( "extensions/ParserFunctions/ParserFunctions.php");' to your
 15+ LocalSettings (without the single quotes)
 16+ c. Enjoy
 17+
 18+3. Tests
 19+ParserFunctions ships with two tests
 20+- Parser tests. These get added to the main parser tests, see there for docs
 21+- Expression tests. These are designed to test the math-related functions
 22+ See testExpr.php
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/README
___________________________________________________________________
Added: svn:eol-style
123 + native
Index: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/stringFunctionTests.txt
@@ -0,0 +1,32 @@
 2+# @todo expand
 3+!! functionhooks
 4+len
 5+!! endfunctionhooks
 6+
 7+!! test
 8+#len
 9+!! input
 10+{{#len:}}
 11+{{#len:0}}
 12+{{#len:test}}
 13+!!result
 14+<p>0
 15+1
 16+4
 17+</p>
 18+!! end
 19+
 20+!! test
 21+#urldecode
 22+!! input
 23+{{#urldecode:}}
 24+{{#urldecode:foo%20bar}}
 25+{{#urldecode:%D0%9C%D0%B5%D0%B4%D0%B8%D0%B0%D0%92%D0%B8%D0%BA%D0%B8}}
 26+{{#urldecode: some unescaped string}}
 27+!! result
 28+<p>foo bar
 29+МедиаВики
 30+some unescaped string
 31+</p>
 32+!! end
 33+
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions/stringFunctionTests.txt
___________________________________________________________________
Added: svn:eol-style
134 + native
Property changes on: branches/fundraising/deployment/payments_1.17/extensions/ParserFunctions
___________________________________________________________________
Added: svn:mergeinfo
235 Merged /branches/new-installer/phase3/extensions/ParserFunctions:r43664-66004
336 Merged /branches/wmf-deployment/extensions/ParserFunctions:r60970
437 Merged /branches/REL1_15/phase3/extensions/ParserFunctions:r51646
538 Merged /branches/wmf/1.16wmf4/extensions/ParserFunctions:r67177,69199,76243,77266
639 Merged /branches/sqlite/extensions/ParserFunctions:r58211-58321
740 Merged /trunk/phase3/extensions/ParserFunctions:r79828,79830,79848,79853,79950-79951,79954,79989,80006-80007,80013,80016,80080,80083,80124,80128,80238,80406,81833,83212,83590

Status & tagging log