summaryrefslogtreecommitdiff
path: root/extensions/ParserFunctions
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/ParserFunctions')
-rw-r--r--extensions/ParserFunctions/COPYING283
-rw-r--r--extensions/ParserFunctions/Convert.php889
-rw-r--r--extensions/ParserFunctions/Expr.php555
-rw-r--r--extensions/ParserFunctions/ParserFunctions.i18n.magic.php566
-rw-r--r--extensions/ParserFunctions/ParserFunctions.i18n.php4695
-rw-r--r--extensions/ParserFunctions/ParserFunctions.php115
-rw-r--r--extensions/ParserFunctions/ParserFunctions_body.php846
-rw-r--r--extensions/ParserFunctions/README21
-rw-r--r--extensions/ParserFunctions/convertTests.txt231
-rw-r--r--extensions/ParserFunctions/exprTests.txt39
-rw-r--r--extensions/ParserFunctions/funcsParserTests.txt177
-rw-r--r--extensions/ParserFunctions/stringFunctionTests.txt32
-rw-r--r--extensions/ParserFunctions/testExpr.php38
13 files changed, 8487 insertions, 0 deletions
diff --git a/extensions/ParserFunctions/COPYING b/extensions/ParserFunctions/COPYING
new file mode 100644
index 00000000..67563f07
--- /dev/null
+++ b/extensions/ParserFunctions/COPYING
@@ -0,0 +1,283 @@
+The ParserFunctions extension may be copied and redistributed under the GNU
+General Public License.
+
+-------------------------------------------------------------------------------
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/extensions/ParserFunctions/Convert.php b/extensions/ParserFunctions/Convert.php
new file mode 100644
index 00000000..2ae54d19
--- /dev/null
+++ b/extensions/ParserFunctions/Convert.php
@@ -0,0 +1,889 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+ die( 'This file is a MediaWiki extension, it is not a valid entry point' );
+}
+
+class ConvertError extends MWException {
+ public function __construct( $msg /*...*/ ) {
+ $args = func_get_args();
+ array_shift( $args );
+ array_map( 'htmlspecialchars', $args );
+ $this->message = '<strong class="error">' . wfMsgForContent( "pfunc-convert-$msg", $args ) . '</strong>';
+ }
+}
+
+class ConvertParser {
+
+ # A regex which matches the body of the string and the source unit separately
+ const UNITS_REGEX = '/^(.+?)([a-z]+\^?\d?(?:\/\w+\^?\d?)*)$/i';
+
+ # A regex which matches a number
+ const NUM_REGEX = '/\b((?:\+|\-|&minus;|\x{2212})?(\d+(?:\.\d+)?)(?:E(?:\+|\-|&minus;|\x{2212})?\d+)?)\b/iu';
+
+ # A regex *FRAGMENT* which matches SI prefixes
+ const PREFIX_REGEX = '[YZEPTGMkh(da)dcm\x{03BC}\x{00B5}npfazy]?';
+
+ /**
+ * @var ConvertUnit
+ */
+ protected $sourceUnit;
+
+ /**
+ * @var ConvertUnit
+ */
+ protected $targetUnit;
+
+ # Whether to abbreviate the output unit
+ protected $abbreviate;
+
+ # Whether to link the output unit, if possible
+ protected $link;
+
+ # If set, don't output the unit or format the number
+ protected $raw;
+
+ # What precision to round to.
+ protected $decimalPlaces;
+ protected $significantFigures;
+
+ # What language to display the units in
+ # @var Language
+ protected $language;
+
+ # The last value converted, which will be used for PLURAL evaluation
+ protected $lastValue;
+
+ /**
+ * Reset the parser so it isn't contaminated by the results of previous parses
+ */
+ public function clearState(){
+ # Make sure we break any references set up in the parameter passing below
+ unset( $this->sourceUnit );
+ unset( $this->targetUnit );
+ $this->sourceUnit = null;
+ $this->targetUnit = null;
+
+ $this->lastValue
+ = $this->link
+ = $this->precision
+ = $this->abbreviate
+ = $this->raw
+ = $this->significantFigures
+ = $this->decimalPlaces
+ = null;
+
+ $this->language = true; # prompts wfGetLangObj() to use $wgContLang
+ }
+
+ /**
+ * Evaluate a convert expression
+ * @param $args Array of the parameters passed to the original tag function
+ * @return String
+ * @throws ConvertError
+ */
+ public function execute( $args ) {
+ $this->clearState();
+ array_shift( $args ); # Dump Parser object
+
+ if( count( $args ) == 0 ){
+ # that was easy
+ return '';
+ }
+ $string = trim( array_shift( $args ) );
+
+ # Process the rest of the args
+ static $magicWords = array(
+ 'sourceunit' => null,
+ 'targetunit' => null,
+ 'linkunit' => null,
+ 'decimalplaces' => null,
+ 'significantfigures' => null,
+ 'abbreviate' => null,
+ 'rawsuffix' => null,
+ 'language' => null,
+ );
+ if( !is_object( $magicWords ) ){
+ foreach( $magicWords as $key => &$val ){
+ $magicWords[$key] =& MagicWord::get( $key );
+ }
+ # The $magicWords[key]->function() syntax doesn't work, so cast to
+ # object so we can use $magicWords->key->function() instead
+ $magicWords = (object)$magicWords;
+ }
+
+ $n = 0; # Count of unnamed parameters
+ foreach ( $args as $arg ) {
+ $parts = array_map( 'trim', explode( '=', $arg, 2 ) );
+ if ( count( $parts ) == 2 ) {
+ # Found "="
+ if ( $magicWords->sourceunit->matchStartAndRemove( $parts[0] ) ) {
+ if( $magicWords->targetunit->matchStartAndRemove( $parts[1] ) ){
+ $this->targetUnit =& $this->sourceUnit;
+ } else {
+ $this->sourceUnit = new ConvertUnit( $parts[1] );
+ }
+
+ } elseif ( $magicWords->targetunit->matchStartAndRemove( $parts[0] ) ) {
+ if( $magicWords->sourceunit->matchStartAndRemove( $parts[1] ) ){
+ $this->targetUnit =& $this->sourceUnit;
+ } else {
+ $this->targetUnit = new ConvertUnit( $parts[1] );
+ }
+
+ } elseif( $magicWords->decimalplaces->matchStartAndRemove( $parts[0] ) ) {
+ $this->decimalPlaces = intval( $parts[1] );
+
+ } elseif( $magicWords->significantfigures->matchStartAndRemove( $parts[0] ) ) {
+ # It doesn't make any sense to have negative sig-figs
+ if( intval( $parts[1] ) > 0 ){
+ $this->significantFigures = intval( $parts[1] );
+ }
+
+ } elseif( $magicWords->language->matchStartAndRemove( $parts[0] ) ) {
+ # if this is an invalid code we'll get $wgContLang back
+ $this->language = Language::factory( $parts[1] );
+ }
+
+ } elseif( $magicWords->linkunit->matchStartAndRemove( $parts[0] ) ) {
+ $this->link = true;
+
+ } elseif( $magicWords->abbreviate->matchStartAndRemove( $parts[0] ) ) {
+ $this->abbreviate = true;
+
+ } elseif( $magicWords->rawsuffix->matchStartAndRemove( $parts[0] ) ) {
+ $this->raw = true;
+
+ } elseif( $parts[0] != '' && !$n++ && !$this->targetUnit instanceof ConvertUnit ){
+ # First unnamed parameter = output unit
+ $this->targetUnit = new ConvertUnit( $parts[0] );
+ }
+ }
+
+ # Get the source unit, if not already set. This throws ConvertError on failure
+ if ( !$this->sourceUnit instanceof ConvertUnit ){
+ $this->deduceSourceUnit( $string );
+ } else {
+ # The string has no unit on the end, so it's been trimmed to the end of the
+ # last digit, meaning the unit specified by #sourceunit won't have any space
+ $string .= ' ';
+ }
+
+ # Use the default unit (SI usually)
+ if( !$this->targetUnit instanceof ConvertUnit ){
+ $this->targetUnit = $this->sourceUnit->getDefaultUnit();
+ }
+
+ if( $this->targetUnit->dimension->value != $this->sourceUnit->dimension->value ){
+ throw new ConvertError(
+ 'dimensionmismatch',
+ $this->sourceUnit->dimension->getLocalisedName(true),
+ $this->targetUnit->dimension->getLocalisedName(true)
+ );
+ }
+
+ return $this->processString( $string );
+ }
+
+ /**
+ * Find the unit at the end of the string and load $this->sourceUnit with an appropriate
+ * ConvertUnit, or throw an exception if the unit is unrecognised.
+ * @param $string
+ */
+ protected function deduceSourceUnit( $string ){
+ # Get the unit from the end of the string
+ $matches = array();
+ preg_match( self::UNITS_REGEX, $string, $matches );
+
+ if( count( $matches ) == 3 ){
+ $this->sourceUnit = new ConvertUnit( $matches[2] );
+ } else {
+ throw new ConvertError( 'nounit' );
+ }
+ }
+
+ /**
+ * Identify the values to be converted, and convert them
+ * @param $string String
+ * @return String
+ */
+ protected function processString( $string ){
+ # Replace values
+ $string = preg_replace_callback(
+ self::NUM_REGEX,
+ array( $this, 'convert' ),
+ ltrim( preg_replace( self::UNITS_REGEX, '$1', $string ) )
+ );
+ if( $this->raw ){
+ return trim( $string );
+ } else {
+ $unit = $this->targetUnit->getText(
+ $this->lastValue,
+ $this->link,
+ $this->abbreviate,
+ $this->language
+ );
+ return $string . $unit;
+ }
+ }
+
+ /**
+ * Express a value in the $sourceUnit in terms of the $targetUnit, preserving
+ * an appropriate degree of accuracy.
+ * @param $value String
+ * @return String
+ */
+ public function convert( $value ){
+ global $wgContLang;
+ $valueFloat = floatval( $value[1] );
+ $newValue = $valueFloat
+ * $this->sourceUnit->getConversion()
+ / $this->targetUnit->getConversion();
+ if( $this->decimalPlaces !== null && $this->significantFigures !== null ){
+ # round to the required number of decimal places, or the required number
+ # of significant figures, whichever is the least precise
+ $dp = floor( $this->significantFigures - log10( abs( $newValue ) ) ); # Convert SF to DP
+ $newValue = round( $newValue, max( $dp, $this->decimalPlaces ) );
+
+ } elseif( $this->decimalPlaces !== null ){
+ $newValue = round( $newValue, $this->decimalPlaces );
+
+ } elseif( $this->significantFigures !== null ){
+ $dp = floor( $this->significantFigures - log10( abs( $newValue ) ) ); # Convert SF to DP
+ $newValue = round( $newValue, $dp );
+
+ } else {
+ # Need to round to a similar accuracy as the original value. To do that we
+ # select the accuracy which will as closely as possible preserve the maximum
+ # percentage error in the value. So 36ft = 36 ± 0.5 ft, so the uncertainty
+ # is ±0.5/36 = ±1.4%. In metres this is 10.9728 ± 1.4%, or 10.9728 ± 0.154
+ # we take the stance of choosing the limit which is *more* precise than the
+ # original value.
+
+ # Strip sign and exponent
+ $num = preg_replace( self::NUM_REGEX, '$2', $value[1] );
+
+ if( strpos( $num, '.' ) !== false ){
+ # If there is a decimal point, this is the number of digits after it.
+ $dpAfter = strlen( $num ) - strpos( $num, '.' ) - 1;
+ $error = pow( 10, -$dpAfter - 1 ) * 5;
+
+ } elseif( $num == 0 ) {
+ # The logarithms below will be unhappy, and it doesn't actually matter
+ # what error we come up with, zero is still zero
+ $error = 1;
+
+ } else {
+ # Number of digits before the point
+ $dpBefore = floor( log10( abs( $num ) ) );
+
+ # Number of digits if we reverse the string = number
+ # of digits excluding trailing zeros
+ $dpAfter = floor( log10( abs( strrev( $num ) ) ) );
+
+ # How many significant figures to consider numbers like "35000" to have
+ # is a tricky question. We say 2 here because if people want to ensure
+ # that the zeros are included, they could write it as 3.500E4
+ $error = pow( 10, $dpBefore - $dpAfter - 1 ) * 5;
+ }
+
+ $errorFraction = $error / $num;
+
+ $i = 10;
+ while( $i > -10 && ( round( $newValue, $i - 1 ) != 0 ) &&
+ # Rounding to 10dp avoids floating point errors in exact conversions,
+ # which are on the order of 1E-16
+ ( round( 5 * pow( 10, -$i ) / round( $newValue, $i - 1 ), 10 ) <= round( $errorFraction, 10 ) ) )
+ {
+ $i--;
+ }
+
+ $newValue = round( $newValue, $i );
+ # We may need to stick significant zeros back onto the number
+ if( $i > 0 ){
+ if( strpos( $newValue, '.' ) !== false ){
+ $newValue = str_pad( $newValue, $i + strpos( $newValue, '.' ) + 1, '0' );
+ } else {
+ $newValue .= '.' . str_repeat( '0', $i );
+ }
+ }
+ }
+
+ # Store the last value for use in PLURAL later
+ $this->lastValue = $newValue;
+
+ return $this->raw
+ ? $newValue
+ : $wgContLang->formatNum( $newValue );
+ }
+
+}
+
+/**
+ * A dimension
+ */
+class ConvertDimension {
+
+ const MASS = 1; # KILOGRAM
+ const LENGTH = 10; # METRE
+ const TIME = 100; # SECOND
+ const TEMPERATURE = 1E3; # KELVIN
+ const QUANTITY = 1E4; # MOLE
+ const CURRENT = 1E5; # AMPERE
+ const INTENSITY = 1E6; # CANDELA
+
+ # fuel efficiencies are ugly and horrible and dimensionally confused, and have the
+ # same dimensions as LENGTH or 1/LENGTH. But someone wanted to include them... so
+ # we have up to ten dimensions which can be identified by values of this.
+ # 0 = sane unit
+ # 1 = some sort of fuel efficiency
+ const UGLY_HACK_VALUE = 1E7;
+
+ /**
+ * Dimension constants. These are the values you'd get if you added the SI
+ * base units together with the weighting given above, also the output from
+ * getDimensionHash(). Cool thing is, you can add these together to get new
+ * compound dimensions.
+ */
+ const DIM_DIMENSIONLESS = 0; # Numbers etc
+ const DIM_LENGTH = 10;
+ const DIM_AREA = 20;
+ const DIM_VOLUME = 30;
+ const DIM_TIME = 100;
+ const DIM_TIME_SQ = 200;
+ const DIM_MASS = 1;
+ const DIM_TEMPERATURE = 1000;
+ const DIM_SPEED = -90; # LENGTH / TIME
+ const DIM_ACCELERATION = -190; # LENGTH / TIME_SQ
+ const DIM_FORCE = -189; # MASS * LENGTH / TIME_SQ
+ const DIM_TORQUE = -179; # also MASS * AREA / TIME_SQ, but all units are single
+ const DIM_ENERGY = -179; # MASS * AREA / TIME_SQ, all units are compound
+ const DIM_PRESSURE = -209; # MASS / ( LENGTH * TIME_SQ )
+ const DIM_POWER = -79; # MASS * AREA / TIME
+ const DIM_DENSITY = -29; # MASS / VOLUME
+ const DIM_FUELEFFICIENCY_PVE = 10000020; # fuel efficiency in VOLUME / LENGTH
+ const DIM_FUELEFFICIENCY_NVE = 99999990; # fuel efficiency in LENGTH / VOLUME
+
+ # Map of dimension names to message keys. This also serves as a list of what
+ # dimensions will not throw an error when encountered.
+ public static $legalDimensions = array(
+ self::DIM_LENGTH => 'length',
+ self::DIM_AREA => 'area',
+ self::DIM_VOLUME => 'volume',
+ self::DIM_TIME => 'time',
+ self::DIM_TIME_SQ => 'timesquared',
+ self::DIM_MASS => 'mass',
+ self::DIM_TEMPERATURE => 'temperature',
+ self::DIM_SPEED => 'speed',
+ self::DIM_ACCELERATION => 'acceleration',
+ self::DIM_FORCE => 'force',
+ self::DIM_TORQUE => 'torque',
+ self::DIM_ENERGY => 'energy',
+ self::DIM_PRESSURE => 'pressure',
+ self::DIM_POWER => 'power',
+ self::DIM_DENSITY => 'density',
+ self::DIM_FUELEFFICIENCY_PVE => 'fuelefficiencypositive',
+ self::DIM_FUELEFFICIENCY_NVE => 'fuelefficiencynegative',
+ );
+
+ public $value;
+ protected $name;
+
+ /**
+ * Constructor
+ * @param $var ConvertDimension|Int a dimension constant or existing unit
+ * @param $var2 ConvertDimension|Int optionally another dimension constant for a compound unit $var/$var2
+ */
+ public function __construct( $var, $var2=null ){
+ static $legalDimensionsFlip;
+
+ if( is_string( $var ) ){
+ if( $legalDimensionsFlip === null ){
+ $legalDimensionsFlip = array_flip( self::$legalDimensions );
+ }
+ if( isset( $legalDimensionsFlip[$var] ) ){
+ $dim = $legalDimensionsFlip[$var];
+ } else {
+ # Should be unreachable
+ throw new ConvertError( 'unknowndimension' );
+ }
+ } elseif( $var instanceof self ){
+ $dim = $var->value;
+ } else {
+ $dim = intval( $var );
+ }
+
+ if( $var2 === null ){
+ $this->value = $dim;
+ $this->name = $this->compoundName = self::$legalDimensions[$this->value];
+
+ } else {
+ if( is_string( $var2 ) ){
+ if( $legalDimensionsFlip === null ){
+ $legalDimensionsFlip = array_flip( self::$legalDimensions );
+ }
+ if( isset( $legalDimensionsFlip[$var2] ) ){
+ $dim2 = $legalDimensionsFlip[$var2];
+ } else {
+ # Should be unreachable
+ throw new ConvertError( 'unknowndimension' );
+ }
+ } elseif( $var2 instanceof self ){
+ $dim2 = $var2->value;
+ } else {
+ $dim2 = intval( $var2 );
+ }
+
+ $this->value = $dim - $dim2;
+ if( in_array( $this->value, array_keys( self::$legalDimensions ) ) ){
+ $this->name = self::$legalDimensions[$this->value];
+ $this->compoundName = array(
+ self::$legalDimensions[$dim],
+ self::$legalDimensions[$dim2],
+ );
+ } else {
+ # Some combinations of units are fine (carats per bushel is a perfectly good,
+ # if somewhat bizarre, measure of density, for instance). But others (like
+ # carats per miles-per-gallon) are definitely not.
+ # TODO: this allows compound units like <gigawatthours>/<pascal> as a unit
+ # of volume; is that a good thing or a bad thing?
+ throw new ConvertError( 'invalidcompoundunit', "$var/$var2" );
+ }
+ }
+ }
+
+ /**
+ * Convert to string. Magic in PHP 5.1 and above.
+ * @return String
+ */
+ public function __toString(){
+ return strval( $this->name );
+ }
+
+ /**
+ * Get the name, or names, of the dimension
+ * @param $expandCompound Bool Whether to return a string instead of an array of strings in
+ * case of a compound unit
+ * @return String|Array of String
+ */
+ public function getName( $expandCompound = false ){
+ return $expandCompound
+ ? $this->name
+ : $this->compoundName;
+ }
+
+ /**
+ * Get the localised name of the dimension. Output is unescaped
+ * @return String
+ */
+ public function getLocalisedName(){
+ return wfMsg( "pfunc-convert-dimension-{$this->name}" );
+ }
+
+}
+
+class ConvertUnit {
+
+ /**
+ * array(
+ * DIMENSION => array(
+ * UNIT => array(
+ * CONVERSION,
+ * REGEX,
+ * TAKES_SI_PREFIXES,
+ * )
+ * )
+ * )
+ */
+ protected static $units = array(
+ ConvertDimension::DIM_LENGTH => array(
+ 'metre' => array( 1, 'm', true ),
+ 'angstrom' => array( 0.00000001, '\x{00C5}', false ),
+
+ 'mile' => array( 1609.344, 'mi|miles?', false ),
+ 'furlong' => array( 201.168, 'furlong', false ),
+ 'chain' => array( 20.1168 , 'chain', false ),
+ 'rod' => array( 5.0292, 'rod|pole|perch', false ),
+ 'fathom' => array( 1.8288, 'fathom', false ),
+ 'yard' => array( 0.9144, 'yards?|yd', false ),
+ 'foot' => array( 0.3048, 'foot|feet|ft', false ),
+ 'hand' => array( 0.1016, 'hands?', false ),
+ 'inch' => array( 0.0254, 'inch|inches|in', false ),
+
+ 'nauticalmile' => array( 1852, 'nauticalmiles?|nmi', false ),
+ 'nauticalmileuk' => array( 1853.184, 'old[Uu][Kk]nmi|[Bb]rnmi|admi', false ),
+ 'nauticalmileus' => array( 1853.24496, 'old[Uu][Ss]nmi', false ),
+
+ 'parsec' => array( 3.0856775813057E16, 'parsecs?|pc', true ),
+ 'lightyear' => array( 9.4607304725808E15, 'lightyears?|ly', true ),
+ 'astronomicalunit' => array( 149597870700, 'astronomicalunits?|AU|au', false ),
+ ),
+
+ ConvertDimension::DIM_AREA => array(
+ 'squarekilometre' => array( 1E6, 'km2|km\^2', false ),
+ 'squaremetre' => array( 1, 'm2|m\^2', false ),
+ 'squarecentimetre' => array( 1E-4, 'cm2|cm\^2', false ),
+ 'squaremillimetre' => array( 1E-6, 'mm2|mm\^2', false ),
+ 'hectare' => array( 1E4, 'hectares?|ha', false ),
+
+ 'squaremile' => array( 2589988.110336, 'sqmi|mi2|mi\^2', false ),
+ 'acre' => array( 4046.856422, 'acres?', false ),
+ 'squareyard' => array( 0.83612736, 'sqyd|yd2|yd\^2', false ),
+ 'squarefoot' => array( 0.09290304, 'sqft|ft2|ft\^2', false ),
+ 'squareinch' => array( 0.00064516, 'sqin|in2|in\^2', false ),
+
+ 'squarenauticalmile' => array( 3429904, 'sqnmi|nmi2|nmi\^2', false ),
+ 'dunam' => array( 1000, 'dunam', false ),
+ 'tsubo' => array( 3.305785, 'tsubo', false ),
+ ),
+
+ ConvertDimension::DIM_VOLUME => array(
+ 'cubicmetre' => array( 1, 'm3|m\^3', false ),
+ 'cubiccentimetre' => array( 1E-6, 'cm3|cm\^3', false ),
+ 'cubicmillimetre' => array( 1E-9, 'mm3|mm\^3', false ),
+ 'litre' => array( 1E-3 , 'l', true ),
+
+ 'cubicyard' => array( 0.764554857984, 'cuyd|yd3|yd\^3', false ),
+ 'cubicfoot' => array( 0.028316846592, 'cuft|ft3|ft\^3', false ),
+ 'cubicinch' => array( 0.000016387064, 'cuin|in3|in\^3', false ),
+ 'barrel' => array( 0.16365924, 'bbl|barrels?|impbbl', false ),
+ 'bushel' => array( 0.03636872, 'bsh|bushels?|impbsh', false ),
+ 'gallon' => array( 0.00454609, 'gal|gallons?|impgal', false ),
+ 'quart' => array( 0.0011365225, 'qt|quarts?|impqt', false ),
+ 'pint' => array( 0.00056826125, 'pt|pints?|imppt', false ),
+ 'fluidounce' => array( 0.0000284130625, 'floz|impfloz', false ),
+
+ 'barrelus' => array( 0.119240471196, 'usbbl', false ),
+ 'barreloil' => array( 0.158987294928, 'oilbbl', false ),
+ 'barrelbeer' => array( 0.117347765304, 'beerbbl', false ),
+ 'usgallon' => array( 0.003785411784, 'usgal', false ),
+ 'usquart' => array( 0.000946352946, 'usqt', false ),
+ 'uspint' => array( 0.000473176473, 'uspt', false ),
+ 'usfluidounce' => array( 0.0000295735295625, 'usfloz', false ),
+ 'usdrybarrel' => array( 0.11562819898508, 'usdrybbl', false ),
+ 'usbushel' => array( 0.03523907016688, 'usbsh', false ),
+ 'usdrygallon' => array( 0.00440488377086, 'usdrygal', false ),
+ 'usdryquart' => array( 0.001101220942715, 'usdryqt', false ),
+ 'usdrypint' => array( 0.0005506104713575, 'usdrypt', false ),
+ ),
+
+ ConvertDimension::DIM_TIME => array(
+ 'year' => array( 31557600, 'yr', true ),
+ 'day' => array( 86400, 'd|days?', false ),
+ 'hour' => array( 3600, 'hours?|hr|h', false ),
+ 'minute' => array( 60, 'minutes?|mins?', false ),
+ 'second' => array( 1, 's', false ),
+ ),
+
+ ConvertDimension::DIM_SPEED => array(
+ 'knot' => array( 0.514444444, 'knot|kn', false ),
+ 'speedoflight' => array( 2.9979E8, 'c', false ),
+ ),
+
+ ConvertDimension::DIM_PRESSURE => array(
+ 'pascal' => array( 1, 'Pa', true ),
+
+ 'bar' => array( 100000, 'bar', false ),
+ 'decibar' => array( 10000, 'dbar', false ),
+ 'millibar' => array( 100 , 'mbar|mb', false ),
+ 'kilobarye' => array( 100, 'kba', false ),
+ 'barye' => array( 0.1, 'ba', false ),
+
+ 'atmosphere' => array( 101325, 'atm|atmospheres?', false ),
+ 'torr' => array( 133.32237, 'torr', false ),
+ 'mmhg' => array( 133.322387415, 'mmHg', false ),
+ 'inhg' => array( 3386.38864034, 'inHg', false ),
+ 'psi' => array( 6894.757293, 'psi', false ),
+ ),
+ # TODO: other dimensions as needed
+ );
+
+ /**
+ * array(
+ * PREFIX => array(
+ * CONVERSION,
+ * REGEX,
+ * )
+ * )
+ * They're out of order because this is the order in which they are tested, and
+ * some prefixes are much more likely to occur than others
+ */
+ protected static $prefixes = array(
+ 'kilo' => array( 1E3, 'k' ),
+ 'milli' => array( 1E-3, 'm' ),
+ 'centi' => array( 1E-2, 'c' ),
+ 'giga' => array( 1E9, 'G' ),
+ 'micro' => array( 1E-6, '(?:\x{03BC}|\x{00B5})' ), # There are two similar mu characters
+ 'mega' => array( 1E6, 'M' ),
+ 'nano' => array( 1E-9, 'n' ),
+ 'hecto' => array( 1E2, 'h' ),
+ 'deca' => array( 1E1, 'da' ),
+ 'deci' => array( 1E-1, 'd' ),
+ 'yotta' => array( 1E24, 'Y' ),
+ 'zetta' => array( 1E21, 'Z' ),
+ 'exa' => array( 1E18, 'E' ),
+ 'peta' => array( 1E15, 'P' ),
+ 'tera' => array( 1E12, 'T' ),
+ 'pico' => array( 1E-12, 'p' ),
+ 'femto' => array( 1E-15, 'f' ),
+ 'atto' => array( 1E-18, 'a' ),
+ 'zepto' => array( 1E-21, 'z' ),
+ 'yocto' => array( 1E-24, 'y' ),
+ );
+
+ # Default units for each dimension
+ # TODO: this should ideally be localisable
+ protected static $defaultUnit = array(
+ ConvertDimension::DIM_LENGTH => 'metre',
+ ConvertDimension::DIM_AREA => 'squaremetre',
+ ConvertDimension::DIM_VOLUME => 'cubicmetre',
+ ConvertDimension::DIM_TIME => 'second',
+ ConvertDimension::DIM_SPEED => 'metre/second',
+ ConvertDimension::DIM_PRESSURE => 'pascal',
+ );
+
+ # An array of preprocessing conversions to apply to units
+ protected static $unitConversions = array(
+ '/^mph$/u' => 'mi/h',
+ );
+
+ # Map of UNIT => DIMENSION, created on construct
+ protected static $dimensionMap = false;
+
+ /***************** MEMBER VARIABLES *****************/
+
+ /**
+ * @var ConvertDimension
+ */
+ public $dimension;
+
+ # What number you need to multiply this unit by to get the equivalent
+ # value in SI base units
+ protected $conversion = 1;
+
+ # A regex which matches the unit
+ protected $regex;
+
+ # The name of the unit (key into $units[$dimension] above
+ protected $unitName;
+
+ # The SI prefix, if applicable
+ protected $prefix = null;
+
+ /***************** MEMBER FUNCTIONS *****************/
+
+ /**
+ * Constructor
+ * @param $rawUnit String
+ */
+ public function __construct( $rawUnit ){
+ if( self::$dimensionMap === false ){
+ self::$dimensionMap = array();
+ foreach( self::$units as $dimension => $arr ){
+ foreach( $arr as $unit => $val ){
+ self::$dimensionMap[$unit] = $dimension;
+ }
+ }
+ }
+
+ $this->parseUnit( $rawUnit );
+ }
+
+ /**
+ * Parse a raw unit string, and populate member variables
+ * @param $rawUnit String
+ */
+ protected function parseUnit( $rawUnit ){
+
+ # Do mappings like 'mph' --> 'mi/h'
+ $rawUnit = preg_replace(
+ array_keys( self::$unitConversions ),
+ array_values( self::$unitConversions ),
+ $rawUnit
+ );
+
+ $parts = explode( '/', $rawUnit );
+ array_map( 'trim', $parts );
+ if( count( $parts ) == 1 ){
+ # Single unit
+ foreach( self::$units as $dimension => $units ){
+ foreach( $units as $unit => $data ){
+ if( $rawUnit == $unit
+ || ( !$data[2] && preg_match( "/^({$data[1]})$/u", $parts[0] ) )
+ || ( $data[2] && preg_match( "/^(" . ConvertParser::PREFIX_REGEX . ")(" . $data[1] . ")$/u", $parts[0] ) ) )
+ {
+ $this->dimension = new ConvertDimension( self::$dimensionMap[$unit] );
+ $this->conversion = $data[0];
+ $this->regex = $data[1];
+ $this->unitName = $unit;
+
+ # Grab the SI prefix, if it's allowed and there is one
+ if( $data[2] && !preg_match( "/^({$data[1]})$/u", $parts[0] ) ){
+ foreach( self::$prefixes as $prefix => $pdata ){
+ if( preg_match( "/^({$pdata[1]})({$data[1]})$/u", $parts[0] ) ){
+ $this->prefix = $prefix;
+ break;
+ }
+ }
+ }
+
+ return;
+ }
+ }
+ }
+
+ # Unknown unit
+ throw new ConvertError( 'unknownunit', $rawUnit );
+
+ } elseif( count( $parts ) == 2 ){
+ # Compound unit.
+ $top = new self( $parts[0] );
+ $bottom = new self( $parts[1] );
+ $this->dimension = new ConvertDimension( $top->dimension, $bottom->dimension );
+ $this->conversion = $top->conversion / $bottom->conversion;
+ $this->regex = "(?:{$top->regex})/(?:{$bottom->regex})";
+ $this->unitName = array( $top->unitName, $bottom->unitName );
+ $this->prefix = array( $top->prefix, $bottom->prefix );
+ return;
+
+ } else {
+ # Whaaat? Too many parts
+ throw new ConvertError( 'doublecompoundunit', $rawUnit );
+ }
+ }
+
+ /**
+ * Get the mathematical factor which will convert a measurement in this unit into a
+ * measurement in the SI base unit for the dimension
+ * @return double
+ */
+ public function getConversion(){
+ return $this->conversion * $this->getPrefixConversion();
+ }
+
+ /**
+ * Get the conversion factor associated with the prefix(es) in the unit
+ * @return double
+ */
+ public function getPrefixConversion(){
+ if( !$this->prefix ){
+ return 1;
+ } elseif( is_array( $this->prefix ) ){
+ $x = $this->prefix[0] !== null
+ ? self::$prefixes[$this->prefix[0]][0]
+ : 1;
+ if( $this->prefix[1] !== null ){
+ $x *= self::$prefixes[$this->prefix[1]][0];
+ }
+ return $x;
+ } else {
+ return self::$prefixes[$this->prefix][0];
+ }
+ }
+
+ /**
+ * Get a regular expression which will match keywords for this unit
+ * @return String
+ */
+ public function getRegex(){
+ return $this->regex;
+ }
+
+ /**
+ * Get the text of the unit
+ * @param $value String number for PLURAL support
+ * @param $link Bool
+ * @param $abbreviate Bool
+ * @param $language Language
+ * @return String
+ */
+ public function getText( $value, $link=false, $abbreviate=false, $language=null ){
+ global $wgContLang;
+ $value = $wgContLang->formatNum( $value );
+
+ if( !is_array( $this->unitName ) ){
+ $msgText = $this->getTextFromMessage(
+ $this->dimension->getName(),
+ $this->unitName,
+ $this->prefix,
+ $value, $link, $abbreviate, $language
+ );
+
+ } elseif( !wfEmptyMsg( "pfunc-convert-unit-{$this->dimension->getName(true)}-{$this->unitName[0]}-{$this->unitName[1]}" ) ){
+ # A wiki has created, say, [[MediaWiki:pfunc-convert-unit-speed-metres-second]]
+ # so they can have it display "<metres per second>" rather than
+ # "<metres>/<second>"
+ $msgText = $this->getTextFromMessage(
+ $this->dimension->getName(true),
+ "{$this->unitName[0]}-{$this->unitName[1]}",
+ $this->prefix, # This will probably be rubbish, but it's the wiki users' problem, not ours
+ $value, $link, $abbreviate, $language
+ );
+
+ } else {
+ $dimensionNames = $this->dimension->getName();
+ $msgText = $this->getTextFromMessage(
+ $dimensionNames[0],
+ $this->unitName[0],
+ $this->prefix[0],
+ $value, $link, $abbreviate, $language
+ );
+ $msg2Text = $this->getTextFromMessage(
+ $dimensionNames[1],
+ $this->unitName[1],
+ $this->prefix[1],
+ 1, # Singular for denominator
+ $link, $abbreviate, $language
+ );
+ $msgText = "$msgText/$msg2Text";
+ }
+
+ return trim( $msgText );
+ }
+
+ /**
+ * Retrieve the unit text from actual messages
+ * @param $dimension String
+ * @param $unit String
+ * @param $prefix String
+ * @param $string String
+ * @param $number String the actual value (for {{PLURAL}} etc)
+ * @param $link Bool
+ * @param $abbreviate Bool
+ * @param $language Language|Bool|null
+ * @return String
+ */
+ protected function getTextFromMessage( $dimension, $unit, $prefix, $string, $number, $link, $abbreviate, $language ){
+ $abbr = $abbreviate ? '-abbr' : '';
+ $prefix = $prefix === null
+ ? ''
+ : wfMsgExt( "pfunc-convert-prefix-$prefix$abbr", array( 'parsemag', 'language' => $language ) );
+
+ $text = wfMsgExt(
+ "pfunc-convert-unit-$dimension-$unit$abbr",
+ array( 'parsemag', 'language' => $language ),
+ $number,
+ $prefix
+ );
+
+ if( $link && !wfEmptyMsg( "pfunc-convert-unit-$dimension-$unit-link" ) ){
+ $title = Title::newFromText(
+ wfMsgForContentNoTrans( "pfunc-convert-unit-$dimension-$unit-link" ),
+ $prefix
+ );
+ if( $title instanceof Title ){
+ $text = "[[{$title->getFullText()}|$text]]";
+ }
+ }
+
+ return $text;
+ }
+
+ /**
+ * Get the default (usually SI) unit associated with this particular dimension
+ * @return ConvertUnit
+ */
+ public function getDefaultUnit(){
+ return new ConvertUnit( self::$defaultUnit[$this->dimension->value] );
+ }
+}
diff --git a/extensions/ParserFunctions/Expr.php b/extensions/ParserFunctions/Expr.php
new file mode 100644
index 00000000..299d382d
--- /dev/null
+++ b/extensions/ParserFunctions/Expr.php
@@ -0,0 +1,555 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+ die( 'This file is a MediaWiki extension, it is not a valid entry point' );
+}
+
+// Character classes
+define( 'EXPR_WHITE_CLASS', " \t\r\n" );
+define( 'EXPR_NUMBER_CLASS', '0123456789.' );
+
+// Token types
+define( 'EXPR_WHITE', 1 );
+define( 'EXPR_NUMBER', 2 );
+define( 'EXPR_NEGATIVE', 3 );
+define( 'EXPR_POSITIVE', 4 );
+define( 'EXPR_PLUS', 5 );
+define( 'EXPR_MINUS', 6 );
+define( 'EXPR_TIMES', 7 );
+define( 'EXPR_DIVIDE', 8 );
+define( 'EXPR_MOD', 9 );
+define( 'EXPR_OPEN', 10 );
+define( 'EXPR_CLOSE', 11 );
+define( 'EXPR_AND', 12 );
+define( 'EXPR_OR', 13 );
+define( 'EXPR_NOT', 14 );
+define( 'EXPR_EQUALITY', 15 );
+define( 'EXPR_LESS', 16 );
+define( 'EXPR_GREATER', 17 );
+define( 'EXPR_LESSEQ', 18 );
+define( 'EXPR_GREATEREQ', 19 );
+define( 'EXPR_NOTEQ', 20 );
+define( 'EXPR_ROUND', 21 );
+define( 'EXPR_EXPONENT', 22 );
+define( 'EXPR_SINE', 23 );
+define( 'EXPR_COSINE', 24 );
+define( 'EXPR_TANGENS', 25 );
+define( 'EXPR_ARCSINE', 26 );
+define( 'EXPR_ARCCOS', 27 );
+define( 'EXPR_ARCTAN', 28 );
+define( 'EXPR_EXP', 29 );
+define( 'EXPR_LN', 30 );
+define( 'EXPR_ABS', 31 );
+define( 'EXPR_FLOOR', 32 );
+define( 'EXPR_TRUNC', 33 );
+define( 'EXPR_CEIL', 34 );
+define( 'EXPR_POW', 35 );
+define( 'EXPR_PI', 36 );
+
+class ExprError extends MWException {
+ public function __construct( $msg, $parameter = '' ) {
+ $this->message = '<strong class="error">' . wfMsgForContent( "pfunc_expr_$msg", htmlspecialchars( $parameter ) ) . '</strong>';
+ }
+}
+
+class ExprParser {
+ var $maxStackSize = 100;
+
+ var $precedence = array(
+ EXPR_NEGATIVE => 10,
+ EXPR_POSITIVE => 10,
+ EXPR_EXPONENT => 10,
+ EXPR_SINE => 9,
+ EXPR_COSINE => 9,
+ EXPR_TANGENS => 9,
+ EXPR_ARCSINE => 9,
+ EXPR_ARCCOS => 9,
+ EXPR_ARCTAN => 9,
+ EXPR_EXP => 9,
+ EXPR_LN => 9,
+ EXPR_ABS => 9,
+ EXPR_FLOOR => 9,
+ EXPR_TRUNC => 9,
+ EXPR_CEIL => 9,
+ EXPR_NOT => 9,
+ EXPR_POW => 8,
+ EXPR_TIMES => 7,
+ EXPR_DIVIDE => 7,
+ EXPR_MOD => 7,
+ EXPR_PLUS => 6,
+ EXPR_MINUS => 6,
+ EXPR_ROUND => 5,
+ EXPR_EQUALITY => 4,
+ EXPR_LESS => 4,
+ EXPR_GREATER => 4,
+ EXPR_LESSEQ => 4,
+ EXPR_GREATEREQ => 4,
+ EXPR_NOTEQ => 4,
+ EXPR_AND => 3,
+ EXPR_OR => 2,
+ EXPR_PI => 0,
+ EXPR_OPEN => -1,
+ EXPR_CLOSE => -1,
+ );
+
+ var $names = array(
+ EXPR_NEGATIVE => '-',
+ EXPR_POSITIVE => '+',
+ EXPR_NOT => 'not',
+ EXPR_TIMES => '*',
+ EXPR_DIVIDE => '/',
+ EXPR_MOD => 'mod',
+ EXPR_PLUS => '+',
+ EXPR_MINUS => '-',
+ EXPR_ROUND => 'round',
+ EXPR_EQUALITY => '=',
+ EXPR_LESS => '<',
+ EXPR_GREATER => '>',
+ EXPR_LESSEQ => '<=',
+ EXPR_GREATEREQ => '>=',
+ EXPR_NOTEQ => '<>',
+ EXPR_AND => 'and',
+ EXPR_OR => 'or',
+ EXPR_EXPONENT => 'e',
+ EXPR_SINE => 'sin',
+ EXPR_COSINE => 'cos',
+ EXPR_TANGENS => 'tan',
+ EXPR_ARCSINE => 'asin',
+ EXPR_ARCCOS => 'acos',
+ EXPR_ARCTAN => 'atan',
+ EXPR_LN => 'ln',
+ EXPR_EXP => 'exp',
+ EXPR_ABS => 'abs',
+ EXPR_FLOOR => 'floor',
+ EXPR_TRUNC => 'trunc',
+ EXPR_CEIL => 'ceil',
+ EXPR_POW => '^',
+ EXPR_PI => 'pi',
+ );
+
+
+ var $words = array(
+ 'mod' => EXPR_MOD,
+ 'and' => EXPR_AND,
+ 'or' => EXPR_OR,
+ 'not' => EXPR_NOT,
+ 'round' => EXPR_ROUND,
+ 'div' => EXPR_DIVIDE,
+ 'e' => EXPR_EXPONENT,
+ 'sin' => EXPR_SINE,
+ 'cos' => EXPR_COSINE,
+ 'tan' => EXPR_TANGENS,
+ 'asin' => EXPR_ARCSINE,
+ 'acos' => EXPR_ARCCOS,
+ 'atan' => EXPR_ARCTAN,
+ 'exp' => EXPR_EXP,
+ 'ln' => EXPR_LN,
+ 'abs' => EXPR_ABS,
+ 'trunc' => EXPR_TRUNC,
+ 'floor' => EXPR_FLOOR,
+ 'ceil' => EXPR_CEIL,
+ 'pi' => EXPR_PI,
+ );
+
+ /**
+ * Evaluate a mathematical expression
+ *
+ * The algorithm here is based on the infix to RPN algorithm given in
+ * http://montcs.bloomu.edu/~bobmon/Information/RPN/infix2rpn.shtml
+ * It's essentially the same as Dijkstra's shunting yard algorithm.
+ */
+ function doExpression( $expr ) {
+ $operands = array();
+ $operators = array();
+
+ # Unescape inequality operators
+ $expr = strtr( $expr, array( '&lt;' => '<', '&gt;' => '>',
+ '&minus;' => '-', '−' => '-' ) );
+
+ $p = 0;
+ $end = strlen( $expr );
+ $expecting = 'expression';
+
+ while ( $p < $end ) {
+ if ( count( $operands ) > $this->maxStackSize || count( $operators ) > $this->maxStackSize ) {
+ throw new ExprError( 'stack_exhausted' );
+ }
+ $char = $expr[$p];
+ $char2 = substr( $expr, $p, 2 );
+
+ // Mega if-elseif-else construct
+ // Only binary operators fall through for processing at the bottom, the rest
+ // finish their processing and continue
+
+ // First the unlimited length classes
+
+ if ( false !== strpos( EXPR_WHITE_CLASS, $char ) ) {
+ // Whitespace
+ $p += strspn( $expr, EXPR_WHITE_CLASS, $p );
+ continue;
+ } elseif ( false !== strpos( EXPR_NUMBER_CLASS, $char ) ) {
+ // Number
+ if ( $expecting != 'expression' ) {
+ throw new ExprError( 'unexpected_number' );
+ }
+
+ // Find the rest of it
+ $length = strspn( $expr, EXPR_NUMBER_CLASS, $p );
+ // Convert it to float, silently removing double decimal points
+ $operands[] = floatval( substr( $expr, $p, $length ) );
+ $p += $length;
+ $expecting = 'operator';
+ continue;
+ } elseif ( ctype_alpha( $char ) ) {
+ // Word
+ // Find the rest of it
+ $remaining = substr( $expr, $p );
+ if ( !preg_match( '/^[A-Za-z]*/', $remaining, $matches ) ) {
+ // This should be unreachable
+ throw new ExprError( 'preg_match_failure' );
+ }
+ $word = strtolower( $matches[0] );
+ $p += strlen( $word );
+
+ // Interpret the word
+ if ( !isset( $this->words[$word] ) ) {
+ throw new ExprError( 'unrecognised_word', $word );
+ }
+ $op = $this->words[$word];
+ switch( $op ) {
+ // constant
+ case EXPR_EXPONENT:
+ if ( $expecting != 'expression' ) {
+ continue;
+ }
+ $operands[] = exp( 1 );
+ $expecting = 'operator';
+ continue 2;
+ case EXPR_PI:
+ if ( $expecting != 'expression' ) {
+ throw new ExprError( 'unexpected_number' );
+ }
+ $operands[] = pi();
+ $expecting = 'operator';
+ continue 2;
+ // Unary operator
+ case EXPR_NOT:
+ case EXPR_SINE:
+ case EXPR_COSINE:
+ case EXPR_TANGENS:
+ case EXPR_ARCSINE:
+ case EXPR_ARCCOS:
+ case EXPR_ARCTAN:
+ case EXPR_EXP:
+ case EXPR_LN:
+ case EXPR_ABS:
+ case EXPR_FLOOR:
+ case EXPR_TRUNC:
+ case EXPR_CEIL:
+ if ( $expecting != 'expression' ) {
+ throw new ExprError( 'unexpected_operator', $word );
+ }
+ $operators[] = $op;
+ continue 2;
+ }
+ // Binary operator, fall through
+ $name = $word;
+ }
+
+ // Next the two-character operators
+
+ elseif ( $char2 == '<=' ) {
+ $name = $char2;
+ $op = EXPR_LESSEQ;
+ $p += 2;
+ } elseif ( $char2 == '>=' ) {
+ $name = $char2;
+ $op = EXPR_GREATEREQ;
+ $p += 2;
+ } elseif ( $char2 == '<>' || $char2 == '!=' ) {
+ $name = $char2;
+ $op = EXPR_NOTEQ;
+ $p += 2;
+ }
+
+ // Finally the single-character operators
+
+ elseif ( $char == '+' ) {
+ ++$p;
+ if ( $expecting == 'expression' ) {
+ // Unary plus
+ $operators[] = EXPR_POSITIVE;
+ continue;
+ } else {
+ // Binary plus
+ $op = EXPR_PLUS;
+ }
+ } elseif ( $char == '-' ) {
+ ++$p;
+ if ( $expecting == 'expression' ) {
+ // Unary minus
+ $operators[] = EXPR_NEGATIVE;
+ continue;
+ } else {
+ // Binary minus
+ $op = EXPR_MINUS;
+ }
+ } elseif ( $char == '*' ) {
+ $name = $char;
+ $op = EXPR_TIMES;
+ ++$p;
+ } elseif ( $char == '/' ) {
+ $name = $char;
+ $op = EXPR_DIVIDE;
+ ++$p;
+ } elseif ( $char == '^' ) {
+ $name = $char;
+ $op = EXPR_POW;
+ ++$p;
+ } elseif ( $char == '(' ) {
+ if ( $expecting == 'operator' ) {
+ throw new ExprError( 'unexpected_operator', '(' );
+ }
+ $operators[] = EXPR_OPEN;
+ ++$p;
+ continue;
+ } elseif ( $char == ')' ) {
+ $lastOp = end( $operators );
+ while ( $lastOp && $lastOp != EXPR_OPEN ) {
+ $this->doOperation( $lastOp, $operands );
+ array_pop( $operators );
+ $lastOp = end( $operators );
+ }
+ if ( $lastOp ) {
+ array_pop( $operators );
+ } else {
+ throw new ExprError( 'unexpected_closing_bracket' );
+ }
+ $expecting = 'operator';
+ ++$p;
+ continue;
+ } elseif ( $char == '=' ) {
+ $name = $char;
+ $op = EXPR_EQUALITY;
+ ++$p;
+ } elseif ( $char == '<' ) {
+ $name = $char;
+ $op = EXPR_LESS;
+ ++$p;
+ } elseif ( $char == '>' ) {
+ $name = $char;
+ $op = EXPR_GREATER;
+ ++$p;
+ } else {
+ throw new ExprError( 'unrecognised_punctuation', UtfNormal::cleanUp( $char ) );
+ }
+
+ // Binary operator processing
+ if ( $expecting == 'expression' ) {
+ throw new ExprError( 'unexpected_operator', $name );
+ }
+
+ // Shunting yard magic
+ $lastOp = end( $operators );
+ while ( $lastOp && $this->precedence[$op] <= $this->precedence[$lastOp] ) {
+ $this->doOperation( $lastOp, $operands );
+ array_pop( $operators );
+ $lastOp = end( $operators );
+ }
+ $operators[] = $op;
+ $expecting = 'expression';
+ }
+
+ // Finish off the operator array
+ while ( $op = array_pop( $operators ) ) {
+ if ( $op == EXPR_OPEN ) {
+ throw new ExprError( 'unclosed_bracket' );
+ }
+ $this->doOperation( $op, $operands );
+ }
+
+ return implode( "<br />\n", $operands );
+ }
+
+ function doOperation( $op, &$stack ) {
+ switch ( $op ) {
+ case EXPR_NEGATIVE:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = -$arg;
+ break;
+ case EXPR_POSITIVE:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ break;
+ case EXPR_TIMES:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = $left * $right;
+ break;
+ case EXPR_DIVIDE:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ if ( $right == 0 ) throw new ExprError( 'division_by_zero', $this->names[$op] );
+ $stack[] = $left / $right;
+ break;
+ case EXPR_MOD:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ if ( $right == 0 ) throw new ExprError( 'division_by_zero', $this->names[$op] );
+ $stack[] = $left % $right;
+ break;
+ case EXPR_PLUS:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = $left + $right;
+ break;
+ case EXPR_MINUS:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = $left - $right;
+ break;
+ case EXPR_AND:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left && $right ) ? 1 : 0;
+ break;
+ case EXPR_OR:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left || $right ) ? 1 : 0;
+ break;
+ case EXPR_EQUALITY:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left == $right ) ? 1 : 0;
+ break;
+ case EXPR_NOT:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = ( !$arg ) ? 1 : 0;
+ break;
+ case EXPR_ROUND:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $digits = intval( array_pop( $stack ) );
+ $value = array_pop( $stack );
+ $stack[] = round( $value, $digits );
+ break;
+ case EXPR_LESS:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left < $right ) ? 1 : 0;
+ break;
+ case EXPR_GREATER:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left > $right ) ? 1 : 0;
+ break;
+ case EXPR_LESSEQ:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left <= $right ) ? 1 : 0;
+ break;
+ case EXPR_GREATEREQ:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left >= $right ) ? 1 : 0;
+ break;
+ case EXPR_NOTEQ:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = ( $left != $right ) ? 1 : 0;
+ break;
+ case EXPR_EXPONENT:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ $stack[] = $left * pow( 10, $right );
+ break;
+ case EXPR_SINE:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = sin( $arg );
+ break;
+ case EXPR_COSINE:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = cos( $arg );
+ break;
+ case EXPR_TANGENS:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = tan( $arg );
+ break;
+ case EXPR_ARCSINE:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ if ( $arg < -1 || $arg > 1 ) throw new ExprError( 'invalid_argument', $this->names[$op] );
+ $stack[] = asin( $arg );
+ break;
+ case EXPR_ARCCOS:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ if ( $arg < -1 || $arg > 1 ) throw new ExprError( 'invalid_argument', $this->names[$op] );
+ $stack[] = acos( $arg );
+ break;
+ case EXPR_ARCTAN:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = atan( $arg );
+ break;
+ case EXPR_EXP:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = exp( $arg );
+ break;
+ case EXPR_LN:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ if ( $arg <= 0 ) throw new ExprError( 'invalid_argument_ln', $this->names[$op] );
+ $stack[] = log( $arg );
+ break;
+ case EXPR_ABS:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = abs( $arg );
+ break;
+ case EXPR_FLOOR:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = floor( $arg );
+ break;
+ case EXPR_TRUNC:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = (int)$arg;
+ break;
+ case EXPR_CEIL:
+ if ( count( $stack ) < 1 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $arg = array_pop( $stack );
+ $stack[] = ceil( $arg );
+ break;
+ case EXPR_POW:
+ if ( count( $stack ) < 2 ) throw new ExprError( 'missing_operand', $this->names[$op] );
+ $right = array_pop( $stack );
+ $left = array_pop( $stack );
+ if ( false === ( $stack[] = pow( $left, $right ) ) ) throw new ExprError( 'division_by_zero', $this->names[$op] );
+ break;
+ default:
+ // Should be impossible to reach here.
+ throw new ExprError( 'unknown_error' );
+ }
+ }
+}
diff --git a/extensions/ParserFunctions/ParserFunctions.i18n.magic.php b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php
new file mode 100644
index 00000000..78ba7747
--- /dev/null
+++ b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php
@@ -0,0 +1,566 @@
+<?php
+
+$magicWords = array();
+
+/**
+ * English
+ */
+
+$magicWords = array();
+
+/** English (English) */
+$magicWords['en'] = array(
+ 'expr' => array( 0, 'expr' ),
+ 'if' => array( 0, 'if' ),
+ 'ifeq' => array( 0, 'ifeq' ),
+ 'ifexpr' => array( 0, 'ifexpr' ),
+ 'iferror' => array( 0, 'iferror' ),
+ 'switch' => array( 0, 'switch' ),
+ 'default' => array( 0, '#default' ),
+ 'ifexist' => array( 0, 'ifexist' ),
+ 'time' => array( 0, 'time' ),
+ 'timel' => array( 0, 'timel' ),
+ 'rel2abs' => array( 0, 'rel2abs' ),
+ 'titleparts' => array( 0, 'titleparts' ),
+ 'convert' => array( 0, 'convert' ),
+ 'sourceunit' => array( 0, '#sourceunit' ),
+ 'targetunit' => array( 0, '#targetunit' ),
+ 'linkunit' => array( 0, '#linkunit' ),
+ 'decimalplaces' => array( 0, '#dp' ),
+ 'significantfigures' => array( 0, '#sf' ),
+ 'abbreviate' => array( 0, '#abbreviate' ),
+ 'language' => array( 0, '#language' ),
+ 'len' => array( 0, 'len' ),
+ 'pos' => array( 0, 'pos' ),
+ 'rpos' => array( 0, 'rpos' ),
+ 'sub' => array( 0, 'sub' ),
+ 'count' => array( 0, 'count' ),
+ 'replace' => array( 0, 'replace' ),
+ 'explode' => array( 0, 'explode' ),
+ 'urldecode' => array( 0, 'urldecode' ),
+);
+
+/** Arabic (العربية) */
+$magicWords['ar'] = array(
+ 'expr' => array( 0, 'تعبير' ),
+ 'if' => array( 0, 'لو' ),
+ 'ifeq' => array( 0, 'لومعادلة' ),
+ 'ifexpr' => array( 0, 'لوتعبير' ),
+ 'iferror' => array( 0, 'لوخطأ' ),
+ 'switch' => array( 0, 'تبديل' ),
+ 'default' => array( 0, '#افتراضي' ),
+ 'ifexist' => array( 0, 'لوموجود' ),
+ 'time' => array( 0, 'وقت' ),
+ 'timel' => array( 0, 'تيمل' ),
+ 'rel2abs' => array( 0, 'ريلتوآبس' ),
+ 'titleparts' => array( 0, 'أجزاء_العنوان' ),
+ 'language' => array( 0, '#لغة:' ),
+ 'len' => array( 0, 'لين' ),
+ 'pos' => array( 0, 'بوس' ),
+ 'rpos' => array( 0, 'آربوس' ),
+ 'sub' => array( 0, 'متفرع' ),
+ 'count' => array( 0, 'عدد' ),
+ 'replace' => array( 0, 'استبدال' ),
+ 'explode' => array( 0, 'انفجار' ),
+ 'urldecode' => array( 0, 'فك_مسار' ),
+);
+
+/** Aramaic (ܐܪܡܝܐ) */
+$magicWords['arc'] = array(
+ 'language' => array( 0, '#ܠܫܢܐ:' ),
+);
+
+/** Egyptian Spoken Arabic (مصرى) */
+$magicWords['arz'] = array(
+ 'expr' => array( 0, 'تعبير', 'expr' ),
+ 'if' => array( 0, 'لو', 'if' ),
+ 'ifeq' => array( 0, 'لومعادلة', 'ifeq' ),
+ 'ifexpr' => array( 0, 'لوتعبير', 'ifexpr' ),
+ 'iferror' => array( 0, 'لوخطأ', 'iferror' ),
+ 'switch' => array( 0, 'تبديل', 'switch' ),
+ 'default' => array( 0, '#افتراضي', '#default' ),
+ 'ifexist' => array( 0, 'لوموجود', 'ifexist' ),
+ 'time' => array( 0, 'وقت', 'time' ),
+ 'timel' => array( 0, 'تيمل', 'timel' ),
+ 'rel2abs' => array( 0, 'ريلتوآبس', 'rel2abs' ),
+ 'titleparts' => array( 0, 'أجزاء_العنوان', 'titleparts' ),
+ 'len' => array( 0, 'لين', 'len' ),
+ 'pos' => array( 0, 'بوس', 'pos' ),
+ 'rpos' => array( 0, 'آربوس', 'rpos' ),
+ 'sub' => array( 0, 'متفرع', 'sub' ),
+ 'count' => array( 0, 'عدد', 'count' ),
+ 'replace' => array( 0, 'استبدال', 'replace' ),
+ 'explode' => array( 0, 'انفجار', 'explode' ),
+);
+
+/** Breton (Brezhoneg) */
+$magicWords['br'] = array(
+ 'time' => array( 0, 'amzer' ),
+ 'convert' => array( 0, 'amdreiñ' ),
+ 'count' => array( 0, 'kontañ' ),
+ 'replace' => array( 0, 'erlec\'hiañ' ),
+);
+
+/** Bosnian (Bosanski) */
+$magicWords['bs'] = array(
+ 'language' => array( 0, '#JEZIK:' ),
+);
+
+/** Chechen (Нохчийн) */
+$magicWords['ce'] = array(
+ 'time' => array( 0, 'хан', 'time' ),
+ 'replace' => array( 0, 'хийцарна', 'замена', 'replace' ),
+);
+
+/** Czech (Česky) */
+$magicWords['cs'] = array(
+ 'expr' => array( 0, 'výraz', 'expr' ),
+ 'if' => array( 0, 'když', 'if' ),
+ 'ifexist' => array( 0, 'kdyžexist', 'ifexist' ),
+ 'time' => array( 0, 'čas', 'time' ),
+ 'len' => array( 0, 'délka', 'len' ),
+ 'count' => array( 0, 'počet', 'count' ),
+ 'replace' => array( 0, 'nahradit', 'replace' ),
+);
+
+/** Esperanto (Esperanto) */
+$magicWords['eo'] = array(
+ 'expr' => array( 0, 'espr', 'esprimo' ),
+ 'if' => array( 0, 'se' ),
+ 'ifeq' => array( 0, 'seekv', 'seekvacio' ),
+ 'ifexpr' => array( 0, 'seespr', 'seeksprimo' ),
+ 'iferror' => array( 0, 'seeraras' ),
+ 'switch' => array( 0, 'ŝaltu', 'ŝalti', 'sxaltu', 'sxalti' ),
+ 'default' => array( 0, '#defaŭlte', '#defauxlte' ),
+ 'ifexist' => array( 0, 'seekzistas' ),
+ 'time' => array( 0, 'tempo' ),
+ 'timel' => array( 0, 'tempoo' ),
+ 'language' => array( 0, '#LINGVO:' ),
+);
+
+/** Spanish (Español) */
+$magicWords['es'] = array(
+ 'if' => array( 0, 'si', 'if' ),
+ 'ifexpr' => array( 0, 'siexpr', 'ifexpr' ),
+ 'iferror' => array( 0, 'sierror', 'iferror' ),
+ 'switch' => array( 0, 'según', 'switch' ),
+ 'ifexist' => array( 0, 'siexiste', 'ifexist' ),
+ 'time' => array( 0, 'tiempo', 'time' ),
+ 'len' => array( 0, 'long', 'longitud', 'len' ),
+ 'replace' => array( 0, 'reemplazar', 'replace' ),
+ 'explode' => array( 0, 'separar', 'explode' ),
+);
+
+/** Estonian (Eesti) */
+$magicWords['et'] = array(
+ 'language' => array( 0, '#KEEL:' ),
+);
+
+/** Persian (فارسی) */
+$magicWords['fa'] = array(
+ 'expr' => array( 0, 'حساب' ),
+ 'if' => array( 0, 'اگر' ),
+ 'ifeq' => array( 0, 'اگرمساوی' ),
+ 'ifexpr' => array( 0, 'اگرحساب' ),
+ 'iferror' => array( 0, 'اگرخطا' ),
+ 'switch' => array( 0, 'گزینه' ),
+ 'default' => array( 0, '#پیش‌فرض' ),
+ 'ifexist' => array( 0, 'اگرموجود' ),
+ 'time' => array( 0, 'زمان' ),
+ 'timel' => array( 0, 'زمان‌بلند' ),
+ 'rel2abs' => array( 0, 'نسبی‌به‌مطلق' ),
+ 'titleparts' => array( 0, 'پاره‌عنوان' ),
+ 'language' => array( 0, '#زبان' ),
+ 'len' => array( 0, 'طول' ),
+ 'pos' => array( 0, 'جا' ),
+ 'rpos' => array( 0, 'جار' ),
+ 'sub' => array( 0, 'تکه' ),
+ 'count' => array( 0, 'شمار' ),
+ 'replace' => array( 0, 'جایگزین' ),
+ 'explode' => array( 0, 'گسترش' ),
+ 'urldecode' => array( 0, 'نشانی‌بی‌کد' ),
+);
+
+/** Finnish (Suomi) */
+$magicWords['fi'] = array(
+ 'language' => array( 0, '#KIELI:' ),
+);
+
+/** Galician (Galego) */
+$magicWords['gl'] = array(
+ 'language' => array( 0, '#LINGUA:', '#IDIOMA:' ),
+);
+
+/** Hebrew (עברית) */
+$magicWords['he'] = array(
+ 'expr' => array( 0, 'חשב', 'expr' ),
+ 'if' => array( 0, 'תנאי', 'if' ),
+ 'ifeq' => array( 0, 'שווה', 'ifeq' ),
+ 'ifexpr' => array( 0, 'חשב תנאי', 'ifexpr' ),
+ 'iferror' => array( 0, 'תנאי שגיאה', 'iferror' ),
+ 'switch' => array( 0, 'בחר', 'switch' ),
+ 'default' => array( 0, '#ברירת מחדל', '#default' ),
+ 'ifexist' => array( 0, 'קיים', 'ifexist' ),
+ 'time' => array( 0, 'זמן', 'time' ),
+ 'timel' => array( 0, 'זמןמ', 'timel' ),
+ 'rel2abs' => array( 0, 'יחסי למוחלט', 'rel2abs' ),
+ 'titleparts' => array( 0, 'חלק בכותרת', 'titleparts' ),
+);
+
+/** Hungarian (Magyar) */
+$magicWords['hu'] = array(
+ 'expr' => array( 0, 'kif', 'expr' ),
+ 'if' => array( 0, 'ha', 'if' ),
+ 'ifeq' => array( 0, 'haegyenlő', 'ifeq' ),
+ 'ifexpr' => array( 0, 'hakif', 'ifexpr' ),
+ 'iferror' => array( 0, 'hahibás', 'iferror' ),
+ 'default' => array( 0, '#alapértelmezett', '#default' ),
+ 'ifexist' => array( 0, 'halétezik', 'ifexist' ),
+ 'time' => array( 0, 'idő', 'time' ),
+ 'len' => array( 0, 'hossz', 'len' ),
+ 'pos' => array( 0, 'pozíció', 'pos' ),
+ 'rpos' => array( 0, 'jpozíció', 'rpos' ),
+);
+
+/** Indonesian (Bahasa Indonesia) */
+$magicWords['id'] = array(
+ 'expr' => array( 0, 'hitung', 'expr' ),
+ 'if' => array( 0, 'jika', 'if' ),
+ 'ifeq' => array( 0, 'jikasama', 'ifeq' ),
+ 'ifexpr' => array( 0, 'jikahitung', 'ifexpr' ),
+ 'iferror' => array( 0, 'jikasalah', 'iferror' ),
+ 'switch' => array( 0, 'pilih', 'switch' ),
+ 'default' => array( 0, '#baku', '#default' ),
+ 'ifexist' => array( 0, 'jikaada', 'ifexist' ),
+ 'time' => array( 0, 'waktu', 'time' ),
+ 'timel' => array( 0, 'waktu1', 'timel' ),
+ 'titleparts' => array( 0, 'bagianjudul', 'titleparts' ),
+);
+
+/** Igbo (Igbo) */
+$magicWords['ig'] = array(
+ 'if' => array( 0, 'ȯ_bú', 'if' ),
+ 'time' => array( 0, 'ógè', 'time' ),
+ 'timel' => array( 0, 'ógèl', 'timel' ),
+);
+
+/** Italian (Italiano) */
+$magicWords['it'] = array(
+ 'ifexist' => array( 0, 'ifexists' ),
+ 'language' => array( 0, '#LINGUA' ),
+);
+
+/** Japanese (日本語) */
+$magicWords['ja'] = array(
+ 'expr' => array( 0, '式' ),
+ 'if' => array( 0, 'もし' ),
+ 'ifeq' => array( 0, 'もし等しい' ),
+ 'ifexpr' => array( 0, 'もし式' ),
+ 'iferror' => array( 0, 'もしエラー' ),
+ 'switch' => array( 0, '切り替え' ),
+ 'default' => array( 0, '#既定' ),
+ 'ifexist' => array( 0, 'もし存在' ),
+ 'time' => array( 0, '時間' ),
+ 'timel' => array( 0, '時間地方' ),
+ 'rel2abs' => array( 0, '参照から絶対' ),
+ 'titleparts' => array( 0, 'タイトル部分' ),
+ 'language' => array( 0, '#言語:', '#言語:' ),
+ 'len' => array( 0, '長さ' ),
+ 'pos' => array( 0, '位置' ),
+ 'rpos' => array( 0, '最後の位置' ),
+ 'sub' => array( 0, '切り取り' ),
+ 'count' => array( 0, '回数' ),
+ 'replace' => array( 0, '置き換え' ),
+ 'explode' => array( 0, '分割' ),
+ 'urldecode' => array( 0, 'URLデコード' ),
+);
+
+/** Khmer (ភាសាខ្មែរ) */
+$magicWords['km'] = array(
+ 'language' => array( 0, '#ភាសា:' ),
+);
+
+/** Korean (한국어) */
+$magicWords['ko'] = array(
+ 'expr' => array( 0, '수식' ),
+ 'switch' => array( 0, '스위치' ),
+ 'default' => array( 0, '#기본값' ),
+ 'time' => array( 0, '시간' ),
+ 'timel' => array( 0, '지역시간' ),
+ 'language' => array( 0, '#언어:' ),
+ 'len' => array( 0, '길이' ),
+ 'count' => array( 0, '개수' ),
+ 'replace' => array( 0, '교체' ),
+ 'explode' => array( 0, '분리' ),
+ 'urldecode' => array( 0, '주소디코딩:' ),
+);
+
+/** ‪Kurdî (latînî)‬ (‪Kurdî (latînî)‬) */
+$magicWords['ku-latn'] = array(
+ 'len' => array( 0, '#ziman' ),
+);
+
+/** Ladino (Ladino) */
+$magicWords['lad'] = array(
+ 'switch' => array( 0, 'asegún', 'según', 'switch' ),
+);
+
+/** Malagasy (Malagasy) */
+$magicWords['mg'] = array(
+ 'if' => array( 0, 'raha', 'if' ),
+ 'ifeq' => array( 0, 'rahamitovy', 'ifeq' ),
+ 'ifexpr' => array( 0, 'rahamarina', 'ifexpr' ),
+ 'iferror' => array( 0, 'rahadiso', 'iferror' ),
+ 'default' => array( 0, '#tsipalotra', '#default' ),
+ 'ifexist' => array( 0, 'rahamisy', 'ifexist' ),
+ 'time' => array( 0, 'lera', 'time' ),
+);
+
+/** Macedonian (Македонски) */
+$magicWords['mk'] = array(
+ 'expr' => array( 0, 'израз' ),
+ 'if' => array( 0, 'ако' ),
+ 'ifeq' => array( 0, 'акоисто' ),
+ 'ifexpr' => array( 0, 'акоизраз' ),
+ 'iferror' => array( 0, 'акогрешка' ),
+ 'switch' => array( 0, 'префрли' ),
+ 'default' => array( 0, '#поосновно' ),
+ 'ifexist' => array( 0, 'акопостои' ),
+ 'time' => array( 0, 'време' ),
+ 'timel' => array( 0, 'времел' ),
+ 'rel2abs' => array( 0, 'релдоапс' ),
+ 'titleparts' => array( 0, 'насловделови' ),
+ 'convert' => array( 0, 'претвори' ),
+ 'sourceunit' => array( 0, '#изворнаединица' ),
+ 'targetunit' => array( 0, '#целнаединица' ),
+ 'linkunit' => array( 0, '#врскаединица' ),
+ 'abbreviate' => array( 0, '#скрати' ),
+ 'len' => array( 0, 'долж' ),
+ 'pos' => array( 0, 'пол' ),
+ 'rpos' => array( 0, 'впол' ),
+ 'sub' => array( 0, 'зам' ),
+ 'count' => array( 0, 'сметај' ),
+ 'replace' => array( 0, 'замени' ),
+ 'explode' => array( 0, 'разложи' ),
+ 'urldecode' => array( 0, 'urlдекод' ),
+);
+
+/** Malayalam (മലയാളം) */
+$magicWords['ml'] = array(
+ 'if' => array( 0, 'എങ്കിൽ' ),
+ 'ifeq' => array( 0, 'സമെമെങ്കിൽ' ),
+ 'ifexpr' => array( 0, 'എക്സ്പ്രെഷനെങ്കിൽ' ),
+ 'iferror' => array( 0, 'പിഴവെങ്കിൽ' ),
+ 'switch' => array( 0, 'മാറ്റുക' ),
+ 'default' => array( 0, '#സ്വതവേ' ),
+ 'ifexist' => array( 0, 'ഉണ്ടെങ്കിൽ' ),
+ 'time' => array( 0, 'സമയം' ),
+ 'timel' => array( 0, 'സമയം|' ),
+ 'language' => array( 0, '#ഭാഷ:' ),
+ 'sub' => array( 0, 'ഉപം' ),
+ 'count' => array( 0, 'എണ്ണുക' ),
+ 'replace' => array( 0, 'മാറ്റിച്ചേർക്കുക' ),
+ 'explode' => array( 0, 'വിസ്ഫോടനം' ),
+);
+
+/** Marathi (मराठी) */
+$magicWords['mr'] = array(
+ 'expr' => array( 0, 'करण', 'expr' ),
+ 'if' => array( 0, 'जर', 'इफ', 'if' ),
+ 'ifeq' => array( 0, 'जरसम', 'ifeq' ),
+ 'ifexpr' => array( 0, 'जरकरण', 'ifexpr' ),
+ 'iferror' => array( 0, 'जरत्रुटी', 'iferror' ),
+ 'switch' => array( 0, 'कळ', 'सांगकळ', 'असेलतरसांग', 'असलेतरसांग', 'स्वीच', 'switch' ),
+ 'default' => array( 0, '#अविचल', '#default' ),
+ 'ifexist' => array( 0, 'जरअसेल', 'जरआहे', 'ifexist' ),
+ 'time' => array( 0, 'वेळ', 'time' ),
+ 'timel' => array( 0, 'वेळस्था', 'timel' ),
+ 'titleparts' => array( 0, 'शीर्षकखंड', 'टाइटलपार्ट्स', 'titleparts' ),
+ 'len' => array( 0, 'लांबी', 'len' ),
+ 'pos' => array( 0, 'स्थशोध', 'pos' ),
+ 'rpos' => array( 0, 'माग्चास्थशोध', 'rpos' ),
+ 'sub' => array( 0, 'उप', 'sub' ),
+ 'count' => array( 0, 'मोज', 'मोजा', 'count' ),
+ 'replace' => array( 0, 'नेबदल', 'रिप्लेस', 'replace' ),
+ 'explode' => array( 0, 'एकफोड', 'explode' ),
+);
+
+/** Erzya (Эрзянь) */
+$magicWords['myv'] = array(
+ 'language' => array( 0, '#КЕЛЕСЬ:' ),
+);
+
+/** Nedersaksisch (Nedersaksisch) */
+$magicWords['nds-nl'] = array(
+ 'if' => array( 0, 'as', 'als', 'if' ),
+ 'ifeq' => array( 0, 'asgelieke', 'alsgelijk', 'ifeq' ),
+ 'ifexpr' => array( 0, 'asexpressie', 'alsexpressie', 'ifexpr' ),
+ 'iferror' => array( 0, 'asfout', 'alsfout', 'iferror' ),
+ 'default' => array( 0, '#standard', '#standaard', '#default' ),
+ 'ifexist' => array( 0, 'asbesteet', 'alsbestaat', 'ifexist' ),
+ 'time' => array( 0, 'tied', 'tijd', 'time' ),
+ 'timel' => array( 0, 'tiedl', 'tijdl', 'timel' ),
+ 'rel2abs' => array( 0, 'relatiefnaorabseluut', 'relatiefnaarabsoluut', 'rel2abs' ),
+);
+
+/** Dutch (Nederlands) */
+$magicWords['nl'] = array(
+ 'expr' => array( 0, 'expressie' ),
+ 'if' => array( 0, 'als' ),
+ 'ifeq' => array( 0, 'alsgelijk' ),
+ 'ifexpr' => array( 0, 'alsexpressie' ),
+ 'iferror' => array( 0, 'alsfout' ),
+ 'switch' => array( 0, 'schakelen' ),
+ 'default' => array( 0, '#standaard' ),
+ 'ifexist' => array( 0, 'alsbestaat' ),
+ 'time' => array( 0, 'tijd' ),
+ 'timel' => array( 0, 'tijdl' ),
+ 'rel2abs' => array( 0, 'relatiefnaarabsoluut' ),
+ 'titleparts' => array( 0, 'paginanaamdelen' ),
+ 'convert' => array( 0, 'converteren' ),
+ 'sourceunit' => array( 0, '#broneenheid' ),
+ 'targetunit' => array( 0, '#doeleenheid' ),
+ 'linkunit' => array( 0, '#verbindingseenheid' ),
+ 'abbreviate' => array( 0, '#afkorten' ),
+ 'language' => array( 0, '#TAAL:' ),
+ 'count' => array( 0, 'telling' ),
+ 'replace' => array( 0, 'vervangen' ),
+ 'explode' => array( 0, 'exploderen' ),
+ 'urldecode' => array( 0, 'urldecoderen' ),
+);
+
+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬) */
+$magicWords['nn'] = array(
+ 'expr' => array( 0, 'uttrykk', 'expr' ),
+ 'if' => array( 0, 'om', 'if' ),
+ 'ifeq' => array( 0, 'omlik', 'ifeq' ),
+ 'ifexpr' => array( 0, 'omuttrykk', 'ifexpr' ),
+ 'iferror' => array( 0, 'omfeil', 'iferror' ),
+ 'switch' => array( 0, 'byt', 'switch' ),
+ 'ifexist' => array( 0, 'omfinst', 'ifexist' ),
+ 'time' => array( 0, 'tid', 'time' ),
+ 'timel' => array( 0, 'tidl', 'timel' ),
+ 'rel2abs' => array( 0, 'reltilabs', 'rel2abs' ),
+ 'titleparts' => array( 0, 'titteldelar', 'titleparts' ),
+ 'len' => array( 0, 'lengd', 'len' ),
+ 'replace' => array( 0, 'erstatt', 'replace' ),
+);
+
+/** Oriya (ଓଡ଼ିଆ) */
+$magicWords['or'] = array(
+ 'time' => array( 0, 'ସମୟ' ),
+ 'convert' => array( 0, 'ବଦଳାଇବା' ),
+);
+
+/** Polish (Polski) */
+$magicWords['pl'] = array(
+ 'language' => array( 0, '#JĘZYK:' ),
+);
+
+/** Pashto (پښتو) */
+$magicWords['ps'] = array(
+ 'if' => array( 0, 'که', 'if' ),
+ 'time' => array( 0, 'وخت', 'time' ),
+ 'count' => array( 0, 'شمېرل', 'count' ),
+);
+
+/** Portuguese (Português) */
+$magicWords['pt'] = array(
+ 'if' => array( 0, 'se', 'if' ),
+ 'ifeq' => array( 0, 'seigual', 'ifeq' ),
+ 'ifexpr' => array( 0, 'seexpr', 'ifexpr' ),
+ 'iferror' => array( 0, 'seerro', 'iferror' ),
+ 'default' => array( 0, '#padrão', '#padrao', '#default' ),
+ 'ifexist' => array( 0, 'seexiste', 'ifexist' ),
+ 'titleparts' => array( 0, 'partesdotítulo', 'partesdotitulo', 'titleparts' ),
+ 'len' => array( 0, 'comprimento', 'len' ),
+);
+
+/** Russian (Русский) */
+$magicWords['ru'] = array(
+ 'replace' => array( 0, 'замена' ),
+);
+
+/** Albanian (Shqip) */
+$magicWords['sq'] = array(
+ 'language' => array( 0, '#GJUHA:' ),
+);
+
+/** Serbian Cyrillic ekavian (‪Српски (ћирилица)‬) */
+$magicWords['sr-ec'] = array(
+ 'default' => array( 0, '#подразумевано' ),
+ 'time' => array( 0, 'време' ),
+ 'convert' => array( 0, 'претвори' ),
+ 'sourceunit' => array( 0, '#изворнајединица', '#изворна_јединица' ),
+ 'targetunit' => array( 0, '#крајњајединица', '#крајња_јединица' ),
+ 'linkunit' => array( 0, '#везајединице', '#веза_јединице' ),
+ 'abbreviate' => array( 0, '#скрати' ),
+ 'pos' => array( 0, 'поз' ),
+ 'count' => array( 0, 'број' ),
+ 'replace' => array( 0, 'замени' ),
+);
+
+/** Swedish (Svenska) */
+$magicWords['sv'] = array(
+ 'expr' => array( 0, 'utr', 'expr' ),
+ 'if' => array( 0, 'om', 'if' ),
+ 'ifeq' => array( 0, 'omlika', 'ifeq' ),
+ 'ifexpr' => array( 0, 'omutr', 'ifexpr' ),
+ 'iferror' => array( 0, 'omfel', 'iferror' ),
+ 'switch' => array( 0, 'växel', 'switch' ),
+ 'default' => array( 0, '#standard', '#default' ),
+ 'ifexist' => array( 0, 'omfinns', 'ifexist' ),
+ 'time' => array( 0, 'tid', 'time' ),
+ 'timel' => array( 0, 'tidl', 'timel' ),
+ 'replace' => array( 0, 'ersätt', 'replace' ),
+ 'explode' => array( 0, 'explodera', 'explode' ),
+);
+
+/** Tamil (தமிழ்) */
+$magicWords['ta'] = array(
+ 'count' => array( 0, 'எண்ணிக்கை' ),
+);
+
+/** Turkish (Türkçe) */
+$magicWords['tr'] = array(
+ 'expr' => array( 0, 'işlem', 'islem', 'ifade' ),
+ 'if' => array( 0, 'eğer', 'eger' ),
+ 'switch' => array( 0, 'değiştir', 'degistir' ),
+ 'default' => array( 0, '#vas' ),
+);
+
+/** Татарча (Татарча) */
+$magicWords['tt-cyrl'] = array(
+ 'language' => array( 0, '#ТЕЛ:' ),
+);
+
+/** Ukrainian (Українська) */
+$magicWords['uk'] = array(
+ 'expr' => array( 0, 'вираз', 'expr' ),
+ 'if' => array( 0, 'якщо', 'if' ),
+ 'ifeq' => array( 0, 'якщорівні', 'рівні', 'ifeq' ),
+ 'ifexpr' => array( 0, 'якщовираз', 'ifexpr' ),
+ 'iferror' => array( 0, 'якщопомилка', 'iferror' ),
+ 'switch' => array( 0, 'вибірка', 'switch' ),
+ 'default' => array( 0, '#інакше', '#default' ),
+ 'ifexist' => array( 0, 'якщоіснує', 'ifexist' ),
+);
+
+/** Vietnamese (Tiếng Việt) */
+$magicWords['vi'] = array(
+ 'expr' => array( 0, 'côngthức' ),
+ 'language' => array( 0, '#NGÔNNGỮ:' ),
+);
+
+/** Yiddish (ייִדיש) */
+$magicWords['yi'] = array(
+ 'expr' => array( 0, 'רעכן' ),
+ 'if' => array( 0, 'תנאי' ),
+ 'ifeq' => array( 0, 'גלייך' ),
+ 'ifexpr' => array( 0, 'אויברעכן' ),
+ 'switch' => array( 0, 'קלייב' ),
+ 'default' => array( 0, '#גרונט' ),
+ 'ifexist' => array( 0, 'עקזיסט' ),
+ 'time' => array( 0, 'צייט' ),
+ 'timel' => array( 0, 'צייטל' ),
+);
diff --git a/extensions/ParserFunctions/ParserFunctions.i18n.php b/extensions/ParserFunctions/ParserFunctions.i18n.php
new file mode 100644
index 00000000..1fa3892d
--- /dev/null
+++ b/extensions/ParserFunctions/ParserFunctions.i18n.php
@@ -0,0 +1,4695 @@
+<?php
+/**
+ * Internationalisation file for extension ParserFunctions.
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = array();
+
+$messages['en'] = array(
+ 'pfunc_desc' => 'Enhance parser with logical functions',
+ 'pfunc_time_error' => 'Error: invalid time',
+ 'pfunc_time_too_long' => 'Error: too many #time calls',
+ 'pfunc_time_too_big' => 'Error: #time only supports years up to 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Error: Invalid depth in path: "$1" (tried to access a node above the root node)',
+ 'pfunc_expr_stack_exhausted' => 'Expression error: Stack exhausted',
+ 'pfunc_expr_unexpected_number' => 'Expression error: Unexpected number',
+ 'pfunc_expr_preg_match_failure' => 'Expression error: Unexpected preg_match failure',
+ 'pfunc_expr_unrecognised_word' => 'Expression error: Unrecognised word "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Expression error: Unexpected $1 operator',
+ 'pfunc_expr_missing_operand' => 'Expression error: Missing operand for $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression error: Unexpected closing bracket',
+ 'pfunc_expr_unrecognised_punctuation' => 'Expression error: Unrecognised punctuation character "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Expression error: Unclosed bracket',
+ 'pfunc_expr_division_by_zero' => 'Division by zero',
+ 'pfunc_expr_invalid_argument' => 'Invalid argument for $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Invalid argument for ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Expression error: Unknown error ($1)',
+ 'pfunc_expr_not_a_number' => 'In $1: result is not a number',
+ 'pfunc_string_too_long' => 'Error: string exceeds $1 character limit',
+ 'pfunc-convert-dimensionmismatch' => 'Error: cannot convert between units of "$1" and "$2"',
+ 'pfunc-convert-unknownunit' => 'Error: unknown unit "$1"',
+ 'pfunc-convert-unknowndimension' => 'Error: unknown dimension "$1"',
+ 'pfunc-convert-invalidcompoundunit' => 'Error: invalid compound unit "$1"',
+ 'pfunc-convert-nounit' => 'Error: no source unit given',
+ 'pfunc-convert-doublecompoundunit' => 'Error: cannot parse double compound units like "$1"',
+
+ # DIMENSION NAMES
+ 'pfunc-convert-dimension-length' => 'length',
+ 'pfunc-convert-dimension-area' => 'area',
+ 'pfunc-convert-dimension-volume' => 'volume',
+ 'pfunc-convert-dimension-time' => 'time',
+ 'pfunc-convert-dimension-timesquared' => 'time<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'mass',
+ 'pfunc-convert-dimension-speed' => 'speed',
+ 'pfunc-convert-dimension-temperature' => 'temperature',
+ 'pfunc-convert-dimension-acceleration' => 'acceleration',
+ 'pfunc-convert-dimension-force' => 'force',
+ 'pfunc-convert-dimension-torque' => 'torque',
+ 'pfunc-convert-dimension-energy' => 'energy',
+ 'pfunc-convert-dimension-power' => 'power',
+ 'pfunc-convert-dimension-pressure' => 'pressure',
+ 'pfunc-convert-dimension-density' => 'density',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'fuelefficiencypositive',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'fuelefficiencynegative',
+
+ # SI PREFIXES
+
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hecto',
+ 'pfunc-convert-prefix-deca' => 'deca',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'milli',
+ 'pfunc-convert-prefix-micro' => 'micro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'pico',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yocto',
+
+ 'pfunc-convert-prefix-yotta-abbr' => 'Y',
+ 'pfunc-convert-prefix-zetta-abbr' => 'Z',
+ 'pfunc-convert-prefix-exa-abbr' => 'E',
+ 'pfunc-convert-prefix-peta-abbr' => 'P',
+ 'pfunc-convert-prefix-tera-abbr' => 'T',
+ 'pfunc-convert-prefix-giga-abbr' => 'G',
+ 'pfunc-convert-prefix-mega-abbr' => 'M',
+ 'pfunc-convert-prefix-kilo-abbr' => 'k',
+ 'pfunc-convert-prefix-hecto-abbr' => 'h',
+ 'pfunc-convert-prefix-deca-abbr' => 'da',
+ 'pfunc-convert-prefix-deci-abbr' => 'd',
+ 'pfunc-convert-prefix-centi-abbr' => 'c',
+ 'pfunc-convert-prefix-milli-abbr' => 'm',
+ 'pfunc-convert-prefix-micro-abbr' => 'μ',
+ 'pfunc-convert-prefix-nano-abbr' => 'n',
+ 'pfunc-convert-prefix-pico-abbr' => 'p',
+ 'pfunc-convert-prefix-femto-abbr' => 'f',
+ 'pfunc-convert-prefix-atto-abbr' => 'a',
+ 'pfunc-convert-prefix-zepto-abbr' => 'z',
+ 'pfunc-convert-prefix-yocto-abbr' => 'y',
+
+ # LENGTH
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2meter|$2meters}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|angstrom|angstroms}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|mile|miles}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|furlong|furlongs}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|chain|chains}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|rod|rods}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|fathom|fathoms}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|yard|yards}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|foot|feet}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|hand|hands}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|inch|inches}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|nautical mile|nautical miles}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|nautical mile (pre-1970 British)|nautical miles (pre-1970 British)}}',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1|nautical mile (pre-1954 US)|nautical miles (pre-1954 US)}}',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2parsec|$2parsecs}}',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1|$2lightyear|$2lightyears}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|astronomical unit|astronomical units}}',
+
+ 'pfunc-convert-unit-length-metre-abbr' => '$2m',
+ 'pfunc-convert-unit-length-angstrom-abbr' => 'Å',
+ 'pfunc-convert-unit-length-mile-abbr' => 'mi',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'furlong',
+ 'pfunc-convert-unit-length-chain-abbr' => 'chain',
+ 'pfunc-convert-unit-length-rod-abbr' => 'rd',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'fathom',
+ 'pfunc-convert-unit-length-yard-abbr' => 'yd',
+ 'pfunc-convert-unit-length-foot-abbr' => 'ft',
+ 'pfunc-convert-unit-length-hand-abbr' => 'h',
+ 'pfunc-convert-unit-length-inch-abbr' => 'in',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'nmi',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'nmi (Brit)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'nmi (pre-1954 US)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2pc',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2ly',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'AU',
+
+ # AREA #
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|square kilometer|square kilometers}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|square meter|square meters}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|square centimeter|square centimeters}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|square millimeter|square millimeters}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hectare|hectares}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|square mile|square miles}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|acre|acres}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|square yard|square yards}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|square foot|square feet}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|square inch|square inches}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|square nautical mile|square nautical miles}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|dunam|dunams}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|tsubo|tsubo}}',
+
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'sq mi',
+ 'pfunc-convert-unit-area-acre-abbr' => 'acre',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'sq yd',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'sq ft',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'sq in',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'sq nmi',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'dunam',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'tsubo',
+
+ # TIME #
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|second|seconds}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|$2year|$2years}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|day|days}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|hour|hours}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minute|minutes}}',
+
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-year-abbr' => '$2yr',
+ 'pfunc-convert-unit-time-day-abbr' => 'day',
+ 'pfunc-convert-unit-time-hour-abbr' => 'hr',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+
+ # VOLUME #
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|cubic meter|cubic meters}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|cubic centimeter|cubic centimeters}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|cubic millimeter|cubic millimeters}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|kiloliter|kiloliters}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|liter|liters}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|centiliter|centiliters}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|milliliter|milliliters}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|cubic yard|cubic yards}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|cubic foot|cubic feet}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|cubic inch|cubic inches}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|barrel|barrels}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|bushel|bushels}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|gallon|gallons}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|quart|quarts}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|pint|pints}}',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1|fluid ounce|fluid ounces}}',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1|US barrel|US barrels}}',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1|barrel|barrel}}',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1|barrel|barrel}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|US gallon|US gallons}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|US quart|US quarts}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|US pint|US pints}}',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1|US fluid ounce|US fluid ounces}}',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1|US dry barrel|US dry barrels}}',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1|US bushel|US bushels}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|US dry gallon|US dry gallons}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|US dry quart|US dry quarts}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|US dry pint|US dry pints}}',
+
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2l',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'cu yd',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'cu ft',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'cu in',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'bsh',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'gal',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'qt',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'pt',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'fl oz',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'US bbl',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'US gal',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'US qt',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'US pt',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'US fl oz',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'US bbl',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'US bsh',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'US dry gal',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'US dry qt',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'US dry pt',
+
+ # SPEED
+ 'pfunc-convert-unit-speed-mile-hour' => 'miles per hour',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'mph',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+
+ # PRESSURE
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|$2pascal|$2pascals}}',
+ 'pfunc-convert-unit-pressure-bar' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar' => 'decibar',
+ 'pfunc-convert-unit-pressure-millibar' => 'millibar',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'kilobarye',
+ 'pfunc-convert-unit-pressure-barye' => 'barye',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|atmosphere|atmospheres}}',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1|Torr|Torr}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|millimeter of mercury|millimeters of mercury}}',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|inch of mercury|inches of mercury}}',
+ 'pfunc-convert-unit-pressure-psi' => '{{PLURAL:$1|pound per square-inch|pounds per square-inch}}',
+
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'dbar',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'mbar',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'kBa',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ba',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'Torr',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'mmHg',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'inHg',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Message documentation (Message documentation)
+ * @author Jon Harald Søby
+ * @author Meno25
+ * @author Siebrand
+ * @author The Evil IP address
+ */
+$messages['qqq'] = array(
+ 'pfunc_desc' => '{{desc}}',
+ 'pfunc_expr_division_by_zero' => '{{Identical|Divizion by zero}}',
+ 'pfunc_string_too_long' => 'PLURAL is supported for $1.',
+);
+
+/** Afrikaans (Afrikaans)
+ * @author Naudefj
+ */
+$messages['af'] = array(
+ 'pfunc_desc' => 'Verryk die ontleder met logiese funksies',
+ 'pfunc_time_error' => 'Fout: ongeldige tyd',
+ 'pfunc_time_too_long' => 'Fout: #time te veel kere geroep',
+ 'pfunc_rel2abs_invalid_depth' => 'Fout: Ongeldige diepte in pad: "$1" (probeer \'n node bo die wortelnode te roep)',
+ 'pfunc_expr_stack_exhausted' => 'Fout in uitdrukking: stack uitgeput',
+ 'pfunc_expr_unexpected_number' => 'Fout in uitdrukking: onverwagte getal',
+ 'pfunc_expr_preg_match_failure' => 'Fout in uitdrukking: onverwagte faling van preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Fout in uitdrukking: woord "$1" nie herken',
+ 'pfunc_expr_unexpected_operator' => 'Fout in uitdrukking: onverwagte operateur $1',
+ 'pfunc_expr_missing_operand' => 'Fout in uitdrukking: geen operand vir $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Fout in uitdrukking: hakkie onverwags gesluit',
+ 'pfunc_expr_unrecognised_punctuation' => 'Fout in uitdrukking: onbekende leesteken "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Fout in uitdrukking: hakkie nie gesluit nie',
+ 'pfunc_expr_division_by_zero' => 'Deling deur nul',
+ 'pfunc_expr_invalid_argument' => 'Ongeldige argument vir $1: < -1 of > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ongeldige argument vir ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Fout in uitdrukking: onbekende fout ($1)',
+ 'pfunc_expr_not_a_number' => "In $1: resultaat is nie 'n getal nie",
+ 'pfunc_string_too_long' => 'Fout: String oorskry $1 karakter limiet',
+);
+
+/** Gheg Albanian (Gegë)
+ * @author Mdupont
+ */
+$messages['aln'] = array(
+ 'pfunc_desc' => 'Enhance parser me funksione logjike',
+ 'pfunc_time_error' => 'Gabim: koha e pavlefshme',
+ 'pfunc_time_too_long' => 'Gabim: kohë shumë # thirrjet',
+ '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ë)',
+ 'pfunc_expr_stack_exhausted' => 'gabim Shprehja: qipi rraskapitur',
+ 'pfunc_expr_unexpected_number' => 'gabim Shprehja: Numri i papritur',
+);
+
+/** Aragonese (Aragonés)
+ * @author Juanpabl
+ */
+$messages['an'] = array(
+ 'pfunc_desc' => 'Amillorar o parseyador con funcions lochicas',
+ 'pfunc_time_error' => 'Error: tiempo incorreuto',
+ 'pfunc_time_too_long' => 'Error: masiadas cridas #time',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => "Error d'expresión: Pila acotolada",
+ 'pfunc_expr_unexpected_number' => "Error d'expresión: numero no asperato",
+ 'pfunc_expr_preg_match_failure' => "Error d'expresión: fallo de preg_match no asperato",
+ 'pfunc_expr_unrecognised_word' => 'Error d\'expresión: parola "$1" no reconoixita',
+ 'pfunc_expr_unexpected_operator' => "Error d'expresión: operador $1 no asperato",
+ 'pfunc_expr_missing_operand' => "Error d'expresión: a $1 li falta un operando",
+ 'pfunc_expr_unexpected_closing_bracket' => "Error d'expresión: zarradura d'o gafet no asperata",
+ 'pfunc_expr_unrecognised_punctuation' => 'Error d\'expresión: carácter de puntuación "$1" no reconoixito',
+ 'pfunc_expr_unclosed_bracket' => "Error d'expresión: gafet sin zarrar",
+ 'pfunc_expr_division_by_zero' => 'División por zero',
+ 'pfunc_expr_invalid_argument' => 'Argumento no conforme ta $1: < -1 u > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumento no conforme ta ln: <=0',
+ 'pfunc_expr_unknown_error' => "Error d'expresión: error esconoixito ($1)",
+ 'pfunc_expr_not_a_number' => 'En $1: o resultau no ye un numero',
+);
+
+/** Arabic (العربية)
+ * @author Aiman titi
+ * @author Meno25
+ */
+$messages['ar'] = array(
+ 'pfunc_desc' => 'محلل ممدد بدوال منطقية',
+ 'pfunc_time_error' => 'خطأ: زمن غير صحيح',
+ 'pfunc_time_too_long' => 'خطأ: استدعاءات #time كثيرة جدا',
+ 'pfunc_time_too_big' => 'خطأ : # الوقت يدعم فقط حتى 9999 سنة',
+ 'pfunc_rel2abs_invalid_depth' => 'خطأ: عمق غير صحيح في المسار: "$1" (حاول دخول عقدة فوق العقدة الجذرية)',
+ 'pfunc_expr_stack_exhausted' => 'خطأ في التعبير: ستاك مجهد',
+ 'pfunc_expr_unexpected_number' => 'خطأ في التعبير: رقم غير متوقع',
+ 'pfunc_expr_preg_match_failure' => 'خطأ في التعبير: فشل preg_match غير متوقع',
+ 'pfunc_expr_unrecognised_word' => 'خطأ في التعبير: كلمة غير متعرف عليها "$1"',
+ 'pfunc_expr_unexpected_operator' => 'خطأ في التعبير: عامل $1 غير متوقع',
+ 'pfunc_expr_missing_operand' => 'خطأ في التعبير: operand مفقود ل$1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'خطأ في التعبير: قوس إغلاق غير متوقع',
+ 'pfunc_expr_unrecognised_punctuation' => 'خطأ في التعبير: علامة ترقيم غير متعرف عليها "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'خطأ في التعبير: قوس غير مغلق',
+ 'pfunc_expr_division_by_zero' => 'القسمة على صفر',
+ 'pfunc_expr_invalid_argument' => 'مدخلة غير صحيحة ل $1: < -1 أو > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'مدخلة غير صحيحة ل ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'خطأ في التعبير: خطأ غير معروف ($1)',
+ 'pfunc_expr_not_a_number' => 'في $1: النتيجة ليست رقما',
+ 'pfunc_string_too_long' => 'خطأ: السلسلة تتجاوز الحد $1 حرف',
+);
+
+/** Aramaic (ܐܪܡܝܐ)
+ * @author Basharh
+ */
+$messages['arc'] = array(
+ 'pfunc_time_error' => 'ܦܘܕܐ: ܥܕܢܐ ܠܐ ܬܪܝܨܬܐ',
+);
+
+/** Egyptian Spoken Arabic (مصرى)
+ * @author Ghaly
+ * @author Meno25
+ * @author Ramsis II
+ */
+$messages['arz'] = array(
+ 'pfunc_desc' => 'محلل متدعم ب دوال منطقية',
+ 'pfunc_time_error' => 'غلطه:وقت مش صحيح',
+ 'pfunc_time_too_long' => 'غلط: استدعاءات #time كتيرة قوى',
+ 'pfunc_rel2abs_invalid_depth' => 'غلط: عمق مش صحيح فى المسار: "$1" (حاول دخول عقدة فوق العقدة الجزرية)',
+ 'pfunc_expr_stack_exhausted' => 'غلط فى التعبير: ستاك مجهد',
+ 'pfunc_expr_unexpected_number' => 'غلط فى التعبير: رقم مش متوقع',
+ 'pfunc_expr_preg_match_failure' => 'غلط تعبيري: فشل مش متوقع فى preg_match',
+ 'pfunc_expr_unrecognised_word' => 'غلط تعبيري: كلمة مش متعرف عليها "$1"',
+ 'pfunc_expr_unexpected_operator' => 'غلط تعبيري: عامل $1 مش متوقع',
+ 'pfunc_expr_missing_operand' => 'غلط تعبيري: operand بتاع $1 ضايع',
+ 'pfunc_expr_unexpected_closing_bracket' => 'غلط تعبيري:قوس قفل مش متوقع',
+ 'pfunc_expr_unrecognised_punctuation' => 'غلط تعبيري:علامة الترقيم "$1" مش متعرف عليها',
+ 'pfunc_expr_unclosed_bracket' => 'غلط تعبيري:قوس مش مقفول',
+ 'pfunc_expr_division_by_zero' => 'القسمه على صفر',
+ 'pfunc_expr_invalid_argument' => 'مدخلة مش صحيحة لـ $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'مدخلة مش صحيحة لـ ln: <= 0',
+ 'pfunc_expr_unknown_error' => '($1)غلط تعبيري: غلط مش معروف',
+ 'pfunc_expr_not_a_number' => 'فى $1: النتيجه مش رقم',
+);
+
+/** Assamese (অসমীয়া)
+ * @author Rajuonline
+ */
+$messages['as'] = array(
+ 'pfunc_time_error' => 'ভুল: অযোগ্য সময়',
+);
+
+/** Asturian (Asturianu)
+ * @author Esbardu
+ * @author Xuacu
+ */
+$messages['ast'] = array(
+ 'pfunc_desc' => "Ameyora l'análisis sintáuticu con funciones llóxiques",
+ 'pfunc_time_error' => 'Error: tiempu non válidu',
+ 'pfunc_time_too_long' => 'Error: demasiaes llamaes #time',
+ 'pfunc_rel2abs_invalid_depth' => 'Error: Nivel de subdireutoriu non válidu: "$1" (intentu d\'accesu penriba del direutoriu raíz)',
+ 'pfunc_expr_stack_exhausted' => "Error d'espresión: Pila escosada",
+ 'pfunc_expr_unexpected_number' => "Error d'espresión: Númberu inesperáu",
+ 'pfunc_expr_preg_match_failure' => "Error d'espresión: Fallu inesperáu de preg_match",
+ 'pfunc_expr_unrecognised_word' => 'Error d\'espresión: Pallabra "$1" non reconocida',
+ 'pfunc_expr_unexpected_operator' => "Error d'espresión: Operador $1 inesperáu",
+ 'pfunc_expr_missing_operand' => "Error d'espresión: Falta operador en $1",
+ 'pfunc_expr_unexpected_closing_bracket' => "Error d'espresión: Paréntesis final inesperáu",
+ 'pfunc_expr_unrecognised_punctuation' => 'Error d\'espresión: Caráuter de puntuación "$1" non reconocíu',
+ 'pfunc_expr_unclosed_bracket' => "Error d'espresión: Paréntesis non zarráu",
+ 'pfunc_expr_division_by_zero' => 'División por cero',
+ 'pfunc_expr_invalid_argument' => 'Argumentu non válidu pa $1: < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumentu non válidu pa ln: <= 0',
+ 'pfunc_expr_unknown_error' => "Error d'espresión: Error desconocíu ($1)",
+ 'pfunc_expr_not_a_number' => 'En $1: el resultáu nun ye un númberu',
+ 'pfunc_string_too_long' => 'Error: la cadena pasa la llende de $1 caráuteres',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2metru|$2metros}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|angstrom|angstroms}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|milla|milles}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|yarda|yardes}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|pie|pies}}',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|quilómetru cuadráu|quilómetros cuadraos}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|metru cuadráu|metros cuadraos}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|segundu|segundos}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|$2añu|$2años}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|día|díes}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|hora|hores}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minutu|minutos}}',
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-year-abbr' => '$2añ',
+ 'pfunc-convert-unit-time-day-abbr' => 'día',
+ 'pfunc-convert-unit-time-hour-abbr' => 'h',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|metru cúbicu|metros cúbicos}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|centímetru cúbicu|centímetros cúbicos}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|milímetru cúbicu|milímetros cúbicos}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|kilollitru|kilollitros}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|llitru|llitros}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|centillitru|centillitros}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|milillitru|milillitros}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2l',
+ 'pfunc-convert-unit-speed-mile-hour' => 'milles por hora',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|$2pascal|$2pascales}}',
+ 'pfunc-convert-unit-pressure-bar' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar' => 'decibar',
+ 'pfunc-convert-unit-pressure-millibar' => 'milibar',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'kilobario',
+ 'pfunc-convert-unit-pressure-barye' => 'bario',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|atmósfera|atmósferes}}',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'dbar',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'mbar',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'kBa',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ba',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+);
+
+/** Azerbaijani (Azərbaycanca)
+ * @author Cekli829
+ */
+$messages['az'] = array(
+ 'pfunc_time_error' => 'Xəta: yanlış zaman',
+);
+
+/** Bashkir (Башҡортса)
+ * @author Assele
+ */
+$messages['ba'] = array(
+ 'pfunc_desc' => 'Логик функциялар менән яҡшыртылған уҡыу ҡоралы',
+ 'pfunc_time_error' => 'Хата: ваҡыт дөрөҫ түгел',
+ 'pfunc_time_too_long' => 'Хата: #time функцияһы бигерәк күп саҡырылған',
+ 'pfunc_rel2abs_invalid_depth' => 'Хата: "$1" юлының тәрәнлеге дөрөҫ түгел (тәүге төйөндән өҫтәрәк торған төйөндө асырға тырышыу)',
+ 'pfunc_expr_stack_exhausted' => 'Аңлатма хатаһы: Стек тулған',
+ 'pfunc_expr_unexpected_number' => 'Аңлатма хатаһы: Көтөлмәгән һан',
+ 'pfunc_expr_preg_match_failure' => 'Аңлатма хатаһы: Көтөлмәгән preg_match хатаһы',
+ 'pfunc_expr_unrecognised_word' => 'Аңлатма хатаһы: Танылмаған "$1" һүҙе',
+ 'pfunc_expr_unexpected_operator' => 'Аңлатма хатаһы: Көтөлмәгән $1 операторы',
+ 'pfunc_expr_missing_operand' => 'Аңлатма хатаһы: $1 аңлатмаһы өсөн операнд етмәй',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Аңлатма хатаһы: Көтөлмәгән ябыу йәйәһе',
+ 'pfunc_expr_unrecognised_punctuation' => 'Аңлатма хатаһы: Танылмаған "$1" тыныш билдәһе',
+ 'pfunc_expr_unclosed_bracket' => 'Аңлатма хатаһы: Ябылмаған йәйә',
+ 'pfunc_expr_division_by_zero' => 'Нулгә бүлеү хатаһы',
+ 'pfunc_expr_invalid_argument' => '$1 өсөн аргумент дөрөҫ түгел: < -1 йәки > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln өсөн аргумент дөрөҫ түгел: <= 0',
+ 'pfunc_expr_unknown_error' => 'Аңлатма хатаһы: Билдәһеҙ хата ($1)',
+ 'pfunc_expr_not_a_number' => '$1: һөҙөмтә — һан түгел',
+ 'pfunc_string_too_long' => 'Хата: Юл оҙонлоғо билдәләнгән сиктән — $1 хәрефтән — ашҡан',
+);
+
+/** Southern Balochi (بلوچی مکرانی)
+ * @author Mostafadaneshvar
+ */
+$messages['bcc'] = array(
+ 'pfunc_desc' => 'تجزیه کنوکء بهتر کن گون عملگر آن منطقی',
+ 'pfunc_time_error' => 'حطا: نامعتبر وهد',
+ 'pfunc_time_too_long' => 'حطا: بازگین #زمان سوج',
+ 'pfunc_rel2abs_invalid_depth' => 'حطا: نامعتبر عمق ته مسیر: "$1"(سعی کتن په یک بالادی گرهنی چه ریشگی گرهنانا برسیت)',
+ 'pfunc_expr_stack_exhausted' => 'حطا اصطلاح: توده حالیک',
+ 'pfunc_expr_unexpected_number' => 'حطا اصطلاح: غیر منظرین شماره',
+ 'pfunc_expr_preg_match_failure' => 'حطا اصطلاح: غیرمنتظره این preg_ همسانی پروش وارت',
+ 'pfunc_expr_unrecognised_word' => 'حطا اصطلاح: نا شناسین کلمه "$1"',
+ 'pfunc_expr_unexpected_operator' => 'حطا اصطلاح:نه لوٹتین $1 اپراتور',
+ 'pfunc_expr_missing_operand' => 'حطا اصطلاح: گارین عملوند په $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'حطا اصطلاح: نه لوٹتگین براکت بندگ',
+ 'pfunc_expr_unrecognised_punctuation' => 'حطا اصطلاح: ناشناسین کاراکتر نشانه هلگی "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'حطا اصطلاح: نه بسته گین براکت',
+ 'pfunc_expr_division_by_zero' => 'تقسیم بر صفر',
+ 'pfunc_expr_invalid_argument' => 'نامعتبر آرگومان په $1: < -1 یا > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'نامعتبر آرگومان ته شی : <= 0',
+ 'pfunc_expr_unknown_error' => 'حطا اصطلاح :ناشناسین حطا ($1)',
+ 'pfunc_expr_not_a_number' => 'ته $1: نتیجه یک عددی نهنت',
+);
+
+/** Belarusian (Taraškievica orthography) (‪Беларуская (тарашкевіца)‬)
+ * @author EugeneZelenko
+ * @author Jim-by
+ * @author Red Winged Duck
+ */
+$messages['be-tarask'] = array(
+ 'pfunc_desc' => 'Палепшаны парсэр зь лягічнымі функцыямі',
+ 'pfunc_time_error' => 'Памылка: няслушны час',
+ 'pfunc_time_too_long' => 'Памылка: зашмат выклікаў функцыі #time',
+ 'pfunc_time_too_big' => 'Памылка: #time падтрымлівае гады толькі ў дыяпазоне да 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Памылка: няслушная глыбіня шляху: «$1» (спроба доступу да вузла, які знаходзіцца вышэй карэннага)',
+ 'pfunc_expr_stack_exhausted' => 'Памылка выразу: стэк перапоўнены',
+ 'pfunc_expr_unexpected_number' => 'Памылка выразу: нечаканая лічба',
+ 'pfunc_expr_preg_match_failure' => 'Памылка выразу: нечаканая памылка preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Памылка выразу: нераспазнанае слова «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Памылка выразу: нечаканы апэратар $1',
+ 'pfunc_expr_missing_operand' => 'Памылка выразу: няма апэранду $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Памылка выразу: нечаканая закрываючая дужка',
+ 'pfunc_expr_unrecognised_punctuation' => 'Памылка выразу: нераспазнаны сымбаль пунктуацыі «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Памылка выразу: незакрытая дужка',
+ 'pfunc_expr_division_by_zero' => 'Дзяленьне на нуль',
+ 'pfunc_expr_invalid_argument' => 'Памылковы аргумэнт для $1: < -1 ці > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Памылковы аргумэнт для ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Памылка выразу: невядомая памылка ($1)',
+ 'pfunc_expr_not_a_number' => 'У $1: вынік не зьяўляецца лічбай',
+ 'pfunc_string_too_long' => 'Памылка: у радку перавышаны ліміт $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}',
+);
+
+/** Bulgarian (Български)
+ * @author DCLXVI
+ * @author Spiritia
+ */
+$messages['bg'] = array(
+ 'pfunc_desc' => 'Подобряване на парсера с логически функции',
+ 'pfunc_time_error' => 'Грешка: невалидно време',
+ 'pfunc_time_too_long' => 'Грешка: Твърде много извиквания на #time',
+ 'pfunc_rel2abs_invalid_depth' => 'Грешка: Невалидна дълбочина в път: "$1" (опит за достъп на възел над корена)',
+ 'pfunc_expr_stack_exhausted' => 'Грешка в записа: Стекът е изчерпан',
+ 'pfunc_expr_unexpected_number' => 'Грешка в записа: Неочаквано число',
+ 'pfunc_expr_preg_match_failure' => 'Грешка в израза: Неочакван проблем с preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Грешка в записа: Неразпозната дума "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Грешка в записа: Неочакван оператор $1',
+ 'pfunc_expr_missing_operand' => 'Грешка в записа: Липсващ операнд в $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Грешка в записа: Една затваряща скоба в повече',
+ 'pfunc_expr_unrecognised_punctuation' => 'Грешка в записа: Неразпознат пунктуационен знак "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Грешка в записа: Незатворена скоба',
+ 'pfunc_expr_division_by_zero' => 'Деление на нула',
+ 'pfunc_expr_invalid_argument' => 'Невалиден аргумент за $1: < -1 или > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Невалиден аргумент за ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Грешка в записа: Неразпозната грешка ($1)',
+ 'pfunc_expr_not_a_number' => 'В $1: резултатът не е число',
+ 'pfunc_string_too_long' => 'Грешка: Низът превишава лимита от $1 знака',
+);
+
+/** Bengali (বাংলা)
+ * @author Bellayet
+ * @author Zaheen
+ */
+$messages['bn'] = array(
+ 'pfunc_desc' => 'লজিকাল ফাংশন দিয়ে পার্সারকে উন্নত করুন',
+ 'pfunc_time_error' => 'ত্রুটি: অবৈধ সময়',
+ 'pfunc_time_too_long' => 'ত্রুটি: অত্যধিক সংখ্যক #time কল',
+ 'pfunc_rel2abs_invalid_depth' => 'ত্রুটি: পাথে অবৈধ গভীরতা: "$1" (মূল নোডের উপরের একটি নোড অ্যাক্সেস করতে চেষ্টা করেছিল)',
+ 'pfunc_expr_stack_exhausted' => 'এক্সপ্রেশন ত্রুটি: স্ট্যাক শেষ হয়ে গেছে',
+ 'pfunc_expr_unexpected_number' => 'এক্সপ্রেশন ত্রুটি: অযাচিত সংখ্যা',
+ 'pfunc_expr_preg_match_failure' => 'এক্সপ্রেশন ত্রুটি: অযাচিত preg_match ব্যর্থতা',
+ 'pfunc_expr_unrecognised_word' => 'এক্সপ্রেশন ত্রুটি: অপরিচিত শব্দ "$1"',
+ 'pfunc_expr_unexpected_operator' => 'এক্সপ্রেশন ত্রুটি: অযাচিত $1 অপারেটর',
+ 'pfunc_expr_missing_operand' => 'এক্সপ্রেশন ত্রুটি: $1-এর জন্য অপারেন্ড নেই।',
+ 'pfunc_expr_unexpected_closing_bracket' => 'এক্সপ্রেশন ত্রুটি: অযাচিত সমাপ্তকারী বন্ধনী',
+ 'pfunc_expr_unrecognised_punctuation' => 'এক্সপ্রেশন ত্রুটি: অপরিচিত বিরামচিহ্ন ক্যারেক্টার "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'এক্সপ্রেশন ত্রুটি: উন্মুক্ত বন্ধনী',
+ 'pfunc_expr_division_by_zero' => 'শূন্য দ্বারা ভাগ করা হয়েছে',
+ 'pfunc_expr_invalid_argument' => '$1 এর জন্য ভুল শর্ত: < -1 অথবা > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln এর জন্য অসিদ্ধ শর্ত: <= 0',
+ 'pfunc_expr_unknown_error' => 'এক্সপ্রেশন ত্রুটি: অজানা ত্রুটি ($1)',
+ 'pfunc_expr_not_a_number' => '$1: এ ফলাফল কোন সংখ্যা নয়',
+);
+
+/** Breton (Brezhoneg)
+ * @author Fulup
+ */
+$messages['br'] = array(
+ 'pfunc_desc' => "Gwellaat a ra ar parser gant arc'hwelioù poellek",
+ 'pfunc_time_error' => 'Fazi : pad direizh',
+ 'pfunc_time_too_long' => 'Fazi : betek re eo bet galvet #time',
+ 'pfunc_time_too_big' => 'Fazi: #time ne skor nemet bloazioù betek 9999',
+ '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)",
+ 'pfunc_expr_stack_exhausted' => 'Kemennad faziek : pil riñset',
+ 'pfunc_expr_unexpected_number' => "Kemennad faziek : niver dic'hortoz",
+ 'pfunc_expr_preg_match_failure' => "Kemennad faziek : c'hwitadenn dic'hortoz evit <code>preg_match</code>",
+ 'pfunc_expr_unrecognised_word' => 'Kemennad faziek : Ger dianav "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Kemennad faziek : Oberier $1 dianav',
+ 'pfunc_expr_missing_operand' => 'Kemennad faziek : Dianav eo operand $1',
+ 'pfunc_expr_unexpected_closing_bracket' => "Kemennad faziek : Krommell zehoù dic'hortoz",
+ 'pfunc_expr_unrecognised_punctuation' => 'Kemennad faziek : arouezenn boentadouiñ dianav "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Kemennad faziek : Krommell zigor',
+ 'pfunc_expr_division_by_zero' => 'Rannañ dre mann',
+ 'pfunc_expr_invalid_argument' => 'Talvoudenn direizh evit $1: < -1 pe > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Talvoudenn direizh evit ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Kemennad faziek : Fazi dianav ($1)',
+ 'pfunc_expr_not_a_number' => "E $1: An disoc'h n'eo ket un niver",
+ 'pfunc_string_too_long' => "Fazi : Dreist d'ar vevenn uhelañ a $1 arouezenn eo an neudennad",
+);
+
+/** Bosnian (Bosanski)
+ * @author CERminator
+ * @author Seha
+ */
+$messages['bs'] = array(
+ 'pfunc_desc' => 'Povisi parser sa logičnim funkcijama',
+ 'pfunc_time_error' => 'Greška: vrijeme nije valjano',
+ 'pfunc_time_too_long' => 'Greška: previše poziva funkcije #time',
+ 'pfunc_time_too_big' => 'Greška: #time samo podržava godine do 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Graška: Nevrijedeća dubina u putu: "$1" (pokušaj dolaska na nula tačku iza korijenske nula tačke)',
+ 'pfunc_expr_stack_exhausted' => 'Greška izraza: Stok potrošen',
+ 'pfunc_expr_unexpected_number' => 'Greška izraza: Neočekivani broj',
+ 'pfunc_expr_preg_match_failure' => 'Razvojna greška: Neočekivana greška preg-pogotka',
+ 'pfunc_expr_unrecognised_word' => 'Greška izraza: Nepoznata riječ "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Greška izraza: Neočekivani $1 operator',
+ 'pfunc_expr_missing_operand' => 'Greška izraza: Nedostaje operator za $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Greška izraza: Neočekivana zagrada zatvaranja',
+ 'pfunc_expr_unrecognised_punctuation' => 'Razvojna greška: Nije prepoznat karakter punktacije "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Greška izraza: Nezatvorena zagrada',
+ 'pfunc_expr_division_by_zero' => 'Dijeljenje s nulom',
+ 'pfunc_expr_invalid_argument' => 'Nevažeći argument za $1: : < -1 ili > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Nevažeći argument za ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Razvojna greška: Nepoznata greška ($1)',
+ 'pfunc_expr_not_a_number' => 'u $1: rezultat nije broj',
+ 'pfunc_string_too_long' => 'Greška: Niz prelazi limit od $1 znakova',
+);
+
+/** Catalan (Català)
+ * @author Jordi Roqué
+ * @author Qllach
+ * @author SMP
+ */
+$messages['ca'] = array(
+ 'pfunc_desc' => 'Millora el processat amb funcions lògiques',
+ 'pfunc_time_error' => 'Error: temps invàlid',
+ 'pfunc_time_too_long' => 'Error: massa crides #time',
+ 'pfunc_rel2abs_invalid_depth' => "Error: Adreça invàlida al directori: «$1» (s'intentava accedir a un node superior de l'arrel)",
+ 'pfunc_expr_stack_exhausted' => "Error de l'expressió: Pila exhaurida",
+ 'pfunc_expr_unexpected_number' => "Error de l'expressió: Nombre inesperat",
+ 'pfunc_expr_preg_match_failure' => "Error de l'expressió: Error de funció no compresa i inesperada",
+ 'pfunc_expr_unrecognised_word' => 'Error de l\'expressió: Paraula no reconeguda "$1"',
+ 'pfunc_expr_unexpected_operator' => "Error de l'expressió: Operador $1 inesperat",
+ 'pfunc_expr_missing_operand' => "Error de l'expressió: Falta l'operand de $1",
+ 'pfunc_expr_unexpected_closing_bracket' => "Error de l'expressió: Parèntesi inesperat",
+ 'pfunc_expr_unrecognised_punctuation' => 'Error de l\'expressió: Signe de puntuació no reconegut "$1"',
+ 'pfunc_expr_unclosed_bracket' => "Error de l'expressió: Parèntesi no tancat",
+ 'pfunc_expr_division_by_zero' => 'Divisió entre zero',
+ 'pfunc_expr_invalid_argument' => 'Valor no vàlid per a $1: < -1 ó > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Valor no vàlid per a ln: <= 0',
+ 'pfunc_expr_unknown_error' => "Error de l'expressió: Desconegut ($1)",
+ 'pfunc_expr_not_a_number' => 'A $1: el resultat no és un nombre',
+ 'pfunc_string_too_long' => 'Error: La cadena és $1 caràcters massa llarga',
+);
+
+/** Chechen (Нохчийн)
+ * @author Sasan700
+ */
+$messages['ce'] = array(
+ 'pfunc_time_error' => 'Гlалато: хан нийса яц',
+ 'pfunc_expr_stack_exhausted' => 'Яздарехь гlалат ду: хьаладуьззина татол',
+ 'pfunc_expr_unrecognised_word' => 'Яздарехь гlалат ду: дойзуш доцу дош «$1»',
+);
+
+/** Czech (Česky)
+ * @author Danny B.
+ * @author Li-sung
+ * @author Matěj Grabovský
+ * @author Mormegil
+ * @author Sp5uhe
+ */
+$messages['cs'] = array(
+ 'pfunc_desc' => 'Rozšíření parseru o logické funkce',
+ 'pfunc_time_error' => 'Chyba: neplatný čas',
+ 'pfunc_time_too_long' => 'Chyba: příliš mnoho volání #time',
+ 'pfunc_time_too_big' => 'Chyba: #time nepodporuje roky nad 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Chyba: Neplatná hloubka v cestě: "$1" (pokus o přístup do uzlu vyššího než kořen)',
+ 'pfunc_expr_stack_exhausted' => 'Chyba ve výrazu: Zásobník plně obsazen',
+ 'pfunc_expr_unexpected_number' => 'Chyba ve výrazu: Očekáváno číslo',
+ 'pfunc_expr_preg_match_failure' => 'Chyba ve výrazu: Neočekávaná chyba funkce preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Chyba ve výrazu: Nerozpoznané slovo ˆ„$1“',
+ 'pfunc_expr_unexpected_operator' => 'Chyba ve výrazu: Neočekávaný operátor $1',
+ 'pfunc_expr_missing_operand' => 'Chyba ve výrazu: Chybí operand pro $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Chyba ve výrazu: Neočekávaná uzavírací závorka',
+ 'pfunc_expr_unrecognised_punctuation' => 'Chyba ve výrazu: Nerozpoznaný interpunkční znak ˆ„$1“',
+ 'pfunc_expr_unclosed_bracket' => 'Chyba ve výrazu: Neuzavřené závorky',
+ 'pfunc_expr_division_by_zero' => 'Dělení nulou',
+ 'pfunc_expr_invalid_argument' => 'Neplatný argument pro $1: < -1 nebo > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Neplatný argument pro ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Chyba ve výrazu: Neznámá chyba ($1)',
+ 'pfunc_expr_not_a_number' => 'V $1: výsledkem není číslo',
+ 'pfunc_string_too_long' => 'Chyba: Řetězec je delší než $1 {{PLURAL:$1|znak|znaky|znaků}}, což je limit',
+ 'pfunc-convert-dimensionmismatch' => 'Chyba: Nelze převést mezi jednotkami „$1“ a „$2“.',
+ 'pfunc-convert-unknownunit' => 'Chyba: Neznámá jednotka „$1“.',
+ 'pfunc-convert-unknowndimension' => 'Chyba: Neznámý rozměr „$1“',
+ 'pfunc-convert-invalidcompoundunit' => 'Chyba: Neplatná složená jednotka „$1“.',
+ 'pfunc-convert-nounit' => 'Chyba: Nebyla zadána zdrojová jednotka.',
+ 'pfunc-convert-doublecompoundunit' => 'Chyba: Nelze zpracovat dvojitě složené jednotky, jako je „$1“.',
+ 'pfunc-convert-dimension-length' => 'délka',
+ 'pfunc-convert-dimension-area' => 'plocha',
+ 'pfunc-convert-dimension-volume' => 'objem',
+ 'pfunc-convert-dimension-time' => 'čas',
+ 'pfunc-convert-dimension-timesquared' => 'čas²',
+ 'pfunc-convert-dimension-mass' => 'hmotnost',
+ 'pfunc-convert-dimension-speed' => 'rychlost',
+ 'pfunc-convert-dimension-temperature' => 'teplota',
+ 'pfunc-convert-dimension-acceleration' => 'zrychlení',
+ 'pfunc-convert-dimension-force' => 'síla',
+ 'pfunc-convert-dimension-torque' => 'točivý moment',
+ 'pfunc-convert-dimension-energy' => 'energie',
+ 'pfunc-convert-dimension-power' => 'výkon',
+ 'pfunc-convert-dimension-pressure' => 'tlak',
+ 'pfunc-convert-dimension-density' => 'hustota',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'spotřeba',
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hekto',
+ 'pfunc-convert-prefix-deca' => 'deka',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'mili',
+ 'pfunc-convert-prefix-micro' => 'mikro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'piko',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yokto',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2metr|$2metry|$2metrů}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|míle|míle|mil}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|stopa|stopy|stop}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|palec|palce|palců}}',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2parsek|$2parseky|$2parseků}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|astronomická jednotka|astronomické jednotky|astronomických jednotek}}',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|kilometr čtvereční|kilometry čtvereční|kilometrů čtverečních}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hektar|hektary|hektarů}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|akr|akry|akrů}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|čtvereční stopa|čtvereční stopy|čtverečních stop}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|čtvereční palec|čtvereční palce|čtverečních palců}}',
+);
+
+/** Danish (Dansk)
+ * @author Byrial
+ * @author Morten LJ
+ * @author Peter Alberti
+ */
+$messages['da'] = array(
+ 'pfunc_desc' => 'Udvider parser med logiske funktioner',
+ 'pfunc_time_error' => 'Fejl: Ugyldig tid',
+ 'pfunc_time_too_long' => 'Fejl: for mange kald af #time',
+ 'pfunc_time_too_big' => 'Fejl: #time understøtter kun årstal frem til 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Fejl: Ugyldig dybde i sti: "$1" (prøvede at tilgå en knude over rodknuden)',
+ 'pfunc_expr_stack_exhausted' => 'Udtryksfejl: Stak tømt',
+ 'pfunc_expr_unexpected_number' => 'Fejl: Uventet tal',
+ 'pfunc_expr_preg_match_failure' => 'Udtryksfejl: Uventet fejl i preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Udtryksfejl: Uventet ord "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Udtryksfejl: Uventet "$1"-operator',
+ 'pfunc_expr_missing_operand' => 'Udtryksfejl: Manglende operand til $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Udtryksfejl: Uventet lukkende parentes',
+ 'pfunc_expr_unrecognised_punctuation' => 'Udtryksfejl: Uventet tegnsætning-tegn: "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Udtryksfejl: Uafsluttet kantet parantes',
+ 'pfunc_expr_division_by_zero' => 'Division med nul',
+ 'pfunc_expr_invalid_argument' => 'Ugyldigt argument for $1: < -1 eller > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ugyldigt argument for ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Udtryksfejl: Ukendt fejl ($1)',
+ 'pfunc_expr_not_a_number' => 'I $1: Resultatet er ikke et tal',
+ 'pfunc_string_too_long' => 'Fejl: Strengen overskrider grænsen på $1 tegn',
+);
+
+/** German (Deutsch)
+ * @author Kghbln
+ * @author LWChris
+ * @author Metalhead64
+ * @author Raimond Spekking
+ */
+$messages['de'] = array(
+ 'pfunc_desc' => 'Erweitert den Parser um logische Funktionen',
+ 'pfunc_time_error' => 'Fehler: Ungültige Zeitangabe',
+ 'pfunc_time_too_long' => 'Fehler: Zu viele #time-Aufrufe',
+ 'pfunc_time_too_big' => 'Fehler: #time unterstützt nur Jahre bis 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Fehler: Ungültige Pfadtiefe: „$1“ (Zugriff auf einen Knotenpunkt oberhalb des Hauptknotenpunktes ist empfohlen)',
+ 'pfunc_expr_stack_exhausted' => 'Expression-Fehler: Stacküberlauf',
+ 'pfunc_expr_unexpected_number' => 'Expression-Fehler: Unerwartete Zahl',
+ 'pfunc_expr_preg_match_failure' => 'Expression-Fehler: Unerwartete „preg_match“-Fehlfunktion',
+ 'pfunc_expr_unrecognised_word' => 'Expression-Fehler: Unerkanntes Wort „$1“',
+ 'pfunc_expr_unexpected_operator' => 'Expression-Fehler: Unerwarteter Operator <tt>$1</tt>',
+ 'pfunc_expr_missing_operand' => 'Expression-Fehler: Fehlender Operand für <tt>$1</tt>',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Fehler: Unerwartete schließende eckige Klammer',
+ 'pfunc_expr_unrecognised_punctuation' => 'Expression-Fehler: Unerkanntes Satzzeichen „$1“',
+ 'pfunc_expr_unclosed_bracket' => 'Expression-Fehler: Nicht geschlossene eckige Klammer',
+ 'pfunc_expr_division_by_zero' => 'Division durch Null',
+ 'pfunc_expr_invalid_argument' => 'Ungültiges Argument für $1: < -1 oder > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ungültiges Argument für ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Expression-Fehler: Unbekannter Fehler ($1)',
+ 'pfunc_expr_not_a_number' => 'In $1: Ergebnis ist keine Zahl',
+ 'pfunc_string_too_long' => 'Fehler: Zeichenkette überschreitet Zeichenlimit von $1',
+);
+
+/** Swiss High German (Schweizer Hochdeutsch)
+ * @author MichaelFrey
+ */
+$messages['de-ch'] = array(
+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Fehler: Unerwartete schliessende eckige Klammer',
+);
+
+/** Zazaki (Zazaki)
+ * @author Aspar
+ */
+$messages['diq'] = array(
+ 'pfunc_desc' => 'Enhance parser with logical functions',
+ 'pfunc_time_error' => 'xeta: zemano nemeqbul',
+ 'pfunc_time_too_long' => 'xeta:zaf zêd mesajê #timeyi',
+ '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ı)',
+ 'pfunc_expr_stack_exhausted' => 'xetaya ifadeyi: stack qediya',
+ 'pfunc_expr_unexpected_number' => 'xetaya ifadeyi: amaro bêtexmin',
+ 'pfunc_expr_preg_match_failure' => 'xetaya ifadeyi: arızaya preg_matchi yo bêtexmin',
+ 'pfunc_expr_unrecognised_word' => 'xetaya ifadeyi: çekuya "$1"i nêşinasiyeno',
+ 'pfunc_expr_unexpected_operator' => 'xetaya ifadeyi: operatorê $1i yo bêtexmin',
+ 'pfunc_expr_missing_operand' => 'xetaya ifadeyi: qey $1i termo kêm',
+ 'pfunc_expr_unexpected_closing_bracket' => 'xetaya ifadeyi: parantez bıqefelno bêtexmin',
+ 'pfunc_expr_unrecognised_punctuation' => 'xetaya ifadeyi: karakterê noqtakerdışê "$1"i yo ke nêşınasiyeno',
+ 'pfunc_expr_unclosed_bracket' => 'xetaya ifadeyi: parantezo nêqefelnaye',
+ 'pfunc_expr_division_by_zero' => 'pê sıfır teqsim ker',
+ 'pfunc_expr_invalid_argument' => 'Invalid argument for $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Invalid argument for ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'xetaya ifadeyi: neticeya ke nêzaniyena ($1)',
+ 'pfunc_expr_not_a_number' => '$1 de: netice yew amar niyo',
+ 'pfunc_string_too_long' => 'xeta: rêze heddê karakteri yo $1i veciyaya',
+);
+
+/** Lower Sorbian (Dolnoserbski)
+ * @author Michawiki
+ */
+$messages['dsb'] = array(
+ 'pfunc_desc' => 'Rozšyrja parser wó logiske funkcije',
+ 'pfunc_time_error' => 'Zmólka: njepłaśiwy cas',
+ 'pfunc_time_too_long' => 'Zmólka: pśewjele zawołanjow #time',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Wurazowa zmólka: Stack wupócerany',
+ 'pfunc_expr_unexpected_number' => 'Wurazowa zmólka: Njewócakana licba',
+ 'pfunc_expr_preg_match_failure' => 'Wurazowa zmólka: Njewócakana zmólkata funkcija preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Wurazowa zmólka: Njespóznane słowo "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Wurazowa zmólka: Njewócakany opeator $1',
+ 'pfunc_expr_missing_operand' => 'Wurazowa zmólka: Felujucy operand za $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Wurazowa zmólka: Njewócakana kóńcajuca rožkata spinka',
+ 'pfunc_expr_unrecognised_punctuation' => 'Wurazowa zmólka: Njespóznane interpunkciske znamuško "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Wurazowa zmólka: Žedna kóńcajuca spinka',
+ 'pfunc_expr_division_by_zero' => 'Diwizija pśez nul',
+ 'pfunc_expr_invalid_argument' => 'Njepłaśiwy argument $1: < -1 abo > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Njepłaśiwy argument za ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Wurazowa zmólka: Njeznata zmólka ($1)',
+ 'pfunc_expr_not_a_number' => 'W $1: wuslědk njejo licba',
+ 'pfunc_string_too_long' => 'Zmólka: Znamješkowy rěd pśekčaca limit $1 znamješkow',
+);
+
+/** Greek (Ελληνικά)
+ * @author Consta
+ * @author Dead3y3
+ * @author Omnipaedista
+ * @author Απεργός
+ */
+$messages['el'] = array(
+ 'pfunc_desc' => 'Βελτιώνει το συντακτικό αναλυτή με λογικές συναρτήσεις',
+ 'pfunc_time_error' => 'Σφάλμα: άκυρος χρόνος',
+ 'pfunc_time_too_long' => 'Σφάλμα: πάρα πολλές κλήσεις της #time',
+ 'pfunc_rel2abs_invalid_depth' => 'Σφάλμα: Άκυρο βάθος στη διαδρομή: «$1» (έγινε προσπάθεια για πρόσβαση σε έναν κόμβο πάνω από τον ριζικό κόμβο)',
+ 'pfunc_expr_stack_exhausted' => 'Σφάλμα έκφρασης: Η στοίβα εξαντλήθηκε',
+ 'pfunc_expr_unexpected_number' => 'Σφάλμα έκφρασης: Μη αναμενόμενος αριθμός',
+ 'pfunc_expr_preg_match_failure' => 'Σφάλμα έκφρασης: Μη αναμενόμενη αποτυχία preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Σφάλμα έκφρασης: Μη αναγνωρίσιμη λέξη "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Σφάλμα έκφρασης: Μη αναμενόμενος τελεστής $1',
+ 'pfunc_expr_missing_operand' => 'Σφάλμα έκφρασης: Λείπει ο τελεστέος για την έκφραση $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Σφάλμα έκφρασης: Μη αναμενόμενη αγκύλη κλεισίματος',
+ 'pfunc_expr_unrecognised_punctuation' => 'Σφάλμα έκφρασης: Μη αναγνρίσμος χαρακτήρας στίξης "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Σφάλμα έκφρασης: Αγκύλη χωρίς κλείσιμο',
+ 'pfunc_expr_division_by_zero' => 'Διαίρεση με το μηδέν',
+ 'pfunc_expr_invalid_argument' => 'Άκυρη παράμετρος για το $1: < -1 ή > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Άκυρη παράμετρος για το ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Σφάλμα έκφρασης: Άγνωστο σφάλμα ($1)',
+ 'pfunc_expr_not_a_number' => 'Στο $1: το αποτέλεσμα δεν είναι αριθμός',
+ 'pfunc_string_too_long' => 'Σφάλμα: ο ορμαθός υπερβαίνει $1 το όριο χαρακτήρων',
+);
+
+/**
+ * British english
+ * @author Happy-melon
+ */
+$messages['en-gb'] = array(
+ # LENGTH
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2metre|$2metres}}',
+
+ # AREA #
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|square kilometre|square kilometres}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|square metre|square metres}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|square centimetre|square centimetres}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|square millimetre|square millimetres}}',
+
+ # VOLUME #
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|cubic metre|cubic metres}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|cubic centimetre|cubic centimetres}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|cubic millimetre|cubic millimetres}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|$2litre|$2litres}}',
+
+ # PRESSURE
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|millimetre of mercury|millimetres of mercury}}',
+);
+
+/** Esperanto (Esperanto)
+ * @author Yekrats
+ */
+$messages['eo'] = array(
+ 'pfunc_desc' => 'Etendi sintaksan analizilon kun logikaj funkcioj',
+ 'pfunc_time_error' => 'Eraro: malvalida tempo',
+ 'pfunc_time_too_long' => "Eraro: tro da vokoj ''#time''",
+ 'pfunc_rel2abs_invalid_depth' => 'Eraro: Malvalida profundo en vojo: "$1" (provis atingi nodon super la radika nodo)',
+ 'pfunc_expr_stack_exhausted' => 'Esprima eraro: Stako estis malplenigita',
+ 'pfunc_expr_unexpected_number' => 'Esprima eraro: Neatendita numeralo',
+ 'pfunc_expr_preg_match_failure' => 'Esprima eraro: Neatendita preg_match malsukceso',
+ 'pfunc_expr_unrecognised_word' => 'Esprima eraro: Nekonata vorto "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Esprima eraro: Neatendita operacisimbolo $1',
+ 'pfunc_expr_missing_operand' => 'Esprima eraro: Mankas operando por $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Esprima eraro: Neatendita ferma krampo',
+ 'pfunc_expr_unrecognised_punctuation' => 'Esprima eraro: Nekonata interpunkcia simbolo "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Esprima eraro: Malferma krampo',
+ 'pfunc_expr_division_by_zero' => 'Divido per nulo',
+ 'pfunc_expr_invalid_argument' => 'Malvalida argumento por $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Malvalida argumento por ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Esprima eraro: Nekonata eraro ($1)',
+ 'pfunc_expr_not_a_number' => 'En $1: rezulto ne estas nombro',
+ 'pfunc_string_too_long' => 'Eraro: Ĉeno preterpasas signo-limon $1',
+);
+
+/** Spanish (Español)
+ * @author Crazymadlover
+ * @author Muro de Aguas
+ * @author Remember the dot
+ * @author Sanbec
+ */
+$messages['es'] = array(
+ 'pfunc_desc' => 'Mejora el analizador lógico con funciones.',
+ 'pfunc_time_error' => 'Error con la expresión: Tiempo no válido',
+ 'pfunc_time_too_long' => 'Error con la expresión: se están utilizando demasiados "#time"',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Error de expresión: Pila agotada',
+ 'pfunc_expr_unexpected_number' => 'Error con la expresión: Número no esperado',
+ 'pfunc_expr_preg_match_failure' => 'Error de expresión: Fracaso preg_match no esperado',
+ 'pfunc_expr_unrecognised_word' => 'Error con la expresión: La palabra "$1" no se reconoce',
+ 'pfunc_expr_unexpected_operator' => 'Error con la expresión: Operador $1 no esperado',
+ 'pfunc_expr_missing_operand' => 'Error con la expresión: Falta un operador para $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Error con la expresión: Paréntesis de cierre no esperado',
+ 'pfunc_expr_unrecognised_punctuation' => 'Error con la expresión: Carácter de puntuación no reconocido "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Error con la expresión: Paréntesis sin cerrar',
+ 'pfunc_expr_division_by_zero' => 'División entre cero',
+ 'pfunc_expr_invalid_argument' => 'Argumento incorrecto para $1: < -1 ó > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumento incorrecto para ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Error con la expresión: Error desconocido ($1)',
+ 'pfunc_expr_not_a_number' => 'En $1: el resultado no es un número',
+ 'pfunc_string_too_long' => 'Error: la cadena excede el límite de $1 caracteres',
+);
+
+/** Estonian (Eesti)
+ * @author Pikne
+ */
+$messages['et'] = array(
+ 'pfunc_desc' => 'Laiendab parserit loogiliste funktsioonidega.',
+ 'pfunc_expr_division_by_zero' => 'Nulliga jagamine',
+);
+
+/** Basque (Euskara)
+ * @author An13sa
+ * @author Kobazulo
+ */
+$messages['eu'] = array(
+ 'pfunc_time_error' => 'Errorea: baliogabeko ordua',
+ 'pfunc_time_too_long' => 'Errorea: #time dei gehiegi',
+ 'pfunc_time_too_big' => 'Errorea: #time funtzioak 9999 urtera arte funtzionatzen du bakarrik',
+ 'pfunc_rel2abs_invalid_depth' => 'Errorea: Baliogabeko sakonera fitxategi bidean: "$1" (root puntutik gora sartzen saiatu da)',
+ 'pfunc_expr_unexpected_number' => 'Adierazpen errorea: Ustekabeko zenbakia',
+ 'pfunc_expr_unrecognised_word' => 'Adierazpen errorea: Hitz ezezaguna "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Adierazpen errorea: Ustekabeko $1 eragilea',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Adierazpen errorea: Ustekabeko kortxete itxiera',
+ 'pfunc_expr_unrecognised_punctuation' => 'Adierazpen errorea: puntuazio karaktere ezezaguna "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Adierazpen errorea: Itxi gabeko kortxetea',
+ 'pfunc_expr_division_by_zero' => 'Zeroz zatitu',
+ 'pfunc_expr_invalid_argument' => 'Argumentu okerra ondorengoarentzat: $1: < -1 edo > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumentu okerra ondorengoarentzat: ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Adierazpen errorea: errore ezezaguna ($1)',
+ 'pfunc_expr_not_a_number' => '$1-(e)n: emaitza ez da zenbaki bat',
+ 'pfunc_string_too_long' => 'Errorea: hitzak $1 karaktereko muga gainditzen du',
+);
+
+/** Persian (فارسی)
+ * @author Ebraminio
+ * @author Huji
+ * @author Wayiran
+ */
+$messages['fa'] = array(
+ 'pfunc_desc' => 'به تجزیه‌گر، دستورهای منطقی می‌افزاید',
+ 'pfunc_time_error' => 'خطا: زمان غیرمجاز',
+ 'pfunc_time_too_long' => 'خطا: فراخوانی بیش از حد #time',
+ 'pfunc_time_too_big' => 'خطا: <span style="direction: ltr; unicode-bidi: bidi-override;">#time</span> تا سال ۹۹۹۹ را فقط حمایت می‌کند.',
+ 'pfunc_rel2abs_invalid_depth' => 'خطا: عمق غیر مجاز در نشانی «$1» (تلاش برای دسترسی به یک نشانی فراتر از نشانی ریشه)',
+ 'pfunc_expr_stack_exhausted' => 'خطای عبارت: پشته از دست رفته',
+ 'pfunc_expr_unexpected_number' => 'خطای عبارت: عدد دور از انتظار',
+ 'pfunc_expr_preg_match_failure' => 'خطای عبارت: خطای preg_match دور از انتظار',
+ 'pfunc_expr_unrecognised_word' => 'خطای عبارت: کلمه ناشناخته «$1»',
+ 'pfunc_expr_unexpected_operator' => 'خطای عبارت: عملگر $1 دور از انتظار',
+ 'pfunc_expr_missing_operand' => 'خطای عبارت: عملگر گمشده برای $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'خطای عبارت: پرانتز بسته اضافی',
+ 'pfunc_expr_unrecognised_punctuation' => 'خطای عبارت: نویسه نقطه‌گذاری شناخته نشده «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'خطای عبارت: پرانتز بسته‌نشده',
+ 'pfunc_expr_division_by_zero' => 'تقسیم بر صفر',
+ 'pfunc_expr_invalid_argument' => 'پارامتر غیر مجاز برای $1: < -۱ یا > ۱',
+ 'pfunc_expr_invalid_argument_ln' => 'پارامتر غیر مجاز برای لگاریتم طبیعی: <= صفر',
+ 'pfunc_expr_unknown_error' => 'خطای عبارت: خطای ناشناخته ($1)',
+ 'pfunc_expr_not_a_number' => 'در $1: نتیجه عدد نیست',
+ 'pfunc_string_too_long' => 'خطا: رشته از محدودیت نویسه‌ای $1 تجاوز می‌کند',
+);
+
+/** Finnish (Suomi)
+ * @author Agony
+ * @author Cimon Avaro
+ * @author Nike
+ */
+$messages['fi'] = array(
+ 'pfunc_desc' => 'Laajentaa jäsennintä loogisilla funktiolla.',
+ 'pfunc_time_error' => 'Virhe: kelvoton aika',
+ 'pfunc_time_too_long' => 'Virhe: liian monta #time-kutsua',
+ 'pfunc_rel2abs_invalid_depth' => 'Virhe: Virheellinen syvyys polussa: $1 (ei juurisolmun sisällä)',
+ 'pfunc_expr_stack_exhausted' => 'Virhe lausekkeessa: pino loppui',
+ 'pfunc_expr_unexpected_number' => 'Virhe lausekkeessa: odottamaton numero',
+ 'pfunc_expr_preg_match_failure' => 'Virhe lausekkeessa: <tt>preg_match</tt> palautti virheen',
+ 'pfunc_expr_unrecognised_word' => 'Virhe lausekkeessa: tunnistamaton sana ”$1”',
+ 'pfunc_expr_unexpected_operator' => 'Virhe lausekkeessa: odottamaton $1-operaattori',
+ 'pfunc_expr_missing_operand' => 'Virhe lausekkeessa: operaattorin $1 edellyttämä operandi puuttuu',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Virhe lausekkeessa: odottamaton sulkeva sulkumerkki',
+ 'pfunc_expr_unrecognised_punctuation' => 'Virhe lausekkeessa: tunnistamaton välimerkki ”$1”',
+ 'pfunc_expr_unclosed_bracket' => 'Virhe ilmauksessa: sulkeva sulkumerkki puuttuu',
+ 'pfunc_expr_division_by_zero' => 'Virhe: Jako nollalla',
+ 'pfunc_expr_invalid_argument' => 'Virheellinen arvo $1: < -1 tai > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Virheellinen arvo funktiolle ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Virhe lausekkeessa: tuntematon virhe ($1)',
+ 'pfunc_expr_not_a_number' => 'Lausekkeessa $1: tulos ei ole luku',
+ 'pfunc_string_too_long' => 'Virhe: Merkkijono ylittää $1 merkin ylärajan',
+);
+
+/** French (Français)
+ * @author Crochet.david
+ * @author Grondin
+ * @author IAlex
+ * @author Sherbrooke
+ * @author Urhixidur
+ * @author Verdy p
+ */
+$messages['fr'] = array(
+ 'pfunc_desc' => 'Améliore le parseur avec des fonctions logiques',
+ 'pfunc_time_error' => 'Erreur : durée invalide.',
+ 'pfunc_time_too_long' => 'Erreur : appels trop nombreux à <code>#time</code>.',
+ 'pfunc_time_too_big' => 'Erreur : #time prend uniquement en charge des années jusqu’à 9999.',
+ 'pfunc_rel2abs_invalid_depth' => 'Erreur : profondeur invalide dans le chemin « $1 » (a essayé d’accéder à un niveau au-dessus du nœud racine).',
+ 'pfunc_expr_stack_exhausted' => 'Erreur d’expression : pile épuisée.',
+ 'pfunc_expr_unexpected_number' => 'Erreur d’expression : nombre inattendu.',
+ 'pfunc_expr_preg_match_failure' => 'Erreur d’expression : échec inattendu de <code>preg_match</code>.',
+ 'pfunc_expr_unrecognised_word' => 'Erreur d’expression : mot « $1 » non reconnu.',
+ 'pfunc_expr_unexpected_operator' => "Erreur d’expression : opérateur '''$1''' inattendu.",
+ 'pfunc_expr_missing_operand' => "Erreur d’expression : opérande manquant pour '''$1'''.",
+ 'pfunc_expr_unexpected_closing_bracket' => 'Erreur d’expression : parenthèse fermante inattendue.',
+ 'pfunc_expr_unrecognised_punctuation' => 'Erreur d’expression : caractère de ponctuation « $1 » non reconnu.',
+ 'pfunc_expr_unclosed_bracket' => 'Erreur d’expression : parenthèse non fermée.',
+ 'pfunc_expr_division_by_zero' => 'Division par zéro.',
+ 'pfunc_expr_invalid_argument' => "Paramètre incorrect pour '''$1''' : < -1 ou > 1.",
+ 'pfunc_expr_invalid_argument_ln' => "Paramètre incorrect pour '''ln''' : ≤ 0.",
+ 'pfunc_expr_unknown_error' => 'Erreur d’expression : erreur inconnue ($1).',
+ 'pfunc_expr_not_a_number' => 'Dans $1 : le résultat n’est pas un nombre.',
+ 'pfunc_string_too_long' => 'Erreur : La chaîne dépasse la limite maximale de $1 caractère{{PLURAL:$1||s}}.',
+ 'pfunc-convert-unknownunit' => 'Erreur : "$1" est une unité inconnue.',
+ 'pfunc-convert-unknowndimension' => 'Erreur : "$1" est une dimension inconnue.',
+ 'pfunc-convert-dimension-length' => 'longueur',
+ 'pfunc-convert-dimension-area' => 'aire',
+ 'pfunc-convert-dimension-volume' => 'volume',
+ 'pfunc-convert-dimension-time' => 'temps',
+ 'pfunc-convert-dimension-timesquared' => 'temps<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'masse',
+ 'pfunc-convert-dimension-speed' => 'vitesse',
+ 'pfunc-convert-dimension-temperature' => 'température',
+ 'pfunc-convert-dimension-acceleration' => 'accélération',
+ 'pfunc-convert-dimension-force' => 'force',
+ 'pfunc-convert-dimension-torque' => 'couple',
+ 'pfunc-convert-dimension-energy' => 'énergie',
+ 'pfunc-convert-dimension-power' => 'puissance',
+ 'pfunc-convert-dimension-pressure' => 'pression',
+ 'pfunc-convert-dimension-density' => 'densité',
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hecto',
+ 'pfunc-convert-prefix-deca' => 'deca',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'milli',
+ 'pfunc-convert-prefix-micro' => 'micro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'pico',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yocto',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|brasse|brasses}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|pied|pieds}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|main|mains}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|pouce|pouces}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|unité astronomique|unités astronomiques}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hectare|hectares}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|seconde|secondes}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|jour|jours}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|heure|heures}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minute|minutes}}',
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-year-abbr' => '$2an',
+ 'pfunc-convert-unit-time-day-abbr' => 'j',
+ 'pfunc-convert-unit-time-hour-abbr' => 'h',
+ 'pfunc-convert-unit-time-minute-abbr' => 'm',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|litre|litres}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|centilitre|centilitres}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|millilitre|millilitres}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|boisseau|boisseaux}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2l',
+ 'pfunc-convert-unit-speed-mile-hour' => 'miles par heure',
+ 'pfunc-convert-unit-pressure-bar' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar' => 'decibar',
+ 'pfunc-convert-unit-pressure-millibar' => 'millibar',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+);
+
+/** Franco-Provençal (Arpetan)
+ * @author ChrisPtDe
+ */
+$messages['frp'] = array(
+ 'pfunc_desc' => 'Mèlyore lo parsor avouéc des fonccions logiques.',
+ 'pfunc_time_error' => 'Èrror : temps envalido',
+ 'pfunc_time_too_long' => 'Èrror : trop grant nombro d’apèls a <code>#time</code>',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Èrror d’èxprèssion : pila èpouesiê',
+ 'pfunc_expr_unexpected_number' => 'Èrror d’èxprèssion : nombro emprèvu',
+ 'pfunc_expr_preg_match_failure' => 'Èrror d’èxprèssion : falyita emprèvua de <code>preg_match</code>',
+ 'pfunc_expr_unrecognised_word' => 'Èrror d’èxprèssion : mot « $1 » pas recognu',
+ 'pfunc_expr_unexpected_operator' => 'Èrror d’èxprèssion : opèrator « $1 » emprèvu',
+ 'pfunc_expr_missing_operand' => 'Èrror d’èxprèssion : opèrando manquent por « $1 »',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Èrror d’èxprèssion : parentèsa cllosenta emprèvua',
+ 'pfunc_expr_unrecognised_punctuation' => 'Èrror d’èxprèssion : caractèro de ponctuacion « $1 » pas recognu',
+ 'pfunc_expr_unclosed_bracket' => 'Èrror d’èxprèssion : parentèsa pas cllôsa',
+ 'pfunc_expr_division_by_zero' => 'Division per zérô',
+ 'pfunc_expr_invalid_argument' => 'Argument fôx por « $1 » : < -1 ou ben > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argument fôx por « ln » : ≤ 0',
+ 'pfunc_expr_unknown_error' => 'Èrror d’èxprèssion : èrror encognua ($1)',
+ 'pfunc_expr_not_a_number' => 'Dens $1 : lo rèsultat est pas un nombro',
+ 'pfunc_string_too_long' => 'Èrror : la chêna dèpâsse la limita d’amont de $1 caractèro{{PLURAL:$1||s}}',
+);
+
+/** Galician (Galego)
+ * @author Alma
+ * @author Elisardojm
+ * @author Toliño
+ * @author Xosé
+ */
+$messages['gl'] = array(
+ 'pfunc_desc' => 'Mellora o analizador con funcións lóxicas',
+ 'pfunc_time_error' => 'Erro: Hora non válida.',
+ 'pfunc_time_too_long' => 'Erro: Demasiadas chamadas #time.',
+ 'pfunc_time_too_big' => 'Erro: #time só permite anos ata o 9999.',
+ 'pfunc_rel2abs_invalid_depth' => 'Erro: Profundidade da ruta non válida: "$1" (intentouse acceder a un nodo por riba do nodo raíz).',
+ 'pfunc_expr_stack_exhausted' => 'Erro de expresión: Pila esgotada.',
+ 'pfunc_expr_unexpected_number' => 'Erro de expresión: Número inesperado.',
+ 'pfunc_expr_preg_match_failure' => 'Erro de expresión: Fallo de preg_match inesperado.',
+ 'pfunc_expr_unrecognised_word' => 'Erro de expresión: Descoñécese a palabra "$1".',
+ 'pfunc_expr_unexpected_operator' => 'Erro de expresión: Operador "$1" inesperado.',
+ 'pfunc_expr_missing_operand' => 'Erro de expresión: Falta un operador para $1.',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Erro de expresión: Corchete de peche inesperado.',
+ 'pfunc_expr_unrecognised_punctuation' => 'Erro de expresión: Descoñécese o signo de puntuación "$1".',
+ 'pfunc_expr_unclosed_bracket' => 'Erro de expresión: Paréntese sen pechar.',
+ 'pfunc_expr_division_by_zero' => 'División por cero.',
+ 'pfunc_expr_invalid_argument' => 'Argumento inválido para $1: < -1 ou > 1.',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumento inválido para ln: <= 0.',
+ 'pfunc_expr_unknown_error' => 'Erro de expresión: Erro descoñecido ($1).',
+ 'pfunc_expr_not_a_number' => 'En $1: O resultado non é un número.',
+ 'pfunc_string_too_long' => 'Erro: A cadea excede o límite de $1 caracteres.',
+ 'pfunc-convert-dimension-length' => 'lonxitude',
+ 'pfunc-convert-dimension-area' => 'área',
+ 'pfunc-convert-dimension-volume' => 'volume',
+ 'pfunc-convert-dimension-time' => 'tempo',
+ 'pfunc-convert-dimension-timesquared' => 'tempo<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'masa',
+ 'pfunc-convert-dimension-speed' => 'velocidade',
+ 'pfunc-convert-dimension-temperature' => 'temperatura',
+ 'pfunc-convert-dimension-acceleration' => 'aceleración',
+ 'pfunc-convert-dimension-force' => 'forza',
+ 'pfunc-convert-dimension-torque' => 'torque',
+ 'pfunc-convert-dimension-energy' => 'enerxía',
+ 'pfunc-convert-dimension-power' => 'potencia',
+ 'pfunc-convert-dimension-pressure' => 'presión',
+ 'pfunc-convert-dimension-density' => 'densidade',
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'xiga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'quilo',
+ 'pfunc-convert-prefix-hecto' => 'hecto',
+ 'pfunc-convert-prefix-deca' => 'deca',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'milli',
+ 'pfunc-convert-prefix-micro' => 'micro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'pico',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yocto',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+);
+
+/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
+ * @author Omnipaedista
+ */
+$messages['grc'] = array(
+ 'pfunc_expr_division_by_zero' => 'Διαίρεσις διὰ τοῦ μηδενός',
+);
+
+/** Swiss German (Alemannisch)
+ * @author Als-Holder
+ */
+$messages['gsw'] = array(
+ 'pfunc_desc' => 'Erwyteret dr Parser um logischi Funktione',
+ 'pfunc_time_error' => 'Fähler: uugiltigi Zytaagab',
+ 'pfunc_time_too_long' => 'Fähler: z vyyl #time-Ufruef',
+ 'pfunc_time_too_big' => 'Fähler: #time unterstitzt nume Johr bis 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Fähler: uugültigi Tiefi im Pfad: „$1“ (Versuech, uf e Chnotepunkt oberhalb vum Hauptchnotepunkt zuezgryfe)',
+ 'pfunc_expr_stack_exhausted' => 'Expression-Fähler: Stackiberlauf',
+ 'pfunc_expr_unexpected_number' => 'Expression-Fähler: Nit erwarteti Zahl',
+ 'pfunc_expr_preg_match_failure' => 'Expression-Fähler: Nit erwarteti „preg_match“-Fählfunktion',
+ 'pfunc_expr_unrecognised_word' => 'Expression-Fähler: Nit erkannt Wort „$1“',
+ 'pfunc_expr_unexpected_operator' => 'Expression-Fähler: Nit erwartete Operator: <tt>$1</tt>',
+ 'pfunc_expr_missing_operand' => 'Expression-Fähler: Operand fir <tt>$1</tt> fählt',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Fähler: Nit erwarteti schließendi eckigi Chlammere',
+ 'pfunc_expr_unrecognised_punctuation' => 'Expression-Fähler: Nit erkannt Satzzeiche „$1“',
+ 'pfunc_expr_unclosed_bracket' => 'Expression-Fähler: Nit gschlosseni eckige Chlammere',
+ 'pfunc_expr_division_by_zero' => 'Expression-Fähler: Division dur Null',
+ 'pfunc_expr_invalid_argument' => 'Nit giltig Argument fir $1: < -1 oder > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Nit giltig Argument fir ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Expression-Fähler: Nit bekannte Fehler ($1)',
+ 'pfunc_expr_not_a_number' => 'Expression-Fähler: In $1: Ergebnis isch kei Zahl',
+ 'pfunc_string_too_long' => 'Fähler: d Zeichechette het meh wie di zuelässig Zahl vu $1 Zeiche',
+);
+
+/** Hebrew (עברית)
+ * @author Amire80
+ */
+$messages['he'] = array(
+ 'pfunc_desc' => 'הוספת פונקציות לוגיות למפענח',
+ 'pfunc_time_error' => 'שגיאה: זמן שגוי',
+ 'pfunc_time_too_long' => 'שגיאה: שימוש ב"#זמן" פעמים רבות מדי',
+ 'pfunc_time_too_big' => 'שגיאה: #זמן תומכת רק בשנים עד 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'שגיאה: עומק שגוי בנתיב: "$1" (ניסיון כניסה לצומת מעל צומת השורש)',
+ 'pfunc_expr_stack_exhausted' => 'שגיאה בביטוי: המחסנית מלאה',
+ 'pfunc_expr_unexpected_number' => 'שגיאה בביטוי: מספר בלתי צפוי',
+ 'pfunc_expr_preg_match_failure' => 'שגיאה בביטוי: כישלון בלתי צפוי של התאמת ביטוי רגולרי',
+ 'pfunc_expr_unrecognised_word' => 'שגיאה בביטוי: מילה בלתי מזוהה, "$1"',
+ 'pfunc_expr_unexpected_operator' => 'שגיאה בביטוי: אופרנד $1 בלתי צפוי',
+ 'pfunc_expr_missing_operand' => 'שגיאה בביטוי: חסר אופרנד ל־$1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'שגיאה בביטוי: סוגריים סוגרים בלתי צפויים',
+ 'pfunc_expr_unrecognised_punctuation' => 'שגיאה בביטוי: תו פיסוק בלתי מזוהה, "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'שגיאה בביטוי: סוגריים בלתי סגורים',
+ 'pfunc_expr_division_by_zero' => 'חלוקה באפס',
+ 'pfunc_expr_invalid_argument' => 'ארגומנט בלתי תקין לפונקציה $1: < -1 או > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ארגומנט בלתי תקין לפונקציה ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'שגיאה בביטוי: שגיאה בלתי ידועה ($1)',
+ 'pfunc_expr_not_a_number' => 'התוצאה של $1 אינה מספר',
+ 'pfunc_string_too_long' => 'שגיאה: המחרוזת עוברת את גבול התווים המותר, $1',
+ 'pfunc-convert-dimensionmismatch' => 'שגיאה: לא ניתן להמיר בין יחידות של "$1" ושל "$2".',
+ 'pfunc-convert-unknownunit' => 'שגיאה: יחידה לא ידועה "$1".',
+ 'pfunc-convert-unknowndimension' => 'שגיאה: ממד לא ידוע "$1".',
+ 'pfunc-convert-invalidcompoundunit' => 'שגיאה: יחידה מורכבת לא ידועה "$1".',
+ 'pfunc-convert-nounit' => 'שגיאה: לא ניתנה יחידה התחלתית.',
+ 'pfunc-convert-doublecompoundunit' => 'שגיאה: לא ניתן לפענח יחידות מורכבות כפולות כמו "$1".',
+ 'pfunc-convert-dimension-length' => 'אורך',
+ 'pfunc-convert-dimension-area' => 'שטח',
+ 'pfunc-convert-dimension-volume' => 'נפח',
+ 'pfunc-convert-dimension-time' => 'זמן',
+ 'pfunc-convert-dimension-timesquared' => 'זמן<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'מסה',
+ 'pfunc-convert-dimension-speed' => 'מהירות',
+ 'pfunc-convert-dimension-temperature' => 'חום',
+ 'pfunc-convert-dimension-acceleration' => 'תאוצה',
+ 'pfunc-convert-dimension-force' => 'כוח',
+ 'pfunc-convert-dimension-torque' => 'מומנט הסיבוב',
+ 'pfunc-convert-dimension-energy' => 'אנרגיה',
+ 'pfunc-convert-dimension-power' => 'הספק',
+ 'pfunc-convert-dimension-pressure' => 'לחץ',
+ 'pfunc-convert-dimension-density' => 'צפיפות',
+ 'pfunc-convert-prefix-yotta' => 'יוטא',
+ 'pfunc-convert-prefix-zetta' => 'זטא',
+ 'pfunc-convert-prefix-exa' => 'אקסה',
+ 'pfunc-convert-prefix-peta' => 'פטה',
+ 'pfunc-convert-prefix-tera' => 'טרה',
+ 'pfunc-convert-prefix-giga' => 'גיגה',
+ 'pfunc-convert-prefix-mega' => 'מגה',
+ 'pfunc-convert-prefix-kilo' => 'קילו',
+ 'pfunc-convert-prefix-hecto' => 'הקטו',
+ 'pfunc-convert-prefix-deca' => 'דקה',
+ 'pfunc-convert-prefix-deci' => 'דצי',
+ 'pfunc-convert-prefix-centi' => 'סנטי',
+ 'pfunc-convert-prefix-milli' => 'מילי',
+ 'pfunc-convert-prefix-micro' => 'מיקרו',
+ 'pfunc-convert-prefix-nano' => 'ננו',
+ 'pfunc-convert-prefix-pico' => 'פיקו',
+ 'pfunc-convert-prefix-femto' => 'פמטו',
+ 'pfunc-convert-prefix-atto' => 'אטו',
+ 'pfunc-convert-prefix-zepto' => 'זפטו',
+ 'pfunc-convert-prefix-yocto' => 'יוקטו',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'פרלונג',
+ 'pfunc-convert-unit-length-chain-abbr' => 'שלשלת',
+ 'pfunc-convert-unit-length-rod-abbr' => 'מַטֶּה',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'פאתום',
+ 'pfunc-convert-unit-length-yard-abbr' => 'יארד',
+ 'pfunc-convert-unit-length-foot-abbr' => 'רגל',
+ 'pfunc-convert-unit-length-hand-abbr' => 'כף־יד',
+ 'pfunc-convert-unit-length-inch-abbr' => 'אינץ׳',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'מיל ימי',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'מיל ימי (אנגלי)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'מיל ימי (ארה״ב לפני 1954)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2 פארסק',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2 שנות אור',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'יחידה אסטרונומית',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'קמ״ר',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'מ״ר',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'סמ״ר',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'ממ״ר',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'הקטאר',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'מיל רבוע',
+ 'pfunc-convert-unit-area-acre-abbr' => 'אקר',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'יארד רבוע',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'רגל רבועה',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'אינץ׳ רבוע',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'מיל ימי רבוע',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'דונם',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'צובו',
+ 'pfunc-convert-unit-time-second-abbr' => 'שנייה',
+ 'pfunc-convert-unit-time-day-abbr' => 'יום',
+ 'pfunc-convert-unit-time-hour-abbr' => 'שעה',
+ 'pfunc-convert-unit-time-minute-abbr' => 'דקה',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'מטר מעוקב',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'ס״מ מעוקב',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'מ״מ מעוקב',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2 ל׳',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'יארד מעוקב',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'רגל מעוקבת',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'אינץ׳ מעוקב',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'חבית',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'בושל',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'גלון',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'קווארטה',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'פיינט',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'אונקייה',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'חבית אמריקאית',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'חבית',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'חבית',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'גלון אמריקאי',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'קווארטה אמריקאית',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'פיינט אמריקאי',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'אונקייה אמריקאית',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'חבית אמריקאית',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'בושל אמריקאי',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'גלון יבש אמריקאי',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'קווארטה יבשה אמריקאית',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'פיינט יבש אמריקאי',
+ 'pfunc-convert-unit-speed-mile-hour' => 'מיל לשעה',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'מיל לשעה',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+ 'pfunc-convert-unit-pressure-bar' => 'בר',
+ 'pfunc-convert-unit-pressure-decibar' => 'דציבר',
+ 'pfunc-convert-unit-pressure-millibar' => 'מיליבר',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'קילובָּרְיֶה',
+ 'pfunc-convert-unit-pressure-barye' => 'בָּרְיֶה',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'בר',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'דציבר',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'מיליבר',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'קילובָּרְיֶה',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'בָּרְיֶה',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'אטמ׳',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'טור',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'מ״מ כספית',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'אינץ׳ כספית',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Hindi (हिन्दी)
+ * @author Kaustubh
+ * @author Shyam
+ */
+$messages['hi'] = array(
+ 'pfunc_desc' => 'लॉजिकल कार्योंका इस्तेमाल करके पार्सर बढायें',
+ 'pfunc_time_error' => 'गलती: गलत समय',
+ 'pfunc_time_too_long' => 'गलती: बहुत सारे #time कॉल',
+ 'pfunc_rel2abs_invalid_depth' => 'गलती: पाथ में गलत गहराई: "$1" (रूट नोडके उपर वाले नोड खोजने की कोशीश की)',
+ 'pfunc_expr_stack_exhausted' => 'एक्स्प्रेशनमें गलती: स्टॅक खतम हो गया',
+ 'pfunc_expr_unexpected_number' => 'एक्स्प्रेशनमें गलती: अनपेक्षित संख्या',
+ 'pfunc_expr_preg_match_failure' => 'एक्स्प्रेशन गलती: अनपेक्षित preg_match रद्दीकरण',
+ 'pfunc_expr_unrecognised_word' => 'एक्स्प्रेशन गलती: अनिश्चित शब्द "$1"',
+ 'pfunc_expr_unexpected_operator' => 'एक्स्प्रेशन गलती: अनपेक्षित $1 ओपरेटर',
+ 'pfunc_expr_missing_operand' => 'एक्स्प्रेशन गलती: $1 का घटक मिला नहीं',
+ 'pfunc_expr_unexpected_closing_bracket' => 'एक्स्प्रेशन गलती: अनपेक्षित समाप्ति ब्रैकेट',
+ 'pfunc_expr_unrecognised_punctuation' => 'एक्स्प्रेशन गलती: अनपेक्षित उद्गार चिन्ह "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'एक्स्प्रेशन गलती: ब्रैकेट बंद नहीं किया',
+ 'pfunc_expr_division_by_zero' => 'शून्य से भाग',
+ 'pfunc_expr_invalid_argument' => '$1: < -1 or > 1 के लिए अमान्य कथन',
+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 के लिए अमान्य कथन',
+ 'pfunc_expr_unknown_error' => 'एक्स्प्रेशन गलती: अज्ञात गलती ($1)',
+ 'pfunc_expr_not_a_number' => '$1 में: रिज़ल्ट संख्यामें नहीं हैं',
+);
+
+/** Croatian (Hrvatski)
+ * @author Dalibor Bosits
+ * @author Dnik
+ * @author Ex13
+ * @author SpeedyGonsales
+ */
+$messages['hr'] = array(
+ 'pfunc_desc' => 'Mogućnost proširivanja parsera logičkim funkcijama',
+ 'pfunc_time_error' => 'Greška: oblik vremena nije valjan',
+ 'pfunc_time_too_long' => 'Greška: prevelik broj #time (vremenskih) poziva',
+ 'pfunc_rel2abs_invalid_depth' => 'Greška: Nevaljana dubina putanje: "$1" (pokušaj pristupanja čvoru iznad korijenskog)',
+ 'pfunc_expr_stack_exhausted' => 'Greška u predlošku: prepunjen stog',
+ 'pfunc_expr_unexpected_number' => 'Greška u predlošku: Neočekivan broj',
+ 'pfunc_expr_preg_match_failure' => 'Greška u predlošku: Neočekivana preg_match greška',
+ 'pfunc_expr_unrecognised_word' => 'Greška u predlošku: Nepoznata riječ "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Greška u predlošku: Neočekivani operator $1',
+ 'pfunc_expr_missing_operand' => 'Greška u predlošku: Operator $1 nedostaje',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Greška u predlošku: Neočekivana zatvorena zagrada',
+ 'pfunc_expr_unrecognised_punctuation' => 'Greška u predlošku: Nepoznat interpunkcijski znak "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Greška u predlošku: Nezatvorene zagrade',
+ 'pfunc_expr_division_by_zero' => 'Dijeljenje s nulom',
+ 'pfunc_expr_invalid_argument' => 'Nevaljani argumenti za $1: < -1 ili > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Nevaljani argument za ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Greška u predlošku: Nepoznata greška ($1)',
+ 'pfunc_expr_not_a_number' => 'U $1: rezultat nije broj',
+ 'pfunc_string_too_long' => 'Greška: Niz prelazi ograničenje od $1 znakova',
+);
+
+/** Upper Sorbian (Hornjoserbsce)
+ * @author Michawiki
+ */
+$messages['hsb'] = array(
+ 'pfunc_desc' => 'Parser wo logiske funkcije rozšěrić',
+ 'pfunc_time_error' => 'Zmylk: njepłaćiwe časowe podaće',
+ 'pfunc_time_too_long' => 'Zmylk: přewjele zawołanjow #time',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Wurazowy zmylk: Staplowy skład wučerpany',
+ 'pfunc_expr_unexpected_number' => 'Wurazowy zmylk: Njewočakowana ličba',
+ 'pfunc_expr_preg_match_failure' => 'Wurazowy zmylk: Njewočakowana zmylna funkcija "preg_match"',
+ 'pfunc_expr_unrecognised_word' => 'Wurazowy zmylk: Njespóznate słowo "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Wurazowy zmylk: Njewočakowany operator $1',
+ 'pfunc_expr_missing_operand' => 'Wurazowy zmylk: Falowacy operand za $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Wurazowy zmylk: Njewočakowana kónčna róžkata spinka',
+ 'pfunc_expr_unrecognised_punctuation' => 'Wurazowy zmylk: Njespóznate interpunkciske znamješko "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Wurazowy zmylk: Njewotzamknjena róžkata spinka',
+ 'pfunc_expr_division_by_zero' => 'Diwizija přez nulu',
+ 'pfunc_expr_invalid_argument' => 'Njepłaćiwy argument za $1: < -1 abo > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Njepłaćiwy argument za ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Wurazowy zmylk: Njeznaty zmylk ($1)',
+ 'pfunc_expr_not_a_number' => 'W $1: Wuslědk ličba njeje',
+ 'pfunc_string_too_long' => 'Zmylk: Znamješkowy slěd překročuje limit $1 znamješkow',
+);
+
+/** Hungarian (Magyar)
+ * @author Dani
+ */
+$messages['hu'] = array(
+ 'pfunc_desc' => 'Az értelmező kiegészítése logikai funkciókkal',
+ 'pfunc_time_error' => 'Hiba: érvénytelen idő',
+ 'pfunc_time_too_long' => 'Hiba: a #time túl sokszor lett meghívva',
+ 'pfunc_time_too_big' => 'Hiba: a #time csak 9999-ig támogatja az éveket',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Hiba a kifejezésben: a verem kiürült',
+ 'pfunc_expr_unexpected_number' => 'Hiba a kifejezésben: nem várt szám',
+ 'pfunc_expr_preg_match_failure' => 'Hiba a kifejezésben: a preg_match váratlanul hibát jelzett',
+ 'pfunc_expr_unrecognised_word' => 'Hiba a kifejezésben: ismeretlen „$1” szó',
+ 'pfunc_expr_unexpected_operator' => 'Hiba a kifejezésben: nem várt $1 operátor',
+ 'pfunc_expr_missing_operand' => 'Hiba a kifejezésben: $1 egyik operandusa hiányzik',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Hiba a kifejezésben: nem várt zárójel',
+ 'pfunc_expr_unrecognised_punctuation' => 'Hiba a kifejezésben: ismeretlen „$1” központozó karakter',
+ 'pfunc_expr_unclosed_bracket' => 'Hiba a kifejezésben: lezáratlan zárójel',
+ 'pfunc_expr_division_by_zero' => 'Nullával való osztás',
+ 'pfunc_expr_invalid_argument' => '$1 érvénytelen paramétert kapott: < -1 vagy > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Az ln érvénytelen paramétert kapott: <= 0',
+ 'pfunc_expr_unknown_error' => 'Hiba a kifejezésben: ismeretlen hiba ($1)',
+ 'pfunc_expr_not_a_number' => '$1: az eredmény nem szám',
+ 'pfunc_string_too_long' => 'Hiba: a sztring túllépte a(z) $1 karakteres határt',
+);
+
+/** Interlingua (Interlingua)
+ * @author McDutchie
+ */
+$messages['ia'] = array(
+ 'pfunc_desc' => 'Meliorar le analysator syntactic con functiones logic',
+ 'pfunc_time_error' => 'Error: tempore invalide',
+ 'pfunc_time_too_long' => 'Error: troppo de appellos a #time',
+ 'pfunc_time_too_big' => 'Error: #time supporta solmente annos usque a 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Error: Profunditate invalide in cammino: "$1" (essayava acceder a un nodo superior al radice)',
+ 'pfunc_expr_stack_exhausted' => 'Error in expression: Pila exhaurite',
+ 'pfunc_expr_unexpected_number' => 'Error in expression: Numero non expectate',
+ 'pfunc_expr_preg_match_failure' => 'Error in expression: Fallimento non expectate in preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Error in expression: Parola "$1" non recognoscite',
+ 'pfunc_expr_unexpected_operator' => 'Error in expression: Operator $1 non expectate',
+ 'pfunc_expr_missing_operand' => 'Error in expression: Manca un operando pro $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Error in expression: Accollada clause non expectate',
+ 'pfunc_expr_unrecognised_punctuation' => 'Error in expression: Character de punctuation "$1" non recognoscite',
+ 'pfunc_expr_unclosed_bracket' => 'Error in expression: Accollada non claudite',
+ 'pfunc_expr_division_by_zero' => 'Division per zero',
+ 'pfunc_expr_invalid_argument' => 'Argumento invalide pro $1: < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumento invalide pro ln: ≤ 0',
+ 'pfunc_expr_unknown_error' => 'Error de expression: Error incognite ($1)',
+ 'pfunc_expr_not_a_number' => 'In $1: le resultato non es un numero',
+ 'pfunc_string_too_long' => 'Error: Le catena excede le limite de $1 {{PLURAL:$1|character|characteres}}',
+ 'pfunc-convert-dimensionmismatch' => 'Error: Impossibile converter inter unitates de "$1" e "$2".',
+ 'pfunc-convert-unknownunit' => 'Error: Unitate "$1" incognite.',
+ 'pfunc-convert-unknowndimension' => 'Error: Dimension "$1" incognite.',
+ 'pfunc-convert-invalidcompoundunit' => 'Error: Unitate composite "$1" invalide.',
+ 'pfunc-convert-nounit' => 'Error: Nulle unitate de origine specificate.',
+ 'pfunc-convert-doublecompoundunit' => 'Error: Non pote processar unitates composite duplice como "$1".',
+ 'pfunc-convert-dimension-length' => 'longitude',
+ 'pfunc-convert-dimension-area' => 'area',
+ 'pfunc-convert-dimension-volume' => 'volumine',
+ 'pfunc-convert-dimension-time' => 'tempore',
+ 'pfunc-convert-dimension-timesquared' => 'tempore<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'massa',
+ 'pfunc-convert-dimension-speed' => 'velocitate',
+ 'pfunc-convert-dimension-temperature' => 'temperatura',
+ 'pfunc-convert-dimension-acceleration' => 'acceleration',
+ 'pfunc-convert-dimension-force' => 'fortia',
+ 'pfunc-convert-dimension-torque' => 'torsion',
+ 'pfunc-convert-dimension-energy' => 'energia',
+ 'pfunc-convert-dimension-power' => 'potentia',
+ 'pfunc-convert-dimension-pressure' => 'pression',
+ 'pfunc-convert-dimension-density' => 'densitate',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'efficientiaenergeticpositive',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'efficientiaenergeticnegative',
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hecto',
+ 'pfunc-convert-prefix-deca' => 'deca',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'milli',
+ 'pfunc-convert-prefix-micro' => 'micro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'pico',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yocto',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2metro|$2metros}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|ångström|ångströmes}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|millia|millias}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|furlong|furlongs}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|catena|catenas}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|pertica|perticas}}',
+);
+
+/** Indonesian (Bahasa Indonesia)
+ * @author IvanLanin
+ * @author Meursault2004
+ * @author Rex
+ */
+$messages['id'] = array(
+ 'pfunc_desc' => 'Mengembangkan parser dengan fungsi logis',
+ 'pfunc_time_error' => 'Kesalahan: waktu tidak valid',
+ 'pfunc_time_too_long' => 'Kesalahan: Pemanggilan #time terlalu banyak',
+ 'pfunc_time_too_big' => 'Galat: #time hanya mendukung tahun hingga 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Kesalahan: Kedalaman path tidak valid: "$1" (mencoba mengakses simpul di atas simpul akar)',
+ 'pfunc_expr_stack_exhausted' => 'Kesalahan ekspresi: Stack habis',
+ 'pfunc_expr_unexpected_number' => 'Kesalahan ekspresi: Angka yang tak terduga',
+ 'pfunc_expr_preg_match_failure' => 'Kesalahan ekspresi: Kegagalan preg_match tak terduga',
+ 'pfunc_expr_unrecognised_word' => 'Kesalahan ekspresi: Kata "$1" tak dikenal',
+ 'pfunc_expr_unexpected_operator' => 'Kesalahan ekspresi: Operator $1 tak terduga',
+ 'pfunc_expr_missing_operand' => 'Kesalahan ekspresi: Operand tak ditemukan untuk $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Kesalahan ekspresi: Kurung tutup tak terduga',
+ 'pfunc_expr_unrecognised_punctuation' => 'Kesalahan ekspresi: Karakter tanda baca "$1" tak dikenali',
+ 'pfunc_expr_unclosed_bracket' => 'Kesalahan ekspresi: Kurung tanpa tutup',
+ 'pfunc_expr_division_by_zero' => 'Pembagian oleh nol',
+ 'pfunc_expr_invalid_argument' => 'Argumen tidak berlaku untuk $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumen tidak berlaku untuk ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Kesalahan ekspresi: Kesalahan tak dikenal ($1)',
+ 'pfunc_expr_not_a_number' => 'Pada $1: hasilnya bukan angka',
+ 'pfunc_string_too_long' => 'Kesalahan: String melebihi limit $1 karakter',
+);
+
+/** Ido (Ido)
+ * @author Malafaya
+ */
+$messages['io'] = array(
+ 'pfunc_time_error' => 'Eroro: ne-valida tempo',
+ 'pfunc_expr_division_by_zero' => 'Divido per zero',
+);
+
+/** Italian (Italiano)
+ * @author Beta16
+ * @author BrokenArrow
+ * @author Darth Kule
+ * @author Pietrodn
+ */
+$messages['it'] = array(
+ 'pfunc_desc' => 'Aggiunge al parser una serie di funzioni logiche',
+ 'pfunc_time_error' => 'Errore: orario non valido',
+ 'pfunc_time_too_long' => 'Errore: troppe chiamate a #time',
+ 'pfunc_time_too_big' => "Errore: #time supporta solo fino all'anno 9999",
+ 'pfunc_rel2abs_invalid_depth' => 'Errore: profondità non valida nel percorso "$1" (si è tentato di accedere a un nodo superiore alla radice)',
+ 'pfunc_expr_stack_exhausted' => "Errore nell'espressione: stack esaurito",
+ 'pfunc_expr_unexpected_number' => "Errore nell'espressione: numero inatteso",
+ 'pfunc_expr_preg_match_failure' => "Errore nell'espressione: errore inatteso in preg_match",
+ 'pfunc_expr_unrecognised_word' => 'Errore nell\'espressione: parola "$1" non riconosciuta',
+ 'pfunc_expr_unexpected_operator' => "Errore nell'espressione: operatore $1 inatteso",
+ 'pfunc_expr_missing_operand' => "Errore nell'espressione: operando mancante per $1",
+ 'pfunc_expr_unexpected_closing_bracket' => "Errore nell'espressione: parentesi chiusa inattesa",
+ 'pfunc_expr_unrecognised_punctuation' => 'Errore nell\'espressione: carattere di punteggiatura "$1" non riconosciuto',
+ 'pfunc_expr_unclosed_bracket' => "Errore nell'espressione: parentesi non chiusa",
+ 'pfunc_expr_division_by_zero' => 'Divisione per zero',
+ 'pfunc_expr_invalid_argument' => 'Argomento non valido per $1: < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argomento non valido per ln: <= 0',
+ 'pfunc_expr_unknown_error' => "Errore nell'espressione: errore sconosciuto ($1)",
+ 'pfunc_expr_not_a_number' => 'In $1: il risultato non è un numero',
+ 'pfunc_string_too_long' => 'Errore: la stringa supera il limite di $1 {{PLURAL:$1|carattere|caratteri}}',
+);
+
+/** Japanese (日本語)
+ * @author Aotake
+ * @author Fryed-peach
+ * @author JtFuruhata
+ * @author Ohgi
+ * @author 青子守歌
+ */
+$messages['ja'] = array(
+ 'pfunc_desc' => 'パーサーに論理関数を追加して拡張する',
+ 'pfunc_time_error' => 'エラー: 時刻が不正です',
+ 'pfunc_time_too_long' => 'エラー: #time 呼び出しが多すぎます',
+ 'pfunc_time_too_big' => 'エラー: #timeは最大で9999年までです。',
+ 'pfunc_rel2abs_invalid_depth' => 'エラー: パス "$1" の階層が不正です(ルート階層からのアクセスをお試しください)',
+ 'pfunc_expr_stack_exhausted' => '構文エラー: スタックが空です',
+ 'pfunc_expr_unexpected_number' => '構文エラー: 予期せぬ数字です',
+ 'pfunc_expr_preg_match_failure' => '構文エラー: 予期せぬ形で preg_match に失敗しました',
+ 'pfunc_expr_unrecognised_word' => '構文エラー: "$1" は認識できません',
+ 'pfunc_expr_unexpected_operator' => '構文エラー: 予期せぬ演算子 $1 があります',
+ 'pfunc_expr_missing_operand' => '構文エラー: $1 の演算対象がありません',
+ 'pfunc_expr_unexpected_closing_bracket' => '構文エラー: 予期せぬ閉じ括弧です',
+ 'pfunc_expr_unrecognised_punctuation' => '構文エラー: 認識できない区切り文字 "$1" があります',
+ 'pfunc_expr_unclosed_bracket' => '構文エラー: 括弧が閉じられていません',
+ 'pfunc_expr_division_by_zero' => '0で除算しました',
+ 'pfunc_expr_invalid_argument' => '$1の引数が無効です: < -1 または > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln の引数が無効です: <= 0',
+ 'pfunc_expr_unknown_error' => '構文エラー: 予期せぬエラー($1)',
+ 'pfunc_expr_not_a_number' => '$1: 結果が数字ではありません',
+ 'pfunc_string_too_long' => 'エラー: 文字列が文字数制限 $1 を超えました',
+);
+
+/** Javanese (Basa Jawa)
+ * @author Meursault2004
+ */
+$messages['jv'] = array(
+ 'pfunc_desc' => 'Kembangna parser mawa fungsi logis',
+ 'pfunc_time_error' => 'Kaluputan: wektu ora absah',
+ 'pfunc_time_too_long' => 'Kaluputan: Olèhé nyeluk #time kakèhan',
+ 'pfunc_rel2abs_invalid_depth' => 'Kaluputan: Kajeroané path ora absah: "$1" (nyoba ngakses simpul sadhuwuring simpul oyot)',
+ 'pfunc_expr_stack_exhausted' => 'Kaluputan èksprèsi: Stack entèk',
+ 'pfunc_expr_unexpected_number' => 'Kaluputan èksprèsi: Angka ora kaduga',
+ 'pfunc_expr_preg_match_failure' => 'Kaluputan èksprèsi: Kaluputan preg_match sing ora kaduga',
+ 'pfunc_expr_unrecognised_word' => 'Kaluputan èksprèsi: Tembung "$1" ora ditepungi',
+ 'pfunc_expr_unexpected_operator' => 'Kaluputan èksprèsi: Operator $1 ora kaduga',
+ 'pfunc_expr_missing_operand' => 'Kaluputan èksprèsi: Operand ora ditemokaké kanggo $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Kaluputan èksprèsi: Kurung tutup ora kaduga',
+ 'pfunc_expr_unrecognised_punctuation' => 'Kaluputan èksprèsi: Karakter tandha wacan "$1" ora ditepungi',
+ 'pfunc_expr_unclosed_bracket' => 'Kaluputan èksprèsi: Kurung tanpa tutup',
+ 'pfunc_expr_division_by_zero' => 'Dipara karo das (nol)',
+ 'pfunc_expr_invalid_argument' => 'Argumèn ora absah kanggo $1: < -1 utawa > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumèn ora absah kanggo ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Kaluputan èksprèsi: Kaluputan ora ditepungi ($1)',
+ 'pfunc_expr_not_a_number' => 'Ing $1: pituwasé dudu angka',
+);
+
+/** Georgian (ქართული)
+ * @author BRUTE
+ * @author Dawid Deutschland
+ */
+$messages['ka'] = array(
+ 'pfunc_time_error' => 'შეცდომა: არასწორი დრო',
+ 'pfunc_expr_division_by_zero' => 'გაყოფა ნულით',
+ 'pfunc_expr_invalid_argument' => 'მცდარი არგუმენტი $1: < -1 ან > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'მცდარი არგუმენტი ln: <= 0',
+ 'pfunc_expr_not_a_number' => '$1: შედექში ციფრი არაა',
+ 'pfunc_string_too_long' => 'შეცდომა: სტრიქონის ზომა აღემატება $1 სიმბოლოს ლიმიტს',
+);
+
+/** Kazakh (Arabic script) (‫قازاقشا (تٴوتە)‬) */
+$messages['kk-arab'] = array(
+ 'pfunc_time_error' => 'قاتە: جارامسىز ۋاقىت',
+ 'pfunc_time_too_long' => 'قاتە: #time شاقىرۋى تىم كوپ',
+ 'pfunc_rel2abs_invalid_depth' => 'قاتە: مىنا جولدىڭ جارامسىز تەرەندىگى «$1» (تامىر ٴتۇيىننىڭ ۇستىندەگى تۇيىنگە قاتىناۋ تالابى)',
+ 'pfunc_expr_stack_exhausted' => 'ايتىلىم قاتەسى: ستەك سارقىلدى',
+ 'pfunc_expr_unexpected_number' => 'ايتىلىم قاتەسى: كۇتىلمەگەن سان',
+ 'pfunc_expr_preg_match_failure' => 'ايتىلىم قاتەسى: كۇتىلمەگەن preg_match ساتسىزدىگى',
+ 'pfunc_expr_unrecognised_word' => 'ايتىلىم قاتەسى: تانىلماعان ٴسوز «$1»',
+ 'pfunc_expr_unexpected_operator' => 'ايتىلىم قاتەسى: كۇتىلمەگەن وپەراتور $1',
+ 'pfunc_expr_missing_operand' => 'ايتىلىم قاتەسى: $1 ٴۇشىن جوعالعان وپەراند',
+ 'pfunc_expr_unexpected_closing_bracket' => 'ايتىلىم قاتەسى: كۇتىلمەگەن جاباتىن جاقشا',
+ 'pfunc_expr_unrecognised_punctuation' => 'ايتىلىم قاتەسى: تانىلماعان تىنىس بەلگىسى «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'ايتىلىم قاتەسى: جابىلماعان جاقشا',
+ 'pfunc_expr_division_by_zero' => 'نولگە ٴبولىنۋى',
+ 'pfunc_expr_unknown_error' => 'ايتىلىم قاتەسى: بەلگىسىز قاتە ($1)',
+ 'pfunc_expr_not_a_number' => '$1 دەگەندە: ناتىيجە سان ەمەس',
+);
+
+/** Kazakh (Cyrillic) (Қазақша (Cyrillic)) */
+$messages['kk-cyrl'] = array(
+ 'pfunc_time_error' => 'Қате: жарамсыз уақыт',
+ 'pfunc_time_too_long' => 'Қате: #time шақыруы тым көп',
+ 'pfunc_rel2abs_invalid_depth' => 'Қате: Мына жолдың жарамсыз терендігі «$1» (тамыр түйіннің үстіндегі түйінге қатынау талабы)',
+ 'pfunc_expr_stack_exhausted' => 'Айтылым қатесі: Стек сарқылды',
+ 'pfunc_expr_unexpected_number' => 'Айтылым қатесі: Күтілмеген сан',
+ 'pfunc_expr_preg_match_failure' => 'Айтылым қатесі: Күтілмеген preg_match сәтсіздігі',
+ 'pfunc_expr_unrecognised_word' => 'Айтылым қатесі: Танылмаған сөз «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Айтылым қатесі: Күтілмеген оператор $1',
+ 'pfunc_expr_missing_operand' => 'Айтылым қатесі: $1 үшін жоғалған операнд',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Айтылым қатесі: Күтілмеген жабатын жақша',
+ 'pfunc_expr_unrecognised_punctuation' => 'Айтылым қатесі: Танылмаған тыныс белгісі «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Айтылым қатесі: Жабылмаған жақша',
+ 'pfunc_expr_division_by_zero' => 'Нөлге бөлінуі',
+ 'pfunc_expr_unknown_error' => 'Айтылым қатесі: Белгісіз қате ($1)',
+ 'pfunc_expr_not_a_number' => '$1 дегенде: нәтиже сан емес',
+);
+
+/** Kazakh (Latin) (Қазақша (Latin)) */
+$messages['kk-latn'] = array(
+ 'pfunc_time_error' => 'Qate: jaramsız waqıt',
+ 'pfunc_time_too_long' => 'Qate: #time şaqırwı tım köp',
+ 'pfunc_rel2abs_invalid_depth' => 'Qate: Mına joldıñ jaramsız terendigi «$1» (tamır tüýinniñ üstindegi tüýinge qatınaw talabı)',
+ 'pfunc_expr_stack_exhausted' => 'Aýtılım qatesi: Stek sarqıldı',
+ 'pfunc_expr_unexpected_number' => 'Aýtılım qatesi: Kütilmegen san',
+ 'pfunc_expr_preg_match_failure' => 'Aýtılım qatesi: Kütilmegen preg_match sätsizdigi',
+ 'pfunc_expr_unrecognised_word' => 'Aýtılım qatesi: Tanılmağan söz «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Aýtılım qatesi: Kütilmegen operator $1',
+ 'pfunc_expr_missing_operand' => 'Aýtılım qatesi: $1 üşin joğalğan operand',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Aýtılım qatesi: Kütilmegen jabatın jaqşa',
+ 'pfunc_expr_unrecognised_punctuation' => 'Aýtılım qatesi: Tanılmağan tınıs belgisi «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Aýtılım qatesi: Jabılmağan jaqşa',
+ 'pfunc_expr_division_by_zero' => 'Nölge bölinwi',
+ 'pfunc_expr_unknown_error' => 'Aýtılım qatesi: Belgisiz qate ($1)',
+ 'pfunc_expr_not_a_number' => '$1 degende: nätïje san emes',
+);
+
+/** Khmer (ភាសាខ្មែរ)
+ * @author Lovekhmer
+ * @author Thearith
+ * @author គីមស៊្រុន
+ */
+$messages['km'] = array(
+ 'pfunc_time_error' => 'កំហុស៖ ពេលវេលាមិនត្រឹមត្រូវ',
+ 'pfunc_expr_division_by_zero' => 'ចែកនឹងសូន្យ',
+ 'pfunc_expr_not_a_number' => 'ក្នុង $1: លទ្ធផល​មិន​មែន​ជា​លេខ​ទេ',
+);
+
+/** Korean (한국어)
+ * @author Klutzy
+ * @author Kwj2772
+ * @author ToePeu
+ * @author Yknok29
+ */
+$messages['ko'] = array(
+ 'pfunc_desc' => '파서에 논리 함수를 추가',
+ 'pfunc_time_error' => '오류: 시간이 잘못되었습니다.',
+ 'pfunc_time_too_long' => '오류: #time을 너무 많이 썼습니다.',
+ 'pfunc_time_too_big' => '오류: #time 함수는 9999년까지만을 지원합니다.',
+ 'pfunc_rel2abs_invalid_depth' => '오류: 경로 구조가 잘못되었습니다: "$1" (루트 노드 위의 노드에 접속을 시도했습니다)',
+ 'pfunc_expr_stack_exhausted' => '표현 오류: 스택이 비어 있습니다.',
+ 'pfunc_expr_unexpected_number' => '표현식 오류: 예상치 못한 값',
+ 'pfunc_expr_preg_match_failure' => '표현식 오류: 예상치 못한 preg_match 오류',
+ 'pfunc_expr_unrecognised_word' => '표현식 오류: 알 수 없는 단어 ‘$1’',
+ 'pfunc_expr_unexpected_operator' => '표현 오류: 잘못된 $1 연산자',
+ 'pfunc_expr_missing_operand' => '표현 오류: $1의 피연산자가 없습니다.',
+ 'pfunc_expr_unexpected_closing_bracket' => '표현 오류: 예상치 못한 괄호 닫기',
+ 'pfunc_expr_unrecognised_punctuation' => '표현 오류: 알 수 없는 문자 "$1"',
+ 'pfunc_expr_unclosed_bracket' => '표현 오류: 괄호를 닫지 않았습니다.',
+ 'pfunc_expr_division_by_zero' => '0으로 나눔',
+ 'pfunc_expr_invalid_argument' => '$1 함수의 변수가 잘못되었습니다: < -1 또는 > 1',
+ 'pfunc_expr_invalid_argument_ln' => '자연로그의 진수가 잘못되었습니다: <= 0',
+ 'pfunc_expr_unknown_error' => '표현 오류: 알려지지 않은 오류 ($1)',
+ 'pfunc_expr_not_a_number' => '$1: 결과가 숫자가 아닙니다.',
+ 'pfunc_string_too_long' => '오류: $1자 제한을 초과하였습니다.',
+);
+
+/** Colognian (Ripoarisch)
+ * @author Purodha
+ */
+$messages['ksh'] = array(
+ 'pfunc_desc' => 'Deit em Wiki Funxione för Entscheidunge un esu dobei.',
+ 'pfunc_time_error' => 'Fähler: Onjöltijje Zick.',
+ 'pfunc_time_too_long' => 'Fähler: <code>#time</code> weed zo öff jebruch.',
+ 'pfunc_time_too_big' => 'Ene Fähleres opjefalle: <code lang="en">#time</code> kann bloß bes nohm Johr 9999 jonn.',
+ 'pfunc_rel2abs_invalid_depth' => 'Fähler: Zo fill „retuur“ em Pahdt „$1“ — mer wöre wigger wi för der Aanfang zeröck jejange.',
+ 'pfunc_expr_stack_exhausted' => 'Fähler en enem Ußdrock: Dä löht der <i lang="en">stack</i> övverloufe.',
+ 'pfunc_expr_unexpected_number' => 'Fähler en enem Ußdrock: En Zahl dom_mer nit äwaade.',
+ '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.',
+ 'pfunc_expr_unrecognised_word' => 'Fähler en enem Ußdrock: Dat Woot „$1“ es unbikannt.',
+ 'pfunc_expr_unexpected_operator' => 'Fähler en enem Ußdrock: Dat Räschezeiche „$1“ dom_mer hee nit äwaade.',
+ 'pfunc_expr_missing_operand' => 'Fähler en enem Ußdrock: För dat Räschezeiche „$1“ dom_mer ävver ene Operand äwaade.',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Fähler en enem Ußdrock: En eckijje Klammer-Zoh dom_mer esu nit äwaade.',
+ 'pfunc_expr_unrecognised_punctuation' => 'Fähler en enem Ußdrock: Dat Satzzeiche „$1“ dom_mer esu nit äwaade.',
+ 'pfunc_expr_unclosed_bracket' => 'Fähler en enem Ußdrock: Do fählt en eckijje Klammer-Zoh.',
+ 'pfunc_expr_division_by_zero' => 'Fähler en enem Ußdrock: Dorsch Noll jedeilt.',
+ 'pfunc_expr_invalid_argument' => 'Fähler: Dä Parrameeter för <code>$1</code> moß -1 udder 1 sin, udder dozwesche lijje.',
+ 'pfunc_expr_invalid_argument_ln' => 'Fähler: Dä Parrameeter för <code>ln</code> moß 0 udder kleiner wi 0 sin.',
+ 'pfunc_expr_unknown_error' => 'Fähler en enem Ußdrock: Unbikannt ($1)',
+ 'pfunc_expr_not_a_number' => 'Fähler en enem Ußdrock: En <code>$1</code> es dat wat erus kütt kein Zahl.',
+ 'pfunc_string_too_long' => 'Fähler en enem Ußdrock: En Zeijshereih es länger wi $1 Zeijshe.',
+ 'pfunc-convert-dimension-length' => 'Längemohß',
+ 'pfunc-convert-dimension-area' => 'Flächemohß',
+ 'pfunc-convert-dimension-volume' => 'Hohlmohß',
+ 'pfunc-convert-dimension-time' => 'Ziggmohß',
+ 'pfunc-convert-dimension-timesquared' => 'Zigg<sup>2</sup>-Mohß',
+ 'pfunc-convert-dimension-mass' => 'Mohß för de Mass',
+ 'pfunc-convert-dimension-speed' => 'Jeschwendechkeit',
+ 'pfunc-convert-dimension-pressure' => 'Drock',
+ 'pfunc-convert-prefix-yotta' => 'Yotta',
+ 'pfunc-convert-prefix-zetta' => 'Zetta',
+ 'pfunc-convert-prefix-exa' => 'Exa',
+ 'pfunc-convert-prefix-tera' => 'Tera',
+ 'pfunc-convert-prefix-giga' => 'Giga',
+ 'pfunc-convert-prefix-mega' => 'Mega',
+ 'pfunc-convert-prefix-kilo' => 'Killo',
+ 'pfunc-convert-prefix-hecto' => 'Häkto',
+ 'pfunc-convert-prefix-deca' => 'Dekka',
+ 'pfunc-convert-prefix-deci' => 'Dezi',
+ 'pfunc-convert-prefix-centi' => 'Cänti',
+ 'pfunc-convert-prefix-milli' => 'Milli',
+ 'pfunc-convert-prefix-micro' => 'Mikro',
+ 'pfunc-convert-prefix-nano' => 'Nanno',
+ 'pfunc-convert-prefix-pico' => 'Picko',
+ 'pfunc-convert-prefix-femto' => 'Fämto',
+ 'pfunc-convert-prefix-atto' => 'Atto',
+ 'pfunc-convert-prefix-zepto' => 'Zäpto',
+ 'pfunc-convert-prefix-yocto' => 'Jokto',
+ 'pfunc-convert-unit-length-metre' => 'Meeter',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|Meil|Meile|Meile}}',
+ 'pfunc-convert-unit-area-squarekilometre' => 'Quadraatkillomeetere',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm²',
+);
+
+/** Luxembourgish (Lëtzebuergesch)
+ * @author Robby
+ */
+$messages['lb'] = array(
+ 'pfunc_desc' => 'Erweidert Parser mat logesche Fonctiounen',
+ 'pfunc_time_error' => 'Feeler: ongëlteg Zäit',
+ 'pfunc_time_too_long' => 'Feeler: ze dacks #time opgeruff',
+ 'pfunc_time_too_big' => 'Feeler: #time ënnerstëtzt nëmme Jore bis 9999',
+ 'pfunc_expr_stack_exhausted' => 'Expressiouns-Feeler: Stack iwwergelaf',
+ 'pfunc_expr_unexpected_number' => 'Expressiouns-Feeler: Onerwarten Zuel',
+ 'pfunc_expr_unrecognised_word' => 'Expressiouns-Feeler: Onerkantent Wuert "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Expression-Feeler: Onerwarten Operateur: <tt>$1</tt>',
+ 'pfunc_expr_missing_operand' => 'Expression-Feeler: Et feelt en Operand fir <tt>$1</tt>',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Expressiouns-Feeler: Onerwarte Klammer déi zougemaach gëtt',
+ 'pfunc_expr_unrecognised_punctuation' => 'Expressiouns-Feeler: D\'Sazzeechen "$1" gouf net erkannt',
+ 'pfunc_expr_unclosed_bracket' => 'Expressiouns-Feeler: Eckeg Klammer net zougemaach',
+ 'pfunc_expr_division_by_zero' => 'Divisioun duerch Null',
+ 'pfunc_expr_invalid_argument' => 'Ongültege Wäert fir $1: < -1 oder > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ongültege Wäert fir ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Expression-Feeler: Onbekannte Feeler ($1)',
+ 'pfunc_expr_not_a_number' => "An $1: D'Resultat ass keng Zuel",
+ 'pfunc_string_too_long' => "Feeler: D'Zeecheketten ass méi laang wéi d'Limit vu(n) $1 Zeechen",
+);
+
+/** Limburgish (Limburgs)
+ * @author Matthias
+ * @author Ooswesthoesbes
+ */
+$messages['li'] = array(
+ 'pfunc_desc' => 'Verrijkt de parser met logische functies',
+ 'pfunc_time_error' => 'Fout: ongeldige tied',
+ 'pfunc_time_too_long' => 'Fout: #time te vaok aangerope',
+ 'pfunc_rel2abs_invalid_depth' => 'Fout: ongeldige diepte in pad: "$1" (probeerde \'n node bove de stamnode aan te rope)',
+ 'pfunc_expr_stack_exhausted' => 'Fout in oetdrukking: stack oetgeput',
+ 'pfunc_expr_unexpected_number' => 'Fout in oetdrukking: onverwacht getal',
+ 'pfunc_expr_preg_match_failure' => 'Fout in oetdrukking: onverwacht fale van preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Fout in oetdrukking: woord "$1" neet herkend',
+ 'pfunc_expr_unexpected_operator' => 'Fout in oetdrukking: neet verwachte operator $1',
+ 'pfunc_expr_missing_operand' => 'Fout in oetdrukking: operand veur $1 mist',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Fout in oetdrukking: haakje sloete op onverwachte plaats',
+ 'pfunc_expr_unrecognised_punctuation' => 'Fout in oetdrukking: neet herkend leesteke "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Fout in oetdrukking: neet geslote haakje opene',
+ 'pfunc_expr_division_by_zero' => 'Deiling door nul',
+ 'pfunc_expr_invalid_argument' => 'Ongeldige paramaeter veur $1: < -1 of > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ongeldige paramaeter veur ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Fout in oetdrukking: ónbekindje fout ($1)',
+ 'pfunc_expr_not_a_number' => 'In $1: rezultaot is gein getal',
+ 'pfunc_string_too_long' => 'Fout: De teks is lenger es de limiet van $1 {{PLURAL:$1|teike|teikes}}',
+);
+
+/** Lithuanian (Lietuvių)
+ * @author Hugo.arg
+ */
+$messages['lt'] = array(
+ 'pfunc_time_error' => 'Klaida: neteisingas laikas',
+);
+
+/** Latvian (Latviešu)
+ * @author Papuass
+ */
+$messages['lv'] = array(
+ 'pfunc_time_error' => 'Kļūda: nederīgs laiks',
+ 'pfunc_time_too_long' => 'Kļūda: pārāk daudz #time izsaukumu',
+ 'pfunc_expr_division_by_zero' => 'Dalīšana ar nulli',
+);
+
+/** Macedonian (Македонски)
+ * @author Bjankuloski06
+ * @author Brest
+ */
+$messages['mk'] = array(
+ 'pfunc_desc' => 'Проширување на можностите на парсерот со логички функции',
+ 'pfunc_time_error' => 'Грешка: погрешен формат за време',
+ 'pfunc_time_too_long' => 'Грешка: премногу повикувања на функцијата #time',
+ 'pfunc_time_too_big' => 'Грешка: #time поддржува само години до 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Грешка: Неважечка длабочина во патеката: „$1“ (обид за пристап до јазол кој се наоѓа повисоко од коренитиот)',
+ 'pfunc_expr_stack_exhausted' => 'Грешка во изразот: Складот е преполн',
+ 'pfunc_expr_unexpected_number' => 'Грешка во изразот: Неочекуван број',
+ 'pfunc_expr_preg_match_failure' => 'Грешка во изразот: Неочекуван проблем со preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Грешка во изразот: Непрепознаен збор „$1“',
+ 'pfunc_expr_unexpected_operator' => 'Грешка во изразот: Неочекуван оператор $1',
+ 'pfunc_expr_missing_operand' => 'Грешка во изразот: Недостасува операнд за $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Грешка во изразот: Неочекувано затворање на заграда',
+ 'pfunc_expr_unrecognised_punctuation' => 'Грешка во изразот: Непрепознаен интерпункциски знак „$1“',
+ 'pfunc_expr_unclosed_bracket' => 'Грешка во изразот: Незатворена заграда',
+ 'pfunc_expr_division_by_zero' => 'Делење со нула',
+ 'pfunc_expr_invalid_argument' => 'Неважечки аргумент за $1: < -1 или > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Неважечки аргумент за ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Грешка во изразот: Непозната грешка ($1)',
+ 'pfunc_expr_not_a_number' => 'Во $1: резултатот не е број',
+ 'pfunc_string_too_long' => 'Грешка: низата го надминува ограничувањето од $1 знаци',
+ 'pfunc-convert-dimensionmismatch' => 'Грешка: претворањето од единицата „$1“ во единицата „$2“ е невозможно',
+ 'pfunc-convert-unknownunit' => 'Грешка: непозната единица „$1“',
+ 'pfunc-convert-unknowndimension' => 'Грешка: непозната димензија „$1“',
+ 'pfunc-convert-invalidcompoundunit' => 'Грешка: неважечка мешовита единица „$1“',
+ 'pfunc-convert-nounit' => 'Грешка: нема наведено изворна единица',
+ 'pfunc-convert-doublecompoundunit' => 'Грешка: не можам да парсирам двојни мешовити единици како „$1“',
+ 'pfunc-convert-dimension-length' => 'должина',
+ 'pfunc-convert-dimension-area' => 'плоштина',
+ 'pfunc-convert-dimension-volume' => 'волумен',
+ 'pfunc-convert-dimension-time' => 'време',
+ 'pfunc-convert-dimension-timesquared' => 'време<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'маса',
+ 'pfunc-convert-dimension-speed' => 'брзина',
+ 'pfunc-convert-dimension-temperature' => 'температура',
+ 'pfunc-convert-dimension-acceleration' => 'забрзување',
+ 'pfunc-convert-dimension-force' => 'сила',
+ 'pfunc-convert-dimension-torque' => 'момент на сила',
+ 'pfunc-convert-dimension-energy' => 'енергија',
+ 'pfunc-convert-dimension-power' => 'моќ',
+ 'pfunc-convert-dimension-pressure' => 'притисок',
+ 'pfunc-convert-dimension-density' => 'густина',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'позитивна горивна ефикасност',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'негативна горивна ефикасност',
+ 'pfunc-convert-prefix-yotta' => 'јота',
+ 'pfunc-convert-prefix-zetta' => 'зета',
+ 'pfunc-convert-prefix-exa' => 'екса',
+ 'pfunc-convert-prefix-peta' => 'пета',
+ 'pfunc-convert-prefix-tera' => 'тера',
+ 'pfunc-convert-prefix-giga' => 'гига',
+ 'pfunc-convert-prefix-mega' => 'мега',
+ 'pfunc-convert-prefix-kilo' => 'кило',
+ 'pfunc-convert-prefix-hecto' => 'хекто',
+ 'pfunc-convert-prefix-deca' => 'дека',
+ 'pfunc-convert-prefix-deci' => 'деци',
+ 'pfunc-convert-prefix-centi' => 'санти',
+ 'pfunc-convert-prefix-milli' => 'мили',
+ 'pfunc-convert-prefix-micro' => 'микро',
+ 'pfunc-convert-prefix-nano' => 'нано',
+ 'pfunc-convert-prefix-pico' => 'пико',
+ 'pfunc-convert-prefix-femto' => 'фемто',
+ 'pfunc-convert-prefix-atto' => 'ато',
+ 'pfunc-convert-prefix-zepto' => 'зепто',
+ 'pfunc-convert-prefix-yocto' => 'јокто',
+ 'pfunc-convert-prefix-yotta-abbr' => 'Ј',
+ 'pfunc-convert-prefix-zetta-abbr' => 'З',
+ 'pfunc-convert-prefix-exa-abbr' => 'Е',
+ 'pfunc-convert-prefix-peta-abbr' => 'П',
+ 'pfunc-convert-prefix-tera-abbr' => 'Т',
+ 'pfunc-convert-prefix-giga-abbr' => 'Г',
+ 'pfunc-convert-prefix-mega-abbr' => 'М',
+ 'pfunc-convert-prefix-kilo-abbr' => 'к',
+ 'pfunc-convert-prefix-hecto-abbr' => 'х',
+ 'pfunc-convert-prefix-deca-abbr' => 'да',
+ 'pfunc-convert-prefix-deci-abbr' => 'д',
+ 'pfunc-convert-prefix-centi-abbr' => 'с',
+ 'pfunc-convert-prefix-milli-abbr' => 'м',
+ 'pfunc-convert-prefix-micro-abbr' => 'μ',
+ 'pfunc-convert-prefix-nano-abbr' => 'н',
+ 'pfunc-convert-prefix-pico-abbr' => 'п',
+ 'pfunc-convert-prefix-femto-abbr' => 'ф',
+ 'pfunc-convert-prefix-atto-abbr' => 'а',
+ 'pfunc-convert-prefix-zepto-abbr' => 'з',
+ 'pfunc-convert-prefix-yocto-abbr' => 'ј',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|метар|метри}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|ангстрем|ангстреми}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|милја|милји}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|фурлонг|фурлонзи}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|ланец|ланци}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|прачка|прачки}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|фатом|фатоми}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|јарда|јарди}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|стапка|стапки}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|дланка|дланки}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|инч|инчи}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|наутичка милја|наутички милји}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|наутичка милја (британска, пред 1970)|наутички милји (британска, пред 1970)}}',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{PLURAL:$1|наутичка милја (американска, пред 1954)|наутички милји (американски, пред 1954)}}',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2 парсек|$2 парсеци}}',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1|светлосна година|светлосни години}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|астрономска единица|астрономски единици}}',
+ 'pfunc-convert-unit-length-metre-abbr' => '$2 м',
+ 'pfunc-convert-unit-length-mile-abbr' => 'ми',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'фурлонг',
+ 'pfunc-convert-unit-length-chain-abbr' => 'ланец',
+ 'pfunc-convert-unit-length-rod-abbr' => 'пр',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'фатом',
+ 'pfunc-convert-unit-length-yard-abbr' => 'јд',
+ 'pfunc-convert-unit-length-foot-abbr' => 'ст',
+ 'pfunc-convert-unit-length-hand-abbr' => 'дл',
+ 'pfunc-convert-unit-length-inch-abbr' => 'ин',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'нми',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'нми (брит)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'нми (амер. пред 1954)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2 пс',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2 сг',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'ae',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|квадратен километар|квадратни километри}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|квадратен метар|квадратни метри}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|квадратен сантиметар|квадратни сантиметри}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|квадратен милиметар|квадратни милиметри}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|хектар|хектари}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|квадратна милја|квадратни милји}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|акр|акри}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|квадратна јарда|квадратни јарди}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|квадратна стапка|квадратни стапки}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|квадратен инч|квадратни инчи}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|квадратна наутичка милја|квадратни наутички милји}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|дунум|дунуми}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|цубо|цуба}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'км<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'м<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'см<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'мм<msup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ха',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'ми<sup>2</sup>',
+ 'pfunc-convert-unit-area-acre-abbr' => 'акр',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'јд<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'ст<sup>2</sup>',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'ин<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'нми<sup>2</sup>',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'дунум',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'цубо',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|секунда|секунди}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|година|години}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|ден|дена}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|час|часа}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|минута|минути}}',
+ 'pfunc-convert-unit-time-second-abbr' => 'с',
+ 'pfunc-convert-unit-time-year-abbr' => '$2 г',
+ 'pfunc-convert-unit-time-day-abbr' => 'ден',
+ 'pfunc-convert-unit-time-hour-abbr' => 'ч',
+ 'pfunc-convert-unit-time-minute-abbr' => 'мин',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|кубен метар|кубни метри}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|кубен сантиметар|кубни сантиметри}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|кубен милиметар|кубни милиметри}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|килолитар|килолитри}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|литар|литри}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|центилитар|центилитри}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|милилитар|милилитри}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|кубна јарда|кубни јарди}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|кубна стапка|кубни стапки}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|кубен инч|кубни инчи}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|барел|барели}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|бушел|бушели}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|галон|галони}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|кварта|кварти}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|пинта|пинти}}',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1|течна унца|течни унци}}',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1|американски барел|американски барели}}',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1|барел|барели}}',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1|барел|барели}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|американски галон|американски галони}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|американска кварта|американски кварти}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|американска пинта|американски пинти}}',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1|американска течна унца|американски течни унци}}',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1|американски сув барел|американски суви барели}}',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1|американски бушел|американски бушели}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|американски сув галон|американски суви галони}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|американска сува кварта|американски суви кварти}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|американска сува пинта|американски суви пинти}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'м<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'см<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'мм<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2 л',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'јд<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'ст<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'ин<sup>3</sup>',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'ббл',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'бш',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'гал',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'кт',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'пт',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'тч уц',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'ббл (САД)',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'ббл',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'ббл',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'гал (САД)',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'кт (САД)',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'пт (САД)',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'тч уц (САД)',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'ббл (САД)',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'бш (САД)',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'сув гал (САД)',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'сув кт (САД)',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'сув пт (САД)',
+ 'pfunc-convert-unit-speed-mile-hour' => 'милји на час',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'ми/ч',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|паскал|паскали}}',
+ 'pfunc-convert-unit-pressure-bar' => 'бар',
+ 'pfunc-convert-unit-pressure-decibar' => 'децибар',
+ 'pfunc-convert-unit-pressure-millibar' => 'милибар',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'килобарија',
+ 'pfunc-convert-unit-pressure-barye' => 'барија',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|атмосфера|атмосфери}}',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1|тор|тора}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|милиметар живин столб|милиметри живин столб}}',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|инч живин столб|инчи живин столб}}',
+ 'pfunc-convert-unit-pressure-psi' => '{{PLURAL:$1|фунта на квадратен инч|фунти на квадратен инч}}',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2 Па',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'бар',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'дбар',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'мбар',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'кБа',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ба',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'атм',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'тор',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'ммHg',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'инHg',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Malayalam (മലയാളം)
+ * @author Praveenp
+ * @author Shijualex
+ */
+$messages['ml'] = array(
+ 'pfunc_desc' => 'ലോജിക്കൽ ഫങ്ഷൻസ് ഉപയോഗിച്ച് പാർസർ വിപുലപ്പെടുത്തുക',
+ 'pfunc_time_error' => 'പിഴവ്:അസാധുവായ സമയം',
+ 'pfunc_time_too_long' => 'പിഴവ്: വളരെയധികം #സമയ കാളുകൾ',
+ 'pfunc_time_too_big' => 'പിഴവ്: 9999 വരെയുള്ള വർഷങ്ങൾ മാത്രമേ #time പിന്തുണയ്ക്കുന്നുള്ളു',
+ 'pfunc_rel2abs_invalid_depth' => 'പിഴവ്: പഥത്തിൽ അസാധുവായ ആഴം: "$1" (റൂട്ട് തലത്തിനും മുകളിലുള്ള തലം എടുക്കാനുള്ള ശ്രമം)',
+ 'pfunc_expr_stack_exhausted' => 'എക്സ്‌പ്രെഷൻ പിഴവ്: സ്റ്റാക്ക് പുറന്തള്ളിയിരിക്കുന്നു',
+ 'pfunc_expr_unexpected_number' => 'പ്രയോഗരീതിയിൽ പിഴവ്: പ്രതീക്ഷിക്കാത്ത സംഖ്യ',
+ 'pfunc_expr_preg_match_failure' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അപ്രതീക്ഷിതമായ preg_match പരാജയം',
+ 'pfunc_expr_unrecognised_word' => 'പ്രയോഗരീതിയിൽ പിഴവ്: "$1" എന്ന തിരിച്ചറിയാൻ സാധിക്കാഞ്ഞ വാക്ക്',
+ 'pfunc_expr_unexpected_operator' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അപ്രതീക്ഷിതമായ $1 ഓപ്പറേറ്റർ',
+ 'pfunc_expr_missing_operand' => 'എക്സ്പ്രെഷൻ പിഴവ്: $1 എന്നതിനുള്ള പ്രവർത്തനഘടകം നൽകിയിട്ടില്ല',
+ 'pfunc_expr_unexpected_closing_bracket' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അപ്രതീക്ഷിതമായി കോഷ്ഠകം അടച്ചിരിക്കുന്നു',
+ 'pfunc_expr_unrecognised_punctuation' => 'പ്രയോഗരീതിയിൽ പിഴവ്: തിരിച്ചറിയാൻ കഴിയാത്ത വിരാമചിഹ്നം "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'പ്രയോഗരീതിയിൽ പിഴവ്: അടയ്ക്കാത്ത കോഷ്ഠകം',
+ 'pfunc_expr_division_by_zero' => 'പൂജ്യം കൊണ്ടുള്ള ഹരണം',
+ 'pfunc_expr_invalid_argument' => '$1:< -1 അല്ലെങ്കിൽ > 1 എന്നതിനു നൽകിയ അസാധുവായ ആർഗ്യുമെന്റ്',
+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 എന്നതിനു നൽകിയ അസാധുവായ ആർഗ്യുമെന്റ്',
+ 'pfunc_expr_unknown_error' => 'പ്രയോഗരീതിയിൽ പിഴവ്: കാരണം അജ്ഞാതമായ പിഴവ് ($1)',
+ 'pfunc_expr_not_a_number' => '$1-ൽ: ഫലം ഒരു സംഖ്യയല്ല',
+ 'pfunc_string_too_long' => 'പിഴവ്: പദം ലിപികളുടെ പരിധിയായ $1 അതിലംഘിക്കുന്നു',
+);
+
+/** Marathi (मराठी)
+ * @author Htt
+ * @author Kaustubh
+ */
+$messages['mr'] = array(
+ 'pfunc_desc' => 'तार्किक कार्ये वापरून पार्सर वाढवा',
+ 'pfunc_time_error' => 'त्रुटी: चुकीचा वेळ',
+ 'pfunc_time_too_long' => 'त्रुटी: खूप जास्त #time कॉल्स',
+ 'pfunc_time_too_big' => 'चूक: #वेळ फक्त ९९९९ सालापर्यंतच्या वर्षांना समर्थन देते',
+ 'pfunc_rel2abs_invalid_depth' => 'त्रुटी: मार्गामध्ये चुकीची गहनता: "$1" (रूट नोडच्या वरील नोड शोधायचा प्रयत्न केला)',
+ 'pfunc_expr_stack_exhausted' => 'एक्स्प्रेशन त्रुटी: स्टॅक संपला',
+ 'pfunc_expr_unexpected_number' => 'एक्स्प्रेशन त्रुटी: अनपेक्षित क्रमांक',
+ 'pfunc_expr_preg_match_failure' => 'एक्स्प्रेशन त्रुटी: अनपेक्षित preg_match रद्दीकरण',
+ 'pfunc_expr_unrecognised_word' => 'एक्स्प्रेशन त्रुटी: अनोळखी शब्द "$1"',
+ 'pfunc_expr_unexpected_operator' => 'एक्स्प्रेशन त्रुटी: अनोळखी $1 कार्यवाहक',
+ 'pfunc_expr_missing_operand' => 'एक्स्प्रेशन त्रुटी: $1 चा घटक सापडला नाही',
+ 'pfunc_expr_unexpected_closing_bracket' => 'एक्स्प्रेशन त्रुटी: अनपेक्षित समाप्ती कंस',
+ 'pfunc_expr_unrecognised_punctuation' => 'एक्स्प्रेशन त्रुटी: अनोळखी उद्गारवाचक चिन्ह "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'एक्स्प्रेशन त्रुटी: कंस समाप्त केलेला नाही',
+ 'pfunc_expr_division_by_zero' => 'शून्य ने भागाकार',
+ 'pfunc_expr_invalid_argument' => '$1 साठी अवैध अर्ग्युमेंट: < -1 किंवा > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln करिता अवैध अर्ग्युमेंट: <= 0',
+ 'pfunc_expr_unknown_error' => 'एक्स्प्रेशन त्रुटी: अनोळखी त्रुटी ($1)',
+ 'pfunc_expr_not_a_number' => '$1 मध्ये: निकाल संख्येत नाही',
+);
+
+/** Malay (Bahasa Melayu)
+ * @author Anakmalaysia
+ * @author Aurora
+ * @author Aviator
+ * @author Kurniasan
+ */
+$messages['ms'] = array(
+ 'pfunc_desc' => 'Meningkatkan penghurai dengan fungsi-fungsi logik',
+ 'pfunc_time_error' => 'Ralat: waktu tidak sah',
+ 'pfunc_time_too_long' => 'Ralat: terlalu banyak panggilan #time',
+ 'pfunc_time_too_big' => 'Ralat: #time hanya menyokong tahun sehingga 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Ralat: Kedalaman tidak sah dalam laluan: "$1" (cubaan mencapai nod di atas nod induk)',
+ 'pfunc_expr_stack_exhausted' => 'Ralat ungkapan: Tindanan tuntas',
+ 'pfunc_expr_unexpected_number' => 'Ralat ungkapan: Nombor tidak dijangka',
+ 'pfunc_expr_preg_match_failure' => 'Ralat ungkapan: Kegagalan preg_match tidak dijangka',
+ 'pfunc_expr_unrecognised_word' => 'Ralat ungkapan: Perkataan "$1" tidak dikenali',
+ 'pfunc_expr_unexpected_operator' => 'Ralat ungkapan: Pengendali $1 tidak dijangka',
+ 'pfunc_expr_missing_operand' => 'Ralat ungkapan: Kendalian bagi $1 tiada',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Ralat ungkapan: Penutup kurungan tidak dijangka',
+ 'pfunc_expr_unrecognised_punctuation' => 'Ralat ungkapan: Aksara tanda baca "$1" tidak dikenali',
+ 'pfunc_expr_unclosed_bracket' => 'Ralat ungkapan: Tanda kurung tidak ditutup',
+ 'pfunc_expr_division_by_zero' => 'Pembahagian dengan sifar',
+ 'pfunc_expr_invalid_argument' => 'Argumen bagi $1 tidak sah: < -1 atau > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumen bagi ln tidak sah: <= 0',
+ 'pfunc_expr_unknown_error' => 'Ralat ungkapan: Ralat tidak diketahui ($1)',
+ 'pfunc_expr_not_a_number' => 'Dalam $1: hasil bukan nombor',
+ 'pfunc_string_too_long' => 'Ralat: Rentetan melampaui batas aksara $1',
+ 'pfunc-convert-dimensionmismatch' => 'Ralat: Tidak boleh menukar antara unit-unit "$1" dan "$2".',
+ 'pfunc-convert-unknownunit' => 'Ralat: Unit "$1" tidak dikenali.',
+ 'pfunc-convert-unknowndimension' => 'Ralat: Matra "$1" tidak dikenali.',
+ 'pfunc-convert-invalidcompoundunit' => 'Ralat: Unit majmuk "$1" tidak sah.',
+ 'pfunc-convert-nounit' => 'Ralat: Tiada unit sumber yang diberikan.',
+ 'pfunc-convert-doublecompoundunit' => 'Ralat: Unit majmuk berganda seperti "$1" tidak boleh dihuraikan.',
+ 'pfunc-convert-dimension-length' => 'panjang',
+ 'pfunc-convert-dimension-area' => 'luas',
+ 'pfunc-convert-dimension-volume' => 'isipadu',
+ 'pfunc-convert-dimension-time' => 'masa',
+ 'pfunc-convert-dimension-timesquared' => 'masa<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'jisim',
+ 'pfunc-convert-dimension-speed' => 'kelajuan',
+ 'pfunc-convert-dimension-temperature' => 'suhu',
+ 'pfunc-convert-dimension-acceleration' => 'pecutan',
+ 'pfunc-convert-dimension-force' => 'daya',
+ 'pfunc-convert-dimension-torque' => 'tork',
+ 'pfunc-convert-dimension-energy' => 'tenaga',
+ 'pfunc-convert-dimension-power' => 'kuasa',
+ 'pfunc-convert-dimension-pressure' => 'tekanan',
+ 'pfunc-convert-dimension-density' => 'ketumpatan',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'kecekapanbahanapipositif',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'kecekapanbahanapinegatif',
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'eksa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hekto',
+ 'pfunc-convert-prefix-deca' => 'deka',
+ 'pfunc-convert-prefix-deci' => 'desi',
+ 'pfunc-convert-prefix-centi' => 'senti',
+ 'pfunc-convert-prefix-milli' => 'mili',
+ 'pfunc-convert-prefix-micro' => 'mikro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'piko',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yokto',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2meter|$2meter}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|angstrom|angstrom}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|batu|batu}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|furlong|furlong}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|rantai|rantai}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|pol|pol}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|fatom|fatom}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|ela|ela}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|kaki|kaki}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|tangan|tangan}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|inci|inci}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|batu nautika|batu nautika}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|batu nautika (British pra-1970)|batu nautika (British pra-1970)}}',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1|batu nautika (AS pra-1954)|batu nautika (AS pra-1954)}}',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2parsek|$2parsek}}',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1|$2tahun cahaya|$2tahun cahaya}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|unit astronomi|unit astronomi}}',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'furlong',
+ 'pfunc-convert-unit-length-chain-abbr' => 'rantai',
+ 'pfunc-convert-unit-length-rod-abbr' => 'pol',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'fatom',
+ 'pfunc-convert-unit-length-yard-abbr' => 'ela',
+ 'pfunc-convert-unit-length-foot-abbr' => 'kaki',
+ 'pfunc-convert-unit-length-hand-abbr' => 'tgn',
+ 'pfunc-convert-unit-length-inch-abbr' => 'in',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'batu n',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'batu n (Brit)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'batu n (AS pra-1954)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2pc',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2tc',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'AU',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|kilometer persegi|kilometer persegi}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|meter persegi|meter persegi}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|sentimeter persegi|sentimeter persegi}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|milimeter persegi|milimeter persegi}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hektar|hektar}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|batu persegi|batu persegi}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|ekar|ekar}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|ela persegi|ela persegi}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|kaki persegi|kaki persegi}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|inci persegi|inci persegi}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|batu nautika persegi|batu nautika persegi}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|dunam|dunam}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|tsubo|tsubo}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'batu<sup>2</sup>',
+ 'pfunc-convert-unit-area-acre-abbr' => 'ekar',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'ela<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'kaki<sup>2</sup>',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'inci<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'batu n<sup>2</sup>',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'dunam',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'tsubo',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL: $1|saat|saat}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL: $1|$2tahun|$2tahun}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|hari|hari}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|jam|jam}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minit|minit}}',
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-year-abbr' => '$2thn',
+ 'pfunc-convert-unit-time-day-abbr' => 'hari',
+ 'pfunc-convert-unit-time-hour-abbr' => 'jam',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|meter padu|meter padu}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|sentimeter padu|sentimeter padu}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|milimeter padu|milimeter padu}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|kilolite|kiloliter}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|liter|liter}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|sentiliter|sentiliter}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|mililiter|mililiter}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|ela padu|ela padu}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|kaki padu|kaki padu}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|inci padu|inci padu}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|tong|tong}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|busyel|busyel}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|gelen|gelen}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|kuart|kuart}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|pain|pain}}',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1|auns bendalir|auns bendalir}}',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1|tong AS|tong AS}}',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1|tong|tong}}',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1|tong|tong}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|gelen AS|gelen AS}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|kuart AS|kuart AS}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|pain AS|pain AS}}',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1|auns bendalir AS|auns bendalir AS}}',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1|tong kering AS|tong kering AS}}',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1|busyel AS|busyel AS}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|gelen kering AS|gelen kering AS}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|kuart kering AS|kuart kering AS}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|pain kering AS|pain kering AS}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2l',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'ela<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'kaki<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'inci<sup>3</sup>',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'tong',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'bsh',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'gal',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'qt',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'pt',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'fl oz',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'tong AS',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'tong',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'tong',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'gal AS',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'qt AS',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'pt AS',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'fl oz AS',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'tong AS',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'bsh AS',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'gal kering AS',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'qt kering AS',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'pt kering AS',
+ 'pfunc-convert-unit-speed-mile-hour' => 'batu sejam',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'bsj',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|$2pascal|$2pascal}}',
+ 'pfunc-convert-unit-pressure-bar' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar' => 'desibar',
+ 'pfunc-convert-unit-pressure-millibar' => 'milibar',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'kilobarye',
+ 'pfunc-convert-unit-pressure-barye' => 'barye',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|atmosfera|atmosfera}}',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1|Torr|Torr}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|milimeter raksa|milimeter raksa}}',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|inci raksa|inci raksa}}',
+ 'pfunc-convert-unit-pressure-psi' => '{{PLURAL:$1|paun seinci persegi|paun seinci persegi}}',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'dbar',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'mbar',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'kBa',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ba',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'Torr',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'mmHg',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'inHg',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Erzya (Эрзянь)
+ * @author Botuzhaleny-sodamo
+ */
+$messages['myv'] = array(
+ 'pfunc_time_error' => 'Ильведевксэсь: амаштовикс шкась',
+ 'pfunc_expr_stack_exhausted' => 'Ёвтавкссонть ильведевкс: стекесь тыц пешксе',
+ 'pfunc_expr_division_by_zero' => 'Нольсэ йавома',
+);
+
+/** Nahuatl (Nāhuatl)
+ * @author Fluence
+ */
+$messages['nah'] = array(
+ 'pfunc_time_error' => 'Ahcuallōtl: ahcualli cāhuitl',
+);
+
+/** Low German (Plattdüütsch)
+ * @author Slomox
+ */
+$messages['nds'] = array(
+ 'pfunc_desc' => 'Beriekert den Parser mit logische Funkschonen',
+ 'pfunc_time_error' => 'Fehler: mit de Tiet stimmt wat nich',
+ 'pfunc_time_too_long' => 'Fehler: #time warrt to faken opropen',
+ 'pfunc_rel2abs_invalid_depth' => 'Fehler: Mit den Padd „$1“ stimmt wat nich, liggt nich ünner den Wuddelorner',
+ 'pfunc_expr_stack_exhausted' => 'Fehler in’n Utdruck: Stack överlopen',
+ 'pfunc_expr_unexpected_number' => 'Fehler in’n Utdruck: Unverwacht Tall',
+ 'pfunc_expr_preg_match_failure' => 'Fehler in’n Utdruck: Unverwacht Fehler bi „preg_match“',
+ 'pfunc_expr_unrecognised_word' => 'Fehler in’n Utdruck: Woort „$1“ nich kennt',
+ 'pfunc_expr_unexpected_operator' => 'Fehler in’n Utdruck: Unverwacht Operator $1',
+ 'pfunc_expr_missing_operand' => 'Fehler in’n Utdruck: Operand för $1 fehlt',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Fehler in’n Utdruck: Unverwacht Klammer to',
+ 'pfunc_expr_unrecognised_punctuation' => 'Fehler in’n Utdruck: Satzteken „$1“ nich kennt',
+ 'pfunc_expr_unclosed_bracket' => 'Fehler in’n Utdruck: Nich slatene Klammer',
+ 'pfunc_expr_division_by_zero' => 'Delen dör Null',
+ 'pfunc_expr_invalid_argument' => 'Ungüllig Argument för $1: < -1 oder > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ungüllig Argument för ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Fehler in’n Utdruck: Unbekannten Fehler ($1)',
+ 'pfunc_expr_not_a_number' => 'In $1: wat rutkamen is, is kene Tall',
+);
+
+/** Nepali (नेपाली) */
+$messages['ne'] = array(
+ 'pfunc_time_error' => 'त्रुटी: गलत/वा हुदैनहुने समय',
+ 'pfunc_time_too_long' => 'त्रुटी: एकदम धेरै #time callहरु',
+ 'pfunc_rel2abs_invalid_depth' => 'त्रुटी: पाथमा (इनभ्यालिड)गलत गहिराइ(डेप्थ) भयो: "$1" (ले रुट नोड भन्दापनि माथिको नोडलाइ चलाउन(एकसेस) गर्न खोज्यो)',
+);
+
+/** Dutch (Nederlands)
+ * @author SPQRobin
+ * @author Siebrand
+ */
+$messages['nl'] = array(
+ 'pfunc_desc' => 'Verrijkt de parser met logische functies',
+ 'pfunc_time_error' => 'Fout: ongeldige tijd',
+ 'pfunc_time_too_long' => 'Fout: #time te vaak aangeroepen',
+ 'pfunc_time_too_big' => 'Fout: #time ondersteunt jaren tot maximaal 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Fout: ongeldige diepte in pad: "$1" (probeerde een node boven de stamnode aan te roepen)',
+ 'pfunc_expr_stack_exhausted' => 'Fout in uitdrukking: stack uitgeput',
+ 'pfunc_expr_unexpected_number' => 'Fout in uitdrukking: onverwacht getal',
+ 'pfunc_expr_preg_match_failure' => 'Fout in uitdrukking: onverwacht falen van preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Fout in uitdrukking: woord "$1" niet herkend',
+ 'pfunc_expr_unexpected_operator' => 'Fout in uitdrukking: niet verwachte operator $1',
+ 'pfunc_expr_missing_operand' => 'Fout in uitdrukking: operand voor $1 mist',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Fout in uitdrukking: haakje sluiten op onverwachte plaats',
+ 'pfunc_expr_unrecognised_punctuation' => 'Fout in uitdrukking: niet herkend leesteken "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Fout in uitdrukking: niet gesloten haakje openen',
+ 'pfunc_expr_division_by_zero' => 'Deling door nul',
+ 'pfunc_expr_invalid_argument' => 'Ongeldige parameter voor $1: < -1 of > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ongeldige parameter voor ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Fout in uitdrukking: onbekende fout ($1)',
+ 'pfunc_expr_not_a_number' => 'In $1: resultaat is geen getal',
+ 'pfunc_string_too_long' => 'Fout: De tekst is langer dan de limiet van $1 {{PLURAL:$1|karakter|karakters}}',
+ 'pfunc-convert-dimensionmismatch' => 'Fout: het is niet mogelijk te converteren tussen de eenheden van "$1" en "$2".',
+ 'pfunc-convert-unknownunit' => 'Fout: onbekende eenheid "$1".',
+ 'pfunc-convert-unknowndimension' => 'Fout: Onbekende afmeting "$1".',
+ 'pfunc-convert-invalidcompoundunit' => 'Fout: Ongeldige samengestelde eenheid "$1".',
+ 'pfunc-convert-nounit' => 'Fout: Geen broneenheid opgegeven.',
+ 'pfunc-convert-doublecompoundunit' => 'Fout: het is niet mogelijk samengestelde eenheden zoals "$1" te verwerken.',
+ 'pfunc-convert-dimension-length' => 'lengte',
+ 'pfunc-convert-dimension-area' => 'oppervlakte',
+ 'pfunc-convert-dimension-volume' => 'inhoud',
+ 'pfunc-convert-dimension-time' => 'tijd',
+ 'pfunc-convert-dimension-timesquared' => 'tijd<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'massa',
+ 'pfunc-convert-dimension-speed' => 'snelheid',
+ 'pfunc-convert-dimension-temperature' => 'temperatuur',
+ 'pfunc-convert-dimension-acceleration' => 'versnelling',
+ 'pfunc-convert-dimension-force' => 'kracht',
+ 'pfunc-convert-dimension-torque' => 'koppel',
+ 'pfunc-convert-dimension-energy' => 'energie',
+ 'pfunc-convert-dimension-power' => 'vermogen',
+ 'pfunc-convert-dimension-pressure' => 'druk',
+ 'pfunc-convert-dimension-density' => 'dichtheid',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'brandstofefficientiepositief',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'brandstofefficientienegatief',
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hecto',
+ 'pfunc-convert-prefix-deca' => 'deca',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'milli',
+ 'pfunc-convert-prefix-micro' => 'micro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'pico',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yocto',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|meter|meter}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|angstrom|angstrom}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|mijl|mijl}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|furlong|furlong}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|chain|chains}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|roede|roede}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|vadem|vadem}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|yard|yards}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|voet|voet}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|hand|handen}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|inch|inches}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|nautische mijl|nautische mijlen}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|nautische mijl (Brits, voor 1970)|nautische mijlen (Brits, voor 1970)}}',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1|nautische mijl (VS, voor 1954)|nautische mijlen (VS, voor 1954)}}',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2 parsec|$2 parsecs}}',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1|$2 lichtjaar|$2 lichtjaren}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|astronomische eenheid|astronomische eenheden}}',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'furlong',
+ 'pfunc-convert-unit-length-chain-abbr' => 'chain',
+ 'pfunc-convert-unit-length-rod-abbr' => 'rd',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'fath',
+ 'pfunc-convert-unit-length-yard-abbr' => 'yd',
+ 'pfunc-convert-unit-length-foot-abbr' => 'ft',
+ 'pfunc-convert-unit-length-hand-abbr' => 'h',
+ 'pfunc-convert-unit-length-inch-abbr' => 'in',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'NM',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'MN (Brits)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'MN (VS voor 1954)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2pc',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2lj',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'AE',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|vierkante kilometer|vierkante kilometer}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|vierkante meter|vierkante meter}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|vierkante centimeter|vierkante centimeter}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|vierkante millimeter|vierkante millimeter}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hectare|hectare}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|vierkante mijl|vierkante mijl}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|acre|acres}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|vierkante yard|vierkante yards}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|voerkante foot|vierkante foot}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|vierkante inch|vierkante inches}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|vierkante nautische mijl|vierkante nautische mijlen}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|dunam|dunams}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|tsubo|tsubo}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'sq mi',
+ 'pfunc-convert-unit-area-acre-abbr' => 'acre',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'sq yd',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'sq ft',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'sq in',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'vierkante mijl',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'dunam',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'tsubo',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|seconde|seconden}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|$2jaar|$2jaren}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|dag|dagen}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|uur|uur}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minuut|minuten}}',
+ 'pfunc-convert-unit-time-second-abbr' => 'sec.',
+ 'pfunc-convert-unit-time-year-abbr' => '$2jaar',
+ 'pfunc-convert-unit-time-day-abbr' => 'dag',
+ 'pfunc-convert-unit-time-hour-abbr' => 'uur',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1| kubieke meter|kubieke meter}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|kubieke centimeter|kubieke centimeter}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|kubieke millimeter|kubieke millimeter}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|kiloliter|kiloliter}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|liter|liter}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|centiliters|centiliter}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|milliliter|milliliter}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|kubieke yard|kubieke yard}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|kubieke voet|kubieke voet}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|kubieke inch|kubieke inch}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|vat|vaten}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|bushel|bushels}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|gallon|gallon}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|quart|quart}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|pint|pints}}',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1|fluid ounce|fluid ounces}}',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1|VS-vat|VS-vaten}}',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1|vat|vaten}}',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1|vat|vaten}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|VS-gallon|VS-gallon}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|VS-quart|VS-quart}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|VS-pint|VS-pints}}',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1|VS-fluid ounce|VS-fluid ounces}}',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1|VS-droog vat|VS-droge vaten}}',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1|VS-bushel|VS-bushels}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|VS-droge gallon|VS-droge gallon}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|VS-droge quart|VS-droge quart}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|VS-droge pint|VS-droge pints}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => 'l',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'yd<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'ft<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'in<sup>3</sup>',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'bsh',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'gal',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'qt',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'pt',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'fl.oz.',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'VS bbl',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'VS gal',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'VS qt',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'VS pt',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'VS fl.oz.',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'VS bbl',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'VS bsh',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'VS drg.gal',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'VS drg.qt',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'VS drg.pt',
+ 'pfunc-convert-unit-speed-mile-hour' => 'mijl per uur',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'mpu',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|$2pascal|$2pascal}}',
+ 'pfunc-convert-unit-pressure-bar' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar' => 'decibar',
+ 'pfunc-convert-unit-pressure-millibar' => 'millibar',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'kilobarn',
+ 'pfunc-convert-unit-pressure-barye' => 'barye',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|atmosfeer|atmosfeer}}',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1|Torr|Torr}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|millimeter kwik|millimeter kwik}}',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|duim kwik|duimen kwik}}',
+ 'pfunc-convert-unit-pressure-psi' => '{{PLURAL:$1|pond per vierkante inch|pond per vierkante inch}}',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'dbar',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'mbar',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'kBa',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ba',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'Torr',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'mmHg',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'inHg',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+ * @author Eirik
+ * @author Frokor
+ * @author Gunnernett
+ * @author Harald Khan
+ */
+$messages['nn'] = array(
+ 'pfunc_desc' => 'Legg til logiske funksjonar i parseren.',
+ 'pfunc_time_error' => 'Feil: Ugyldig tid',
+ 'pfunc_time_too_long' => 'Feil: #time er kalla for mange gonger',
+ 'pfunc_rel2abs_invalid_depth' => 'Feil: Ugyldig djupn i stien: «$1» (prøvde å nå ein node ovanfor rotnoden)',
+ 'pfunc_expr_stack_exhausted' => 'Feil i uttrykket: Stacken er tømd',
+ 'pfunc_expr_unexpected_number' => 'Feil i uttrykket: Uventa tal',
+ 'pfunc_expr_preg_match_failure' => 'Feil i uttrykket: Uventa feil i preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Feil i uttrykket: Ukjent ord, «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Feil i uttrykket: Uventa operatør, $1',
+ 'pfunc_expr_missing_operand' => 'Feil i uttrykket: Operand for $1 manglar',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Feil i uttrykket: Uventa avsluttande parentes',
+ 'pfunc_expr_unrecognised_punctuation' => 'Feil i uttrykket: Ukjent punktumsteikn, «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Feil i uttrykket: Ein parentes er ikkje avslutta',
+ 'pfunc_expr_division_by_zero' => 'Divisjon med null',
+ 'pfunc_expr_invalid_argument' => 'Ugyldig argument for $1: < -1 eller > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ugyldig argument for ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Feil i uttrykket: Ukjend feil ($1)',
+ 'pfunc_expr_not_a_number' => 'Resultatet i $1 er ikkje eit tal',
+ 'pfunc_string_too_long' => 'Feil: Strengen går over grensa på $1 teikn',
+);
+
+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
+ * @author Jon Harald Søby
+ * @author Laaknor
+ */
+$messages['no'] = array(
+ 'pfunc_desc' => 'Utvid parser med logiske funksjoner',
+ 'pfunc_time_error' => 'Feil: ugyldig tid',
+ 'pfunc_time_too_long' => 'Feil: #time brukt for mange ganger',
+ 'pfunc_time_too_big' => 'Feil: #time støtter kun år opp til 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Feil: Ugyldig dybde i sti: «$1» (prøvde å få tilgang til en node over rotnoden)',
+ 'pfunc_expr_stack_exhausted' => 'Uttrykksfeil: Stakk utbrukt',
+ 'pfunc_expr_unexpected_number' => 'Uttrykksfeil: Uventet nummer',
+ 'pfunc_expr_preg_match_failure' => 'Uttrykksfeil: Uventet preg_match-feil',
+ 'pfunc_expr_unrecognised_word' => 'Uttrykksfeil: Ugjenkjennelig ord «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Uttrykksfeil: Uventet $1-operator',
+ 'pfunc_expr_missing_operand' => 'Uttrykksfeil: Mangler operand for $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Uttrykksfeil: Uventet lukkende parentes',
+ 'pfunc_expr_unrecognised_punctuation' => 'Uttrykksfeil: Ugjenkjennelig tegn «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Uttrykksfeil: Åpen parentes',
+ 'pfunc_expr_division_by_zero' => 'Deling på null',
+ 'pfunc_expr_invalid_argument' => 'Ugyldig argument for $1: < -1 eller > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ugyldig argument for ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Uttrykksfeil: Ukjent feil ($1)',
+ 'pfunc_expr_not_a_number' => 'I $1: resultat er ikke et tall',
+ 'pfunc_string_too_long' => 'Feil: Strengen går over grensen på $1 tegn',
+);
+
+/** Occitan (Occitan)
+ * @author Cedric31
+ */
+$messages['oc'] = array(
+ 'pfunc_desc' => 'Augmenta lo parser amb de foncions logicas',
+ 'pfunc_time_error' => 'Error: durada invalida',
+ 'pfunc_time_too_long' => 'Error: parser #time apelat tròp de còps',
+ '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ç)',
+ 'pfunc_expr_stack_exhausted' => 'Expression erronèa : pila agotada',
+ 'pfunc_expr_unexpected_number' => 'Expression erronèa : nombre pas esperat',
+ 'pfunc_expr_preg_match_failure' => 'Expression erronèa : una expression pas compresa a pas capitat',
+ 'pfunc_expr_unrecognised_word' => "Error d'expression : lo mot '''$1''' es pas reconegut",
+ 'pfunc_expr_unexpected_operator' => "Error d'expression : l'operador '''$1''' es pas reconegut",
+ 'pfunc_expr_missing_operand' => "Error d'expression : l'operanda '''$1''' es pas reconeguda",
+ 'pfunc_expr_unexpected_closing_bracket' => "Error d'expression : parentèsi tampanta pas prevista",
+ 'pfunc_expr_unrecognised_punctuation' => "Error d'expression : caractèr de ponctuacion « $1 » pas reconegut",
+ 'pfunc_expr_unclosed_bracket' => 'Error d’expression : parentèsi pas tampada',
+ 'pfunc_expr_division_by_zero' => 'Division per zèro',
+ 'pfunc_expr_invalid_argument' => 'Valor incorrècta per $1 : < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Valor incorrècta per ln : ≤ 0',
+ 'pfunc_expr_unknown_error' => "Error d'expression : error desconeguda ($1)",
+ 'pfunc_expr_not_a_number' => 'Dins $1 : lo resultat es pas un nombre',
+ 'pfunc_string_too_long' => 'Error : La cadena depassa lo limit maximal de $1 caractèr{{PLURAL:$1||s}}',
+);
+
+/** Polish (Polski)
+ * @author Derbeth
+ * @author Sp5uhe
+ */
+$messages['pl'] = array(
+ 'pfunc_desc' => 'Rozszerza analizator składni o funkcje logiczne',
+ 'pfunc_time_error' => 'Błąd – niepoprawny czas',
+ 'pfunc_time_too_long' => 'Błąd – zbyt wiele wywołań funkcji #time',
+ 'pfunc_time_too_big' => 'Błąd – rok w #time nie może być większy niż 9999',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Błąd w wyrażeniu – stos wyczerpany',
+ 'pfunc_expr_unexpected_number' => 'Błąd w wyrażeniu – nieoczekiwana liczba',
+ 'pfunc_expr_preg_match_failure' => 'Błąd w wyrażeniu – nieoczekiwany błąd preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Błąd w wyrażeniu – nierozpoznane słowo „$1”',
+ 'pfunc_expr_unexpected_operator' => 'Błąd w wyrażeniu – nieoczekiwany operator $1',
+ 'pfunc_expr_missing_operand' => 'Błąd w wyrażeniu – brak argumentu funkcji $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Błąd w wyrażeniu – nieoczekiwany nawias zamykający',
+ 'pfunc_expr_unrecognised_punctuation' => 'Błąd w wyrażeniu – nierozpoznany znak interpunkcyjny „$1”',
+ 'pfunc_expr_unclosed_bracket' => 'Błąd w wyrażeniu – niedomknięty nawias',
+ 'pfunc_expr_division_by_zero' => 'Dzielenie przez zero',
+ 'pfunc_expr_invalid_argument' => 'Nieprawidłowy argument funkcji $1 – mniejszy od -1 lub większy od 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Nieprawidłowy argument funkcji ln – mniejszy lub równy 0',
+ 'pfunc_expr_unknown_error' => 'Błąd w wyrażeniu – nieznany błąd ($1)',
+ 'pfunc_expr_not_a_number' => 'W $1 – wynik nie jest liczbą',
+ 'pfunc_string_too_long' => 'Błąd – długość ciągu znaków przekracza dopuszczalne $1',
+ 'pfunc-convert-dimensionmismatch' => 'Błąd – nie można konwertować pomiędzy jednostkami „$1” i „$2”',
+ 'pfunc-convert-unknownunit' => 'Błąd – nieznana jednostka „$1”',
+ 'pfunc-convert-unknowndimension' => 'Błąd – nieznana jednostka „$1”',
+ 'pfunc-convert-invalidcompoundunit' => 'Błąd – nieprawidłowa jednostka złożona „$1”',
+ 'pfunc-convert-nounit' => 'Błąd – brak jednostki źródłowej',
+ 'pfunc-convert-doublecompoundunit' => 'Błąd – nie można przetworzyć jednostki podwójnie złożonej jak „$1”',
+ 'pfunc-convert-dimension-length' => 'długość',
+ 'pfunc-convert-dimension-area' => 'powierzchnia',
+ 'pfunc-convert-dimension-volume' => 'objętość',
+ 'pfunc-convert-dimension-time' => 'czas',
+ 'pfunc-convert-dimension-timesquared' => 'czas<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'masa',
+ 'pfunc-convert-dimension-speed' => 'prędkość',
+ 'pfunc-convert-dimension-temperature' => 'temperatura',
+ 'pfunc-convert-dimension-acceleration' => 'przyspieszenie',
+ 'pfunc-convert-dimension-force' => 'siła',
+ 'pfunc-convert-dimension-torque' => 'moment obrotowy',
+ 'pfunc-convert-dimension-energy' => 'energia',
+ 'pfunc-convert-dimension-power' => 'moc',
+ 'pfunc-convert-dimension-pressure' => 'ciśnienie',
+ 'pfunc-convert-dimension-density' => 'gęstość',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'bezwzględne zużycie paliwa',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'nieprawidłowe zużycie paliwa',
+ 'pfunc-convert-prefix-yotta' => 'jotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'eksa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hekto',
+ 'pfunc-convert-prefix-deca' => 'deka',
+ 'pfunc-convert-prefix-deci' => 'decy',
+ 'pfunc-convert-prefix-centi' => 'centy',
+ 'pfunc-convert-prefix-milli' => 'mili',
+ 'pfunc-convert-prefix-micro' => 'mikro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'piko',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'jokto',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2 metr|$2 metry|$2 metrów}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|angstrem|angstremy|angstremów}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|mila|mile|mil}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|furlong|furlongi|furlongów}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|łańcuch|łańcuchy|łańcuchów}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|pręt|pręty|prętów}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|sążeń|sążnie|sążni}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|jard|jardy|jardów}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|stopa|stopy|stóp}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|dłoń|dłonie|dłoni}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|cal|cale|cali}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|mila morska|mile morskie|mil morskich}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|mila morska brytyjska|mile morskie brytyjskie|mil morskich brytyjskich}} sprzed 1970 roku',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1|mila morska amerykańska|mile morskie amerykańskie|mil morskich amerykańskich}} sprzed 1954 roku',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2 parsek|$2 parseki|$2 parseków}}',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1|$2 rok świetlny|$2 lata świetlne|$2 lat świetlnych}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|jednostka astronomiczna|jednostki astronomiczne|jednostek astronomicznych}}',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'furlong',
+ 'pfunc-convert-unit-length-chain-abbr' => 'łańcuch',
+ 'pfunc-convert-unit-length-rod-abbr' => 'rd',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'sążeń',
+ 'pfunc-convert-unit-length-yard-abbr' => 'jard',
+ 'pfunc-convert-unit-length-foot-abbr' => 'stopa',
+ 'pfunc-convert-unit-length-hand-abbr' => 'dłoń',
+ 'pfunc-convert-unit-length-inch-abbr' => 'cal',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'INM',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'angielska mila morska',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'amerykańska mila morska sprzed 1954 roku',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2 pc',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2 lat świetlnych',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'j.a.',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|kilometr kwadratowy|kilometry kwadratowe|kilometrów kwadratowych}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|metr kwadratowy|metry kwadratowe|metrów kwadratowych}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|centymetr kwadratowy|centymetry kwadratowe|centymetrów kwadratowych}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|milimetr kwadratowy|milimetry kwadratowe|milimetrów kwadratowych}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hektar|hektary|hektarów}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|mila kwadratowa|mile kwadratowe|mil kwadratowych}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|akr|akry|akrów}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|jard kwadratowy|jardy kwadratowe|jardów kwadratowych}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|stopa kwadratowa|stopy kwadratowe|stóp kwadratowych}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|cal kwadratowy|cale kwadratowe|cali kwadratowych}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|mila morska kwadratowa|mile morskie kwadratowe|mil morskich kwadratowych}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|dunam|dunamy|dunamów}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|tsubo|tsubo|tsubo}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'mila<sup>2</sup>',
+ 'pfunc-convert-unit-area-acre-abbr' => 'akr',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'jard<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'stopa<sup>2</sup>',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'cal<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'mila morska<sup>2</sup>',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'dunam',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'tsubo',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|sekunda|sekundy|sekund}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|$2 rok|$2 lata|$2 lat}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|dzień|dni}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|godzina|godziny|godzin}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minuta|minuty|minut}}',
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-year-abbr' => '$2 jard',
+ 'pfunc-convert-unit-time-day-abbr' => 'doba',
+ 'pfunc-convert-unit-time-hour-abbr' => 'h',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|metr sześcienny|metry sześcienne|metrów sześciennych}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|centymetr sześcienny|centymetry sześcienne|centymetrów sześciennych}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|milimetr sześcienny|milimetry sześcienne|milimetrów sześciennych}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|tysiąc litrów|tysiące litrów|tysięcy litrów}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|litr|litry|litrów}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|dziesiąta część|dziesiąte części|dziesiątych części}} litra',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|mililitr|mililitry|mililitrów}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|jard|jardów}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2 l',
+ 'pfunc-convert-unit-speed-mile-hour' => 'mil na godzinę',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|$2paskal|$2paskali}}',
+ 'pfunc-convert-unit-pressure-bar' => 'barów',
+ 'pfunc-convert-unit-pressure-decibar' => 'decybarów',
+ 'pfunc-convert-unit-pressure-millibar' => 'millibarów',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'kilobarów',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|atmosfera|atmosfer}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|milimtr słupka rtęci|milimetrów słupka rtęci}}',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|cal słupka rtęci|cali słupka rtęci}}',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar.',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'dbar',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'mmHg',
+);
+
+/** Piedmontese (Piemontèis)
+ * @author Bèrto 'd Sèra
+ * @author Dragonòt
+ */
+$messages['pms'] = array(
+ 'pfunc_desc' => 'Mijora ël parse con funsion lògiche',
+ 'pfunc_time_error' => 'Eror: temp nen bon',
+ 'pfunc_time_too_long' => 'Eror: #time a ven ciamà tròpe vire',
+ 'pfunc_time_too_big' => 'Eror: #time a përmëtt mach agn fin al 9999',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => "Eror ëd l'espression: stach esaurìa",
+ 'pfunc_expr_unexpected_number' => "Eror ëd l'espression: nùmer pa spetà",
+ 'pfunc_expr_preg_match_failure' => "Eror ëd l'espression: eror pa spetà an preg_match",
+ 'pfunc_expr_unrecognised_word' => 'Eror ëd l\'espression: paròla "$1" pa arconossùa',
+ 'pfunc_expr_unexpected_operator' => "Eror ëd l'espression: operator $1 pa spetà",
+ 'pfunc_expr_missing_operand' => "Eror ëd l'espression: Operand për $1 mancant",
+ 'pfunc_expr_unexpected_closing_bracket' => "Eror ëd l'espression: paréntesi pa sarà",
+ 'pfunc_expr_unrecognised_punctuation' => 'Eror ëd l\'espression: caràter ëd puntegiadura "$1" pa arconossù',
+ 'pfunc_expr_unclosed_bracket' => "Eror ëd l'espression: paréntesi pa sarà",
+ 'pfunc_expr_division_by_zero' => 'Division për zero',
+ 'pfunc_expr_invalid_argument' => 'Argoment pa bon për $1: < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argoment pa bon për ln: <= 0',
+ 'pfunc_expr_unknown_error' => "Eror ëd l'espression: Eror pa conossù ($1)",
+ 'pfunc_expr_not_a_number' => "An $1: l'arzultà a l'é pa un nùmer",
+ 'pfunc_string_too_long' => 'Eror: la stringa a passa ël lìmit ëd $1 caràter',
+);
+
+/** Western Punjabi (پنجابی)
+ * @author Khalid Mahmood
+ */
+$messages['pnb'] = array(
+ 'pfunc-convert-dimension-length' => 'لمبائی',
+ 'pfunc-convert-dimension-area' => 'تھاں',
+ 'pfunc-convert-dimension-volume' => 'والیوم',
+ 'pfunc-convert-dimension-time' => 'ویلہ',
+ 'pfunc-convert-dimension-timesquared' => 'واری<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'ماس',
+ 'pfunc-convert-dimension-speed' => 'دوڑ',
+ 'pfunc-convert-dimension-temperature' => 'گرمی ناپ',
+ 'pfunc-convert-dimension-acceleration' => 'سدی دوڑ',
+ 'pfunc-convert-dimension-force' => 'زور',
+ 'pfunc-convert-dimension-torque' => 'ٹارک',
+ 'pfunc-convert-dimension-energy' => 'انرجی',
+ 'pfunc-convert-dimension-power' => 'پاور',
+ 'pfunc-convert-dimension-pressure' => 'دبآ',
+ 'pfunc-convert-dimension-density' => 'گوڑا',
+ 'pfunc-convert-prefix-yotta' => 'یوٹا',
+ 'pfunc-convert-prefix-zetta' => 'زیٹا',
+ 'pfunc-convert-prefix-exa' => 'ایکسا',
+ 'pfunc-convert-prefix-peta' => 'پیٹا',
+ 'pfunc-convert-prefix-tera' => 'ٹیرا',
+ 'pfunc-convert-prefix-giga' => 'گیگا',
+ 'pfunc-convert-prefix-mega' => 'میگا',
+ 'pfunc-convert-prefix-kilo' => 'کلو',
+ 'pfunc-convert-prefix-hecto' => 'ہیکٹو',
+ 'pfunc-convert-prefix-deca' => 'ڈیکا',
+ 'pfunc-convert-prefix-deci' => 'ڈیسی',
+ 'pfunc-convert-prefix-centi' => 'سنٹی',
+ 'pfunc-convert-prefix-milli' => 'ملی',
+ 'pfunc-convert-prefix-micro' => 'مائکرو',
+ 'pfunc-convert-prefix-nano' => 'نینو',
+ 'pfunc-convert-prefix-pico' => 'پکو',
+ 'pfunc-convert-prefix-femto' => 'فمٹو',
+ 'pfunc-convert-prefix-atto' => 'اٹو',
+ 'pfunc-convert-prefix-zepto' => 'زپٹو',
+ 'pfunc-convert-prefix-yocto' => 'یوکٹو',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2میٹر}}',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'فرلانگ',
+ 'pfunc-convert-unit-length-chain-abbr' => 'زنجیر',
+ 'pfunc-convert-unit-length-rod-abbr' => 'رداس',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'فیدم',
+ 'pfunc-convert-unit-length-yard-abbr' => 'گز',
+ 'pfunc-convert-unit-length-foot-abbr' => 'فٹ',
+ 'pfunc-convert-unit-length-hand-abbr' => 'کینٹہ',
+ 'pfunc-convert-unit-length-inch-abbr' => 'انچ',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'سمندری میل',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'سمندری میل (برطانیہ)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'سمندری میل (امریکہ 1954 توں پہلے)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2کمپیوٹر',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2ly',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'اسمانی ناپ',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|مربع کلومیٹر|مربع کلومیٹر}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|مربع میٹر|مربع میٹر}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|مربع سینٹیمیٹر|مربع سینٹیمیٹر}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|مربع میلیمیٹر|مربع میلیمیٹر}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|ہیکٹر|ہیکٹر}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|مربع میلیمیٹر|مربع میل}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|ایکڑ|ایکڑ}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|مربع گز|مربع گز}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|مربع فٹ|مربع فٹ}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|مربع انچ|مربع انچ}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|مربع سمندری میل|مربع سمندری میل}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|ڈنام|ڈنام}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|زوبو|زوبو}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'کلومیٹر<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ہیکٹر',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'مربع میل',
+ 'pfunc-convert-unit-area-acre-abbr' => 'ایکڑ',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'مربع گز',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'مربع فٹ',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'مربع انچ',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'مربع سمندری میل',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'دونام',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'سوبو',
+ 'pfunc-convert-unit-time-second' => '$1 {{PLURAL:$1|سکنٹ|سکنٹاں}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|$2ورہ|$2ورے}}',
+ 'pfunc-convert-unit-time-day' => ' {{PLURAL:$1|دن|دناں}}',
+ 'pfunc-convert-unit-time-hour' => ' {{PLURAL:$1|کینٹا|کینٹے}}',
+ 'pfunc-convert-unit-time-minute' => ' {{PLURAL:$1|منٹ|منٹاں}}',
+ 'pfunc-convert-unit-time-second-abbr' => 'سکنث',
+ 'pfunc-convert-unit-time-year-abbr' => '$2ورہ',
+ 'pfunc-convert-unit-time-day-abbr' => 'دیاڑھ',
+ 'pfunc-convert-unit-time-hour-abbr' => 'کینٹہ',
+ 'pfunc-convert-unit-time-minute-abbr' => 'منٹ',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|مربع میٹر|مربع میٹر}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|مربع سینٹیمیٹر|مربع سینٹیمیٹر}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|مربع میلیمیٹر|مربع میلیمیٹر}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|کلولٹر|کلولٹر}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|لٹر|لٹر}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|سینٹیلٹر}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|ملیلٹر}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|مربع گز}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|مربع فٹ}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|مربع انچ}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|بیرل}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|بشل}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|گیلن}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|کوارٹز}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|پنٹ}}',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1|پانیسر اونس}}',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1|بیرل}}',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1|بیرل}}',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1|بیرل}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|گیلن}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|کوارٹز}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|پنٹ}}',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1|پانیسر اونس}}',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1|بیرل}}',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1|بشل}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|گیلن}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|کوارٹز}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|پنٹ}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'سینٹی میٹر<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'ملی میٹر<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2ly',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'مربع گز',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'مربع فٹ',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'مکعب انچ',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'bbl',
+);
+
+/** Pashto (پښتو)
+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
+ */
+$messages['ps'] = array(
+ 'pfunc_time_error' => 'ستونزه: ناسم وخت',
+ 'pfunc_expr_division_by_zero' => 'وېش په صفر',
+);
+
+/** Portuguese (Português)
+ * @author Hamilton Abreu
+ * @author Malafaya
+ */
+$messages['pt'] = array(
+ 'pfunc_desc' => 'Adiciona funções lógicas ao analisador sintáctico',
+ 'pfunc_time_error' => 'Erro: tempo inválido',
+ 'pfunc_time_too_long' => 'Erro: demasiadas chamadas a #time',
+ 'pfunc_time_too_big' => 'Erro: #time só lida com anos até 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Erro: Profundidade inválida no caminho: "$1" (foi tentado o acesso a um nó acima do nó raiz)',
+ 'pfunc_expr_stack_exhausted' => 'Erro de expressão: Pilha esgotada',
+ 'pfunc_expr_unexpected_number' => 'Erro de expressão: Número inesperado',
+ 'pfunc_expr_preg_match_failure' => 'Erro de expressão: Falha em preg_match inesperada',
+ 'pfunc_expr_unrecognised_word' => 'Erro de expressão: Palavra "$1" não reconhecida',
+ 'pfunc_expr_unexpected_operator' => 'Erro de expressão: Operador $1 inesperado',
+ 'pfunc_expr_missing_operand' => 'Erro de expressão: Falta operando para $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Erro de expressão: Parêntese de fecho inesperado',
+ 'pfunc_expr_unrecognised_punctuation' => 'Erro de expressão: Carácter de pontuação "$1" não reconhecido',
+ 'pfunc_expr_unclosed_bracket' => 'Erro de expressão: Parêntese não fechado',
+ 'pfunc_expr_division_by_zero' => 'Divisão por zero',
+ 'pfunc_expr_invalid_argument' => 'Argumento inválido para $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumento inválido para ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Erro de expressão: Erro desconhecido ($1)',
+ 'pfunc_expr_not_a_number' => 'Em $1: resultado não é um número',
+ 'pfunc_string_too_long' => 'Erro: Texto excede o limite de $1 caracteres',
+);
+
+/** Brazilian Portuguese (Português do Brasil)
+ * @author Eduardo.mps
+ * @author Giro720
+ */
+$messages['pt-br'] = array(
+ 'pfunc_desc' => 'Melhora o analisador (parser) com funções lógicas',
+ 'pfunc_time_error' => 'Erro: tempo inválido',
+ 'pfunc_time_too_long' => 'Erro: muitas chamadas a #time',
+ 'pfunc_time_too_big' => 'Erro: #time só lida com anos até 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Erro: Profundidade inválida no caminho: "$1" (foi tentado o acesso a um nó acima do nó raiz)',
+ 'pfunc_expr_stack_exhausted' => 'Erro de expressão: Pilha esgotada',
+ 'pfunc_expr_unexpected_number' => 'Erro de expressão: Número inesperado',
+ 'pfunc_expr_preg_match_failure' => 'Erro de expressão: Falha em preg_match inesperada',
+ 'pfunc_expr_unrecognised_word' => 'Erro de expressão: Palavra "$1" não reconhecida',
+ 'pfunc_expr_unexpected_operator' => 'Erro de expressão: Operador $1 inesperado',
+ 'pfunc_expr_missing_operand' => 'Erro de expressão: Falta operando para $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Erro de expressão: Parêntese de fechamento inesperado',
+ 'pfunc_expr_unrecognised_punctuation' => 'Erro de expressão: Caractere de pontuação "$1" não reconhecido',
+ 'pfunc_expr_unclosed_bracket' => 'Erro de expressão: Parêntese não fechado',
+ 'pfunc_expr_division_by_zero' => 'Divisão por zero',
+ 'pfunc_expr_invalid_argument' => 'Argumento inválido para $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumento inválido para ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Erro de expressão: Erro desconhecido ($1)',
+ 'pfunc_expr_not_a_number' => 'Em $1: resultado não é um número',
+ 'pfunc_string_too_long' => 'Erro: cadeia de caracteres excede o limite de $1 caracteres',
+);
+
+/** Quechua (Runa Simi)
+ * @author AlimanRuna
+ */
+$messages['qu'] = array(
+ 'pfunc_desc' => 'Parser nisqata sullwa ruranakunawan allinchay',
+ 'pfunc_time_error' => 'Pantasqa: Pachaqa manam allinchu',
+ 'pfunc_time_too_long' => 'Pantasqa: nisyu "#time" (pacha)',
+ 'pfunc_time_too_big' => "Pantasqa: #time nisqaqa 9999 watallakamam watakunata q'imin",
+ 'pfunc_rel2abs_invalid_depth' => 'Pantasqa: ñanpa ukhu kayninqa manam allinchu: "$1" (saphi khipu hawanpi kaq khiputam aypayta munaspa)',
+ 'pfunc_expr_stack_exhausted' => 'Rikuchikuypi pantasqa: Nisyu tawqa',
+ 'pfunc_expr_unexpected_number' => 'Rikuchikuypi pantasqa: Mana suyakusqa yupay',
+ 'pfunc_expr_preg_match_failure' => 'Rikuchikuypi pantasqa: Mana suyakusqa preg_match alqa',
+ 'pfunc_expr_unrecognised_word' => 'Rikuchikuypi pantasqa: Mana riqsisqa rima "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Rikuchikuypi pantasqa: Mana suyakusqa ruraq "$1"',
+ 'pfunc_expr_missing_operand' => 'Rikuchikuypi pantasqa: Manam kanchu $1-paq ruraq',
+ 'pfunc_expr_unexpected_closing_bracket' => "Rikuchikuypi pantasqa: Nisyu wichq'aq qinchaq",
+ 'pfunc_expr_unrecognised_punctuation' => 'Rikuchikuypi pantasqa: Mana riqsisqa qillqa unancha "$1"',
+ 'pfunc_expr_unclosed_bracket' => "Rikuchikuypi pantasqa: Manam kanchu wichq'aq qinchaq",
+ 'pfunc_expr_division_by_zero' => "Ch'usaqwan rakisqa",
+ 'pfunc_expr_invalid_argument' => '$1-paq mana allin ninakuy: : < -1 icha > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln-paq mana allin ninakuy: <= 0',
+ 'pfunc_expr_unknown_error' => 'Rikuchikuypi pantasqa: Mana riqsisqa pantasqa ($1)',
+ 'pfunc_expr_not_a_number' => '$1-pi: lluqsiyninqa manam yupaychu',
+ 'pfunc_string_too_long' => 'Pantasqa: Qillqa tiwlliqa $1 sanampa saywatam llallin',
+);
+
+/** Romanian (Română)
+ * @author KlaudiuMihaila
+ * @author Minisarm
+ * @author Stelistcristi
+ */
+$messages['ro'] = array(
+ 'pfunc_desc' => 'Îmbunătățiți parser-ul cu funcții logice',
+ 'pfunc_time_error' => 'Eroare: timp incorect',
+ 'pfunc_time_too_long' => 'Eroare: prea multe apeluri #time',
+ 'pfunc_rel2abs_invalid_depth' => 'Eroare: adâncime incorectă în cale: "$1" (încercat accesarea unui nod deasupra nodului rădăcină)',
+ 'pfunc_expr_stack_exhausted' => 'Eroare de expresie: Stivă epuizată',
+ 'pfunc_expr_unexpected_number' => 'Eroare de expresie: număr neașteptat',
+ 'pfunc_expr_preg_match_failure' => 'Eroare de expresie: eșuare preg_match neașteptată',
+ 'pfunc_expr_unrecognised_word' => 'Eroare de expresie: "$1" este cuvânt necunoscut',
+ 'pfunc_expr_unexpected_operator' => 'Eroare de expresie: operator $1 neașteptat',
+ 'pfunc_expr_missing_operand' => 'Eroare de expresie: operand lipsă pentru $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Eroare de expresie: paranteză închisă neașteptată',
+ 'pfunc_expr_unrecognised_punctuation' => 'Eroare de expresie: caracter de punctuație „$1” necunoscut',
+ 'pfunc_expr_unclosed_bracket' => 'Eroare de expresie: paranteză neînchisă',
+ 'pfunc_expr_division_by_zero' => 'Împărțire la zero',
+ 'pfunc_expr_invalid_argument' => 'Argument incorect pentru $1: < -1 sau > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argument incorect pentru ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Eroare de expresie: eroare necunoscută ($1)',
+ 'pfunc_expr_not_a_number' => 'În $1: rezultatul nu este un număr',
+ 'pfunc_string_too_long' => 'Eroare: Şirul depășește limita de caractere de $1',
+);
+
+/** Tarandíne (Tarandíne)
+ * @author Joetaras
+ */
+$messages['roa-tara'] = array(
+ 'pfunc_desc' => "L'analizzatore avanzate cu le funziune loggeche",
+ 'pfunc_time_error' => 'Errore: Orarie invalide',
+ 'pfunc_time_too_long' => 'Errore: stonne troppe #time chiamate',
+ 'pfunc_rel2abs_invalid_depth' => "Errore: Profondità invalide jndr'à 'u percorse: \"\$1\" (s'à pruvate a pigghià 'nu node sus a 'u node radice)",
+ 'pfunc_expr_stack_exhausted' => 'Espressione in errore: Stack anghiute',
+ 'pfunc_expr_unexpected_number' => 'Espressione in errore: Numere inaspettate',
+ 'pfunc_expr_preg_match_failure' => 'Espressione in errore: preg_match inaspettate e fallite',
+ 'pfunc_expr_unrecognised_word' => 'Espressione in errore: Parola scanusciute "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Espressione in errore: Operatore $1 inaspettate',
+ 'pfunc_expr_missing_operand' => 'Espressione in errore: Operande zumbate pe $1',
+ 'pfunc_expr_unexpected_closing_bracket' => "Espressione in errore: Non g'onne state achiuse le parendesi",
+ 'pfunc_expr_unrecognised_punctuation' => 'Espressione in errore: Carattere de punde "$1" scanusciute',
+ 'pfunc_expr_unclosed_bracket' => 'Espressione in errore: Parendesi non achiuse',
+ 'pfunc_expr_division_by_zero' => 'Divisione pe zero',
+ 'pfunc_expr_invalid_argument' => 'Argomende invalide pe $1: < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argomende invalide pe ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Espressione in errore: Errore scanusciute ($1)',
+ 'pfunc_expr_not_a_number' => "In $1: 'u resultate non g'è 'nu numere",
+ 'pfunc_string_too_long' => "Errore: 'A stringhe supranesce 'u limite de $1 carattere",
+);
+
+/** Russian (Русский)
+ * @author G0rn
+ * @author Александр Сигачёв
+ */
+$messages['ru'] = array(
+ 'pfunc_desc' => 'Улучшенный синтаксический анализатор с логическими функциями',
+ 'pfunc_time_error' => 'Ошибка: неправильное время',
+ 'pfunc_time_too_long' => 'Ошибка: слишком много вызовов функции #time',
+ 'pfunc_time_too_big' => 'Ошибка. Параметр #time не может превышать 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Ошибка: ошибочная глубина пути: «$1» (попытка доступа к узлу, находящемуся выше, чем корневой)',
+ 'pfunc_expr_stack_exhausted' => 'Ошибка выражения: переполнение стека',
+ 'pfunc_expr_unexpected_number' => 'Ошибка выражения: неожидаемое число',
+ 'pfunc_expr_preg_match_failure' => 'Ошибка выражения: сбой preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Ошибка выражения: неопознанное слово «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Ошибка выражения: неожидаемый оператор $1',
+ 'pfunc_expr_missing_operand' => 'Ошибка выражения: $1 не хватает операнда',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Ошибка выражения: неожидаемая закрывающая скобка',
+ 'pfunc_expr_unrecognised_punctuation' => 'Ошибка выражения: неопознанный символ пунктуации «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Ошибка выражения: незакрытая скобка',
+ 'pfunc_expr_division_by_zero' => 'Деление на ноль',
+ 'pfunc_expr_invalid_argument' => 'Ошибочный аргумент $1: < -1 или > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ошибочный аргумент ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Ошибка выражения: неизвестная ошибка ($1)',
+ 'pfunc_expr_not_a_number' => 'В $1: результат не является числом',
+ 'pfunc_string_too_long' => 'Ошибка: строка превышает ограничение в $1 символов',
+ 'pfunc-convert-dimensionmismatch' => 'Ошибка. Не удается преобразовать единицы измерения «$1» и «$2».',
+ 'pfunc-convert-unknownunit' => 'Ошибка. Неизвестная единица «$1».',
+ 'pfunc-convert-unknowndimension' => 'Ошибка. Неизвестная размерность «$1».',
+ 'pfunc-convert-invalidcompoundunit' => 'Ошибка. Недопустимая составная единица «$1».',
+ 'pfunc-convert-nounit' => 'Ошибка. Не указана исходная единица.',
+ 'pfunc-convert-doublecompoundunit' => 'Ошибка. Невозможно разобрать двойные составные единицы вида «$1».',
+ 'pfunc-convert-dimension-length' => 'длина',
+ 'pfunc-convert-dimension-area' => 'площадь',
+ 'pfunc-convert-dimension-volume' => 'объём',
+ 'pfunc-convert-dimension-time' => 'время',
+ 'pfunc-convert-dimension-timesquared' => 'время<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'масса',
+ 'pfunc-convert-dimension-speed' => 'скорость',
+ 'pfunc-convert-dimension-temperature' => 'температура',
+ 'pfunc-convert-dimension-acceleration' => 'ускорение',
+ 'pfunc-convert-dimension-force' => 'сила',
+ 'pfunc-convert-dimension-torque' => 'крутящий момент',
+ 'pfunc-convert-dimension-energy' => 'энергия',
+ 'pfunc-convert-dimension-power' => 'мощность',
+ 'pfunc-convert-dimension-pressure' => 'давление',
+ 'pfunc-convert-dimension-density' => 'плотность',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'позитивная топливная эффективность',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'негативная топливная эффективность',
+ 'pfunc-convert-prefix-yotta' => 'йотта',
+ 'pfunc-convert-prefix-zetta' => 'зетта',
+ 'pfunc-convert-prefix-exa' => 'экса',
+ 'pfunc-convert-prefix-peta' => 'пета',
+ 'pfunc-convert-prefix-tera' => 'тера',
+ 'pfunc-convert-prefix-giga' => 'гига',
+ 'pfunc-convert-prefix-mega' => 'мега',
+ 'pfunc-convert-prefix-kilo' => 'кило',
+ 'pfunc-convert-prefix-hecto' => 'гекто',
+ 'pfunc-convert-prefix-deca' => 'дека',
+ 'pfunc-convert-prefix-deci' => 'деци',
+ 'pfunc-convert-prefix-centi' => 'санти',
+ 'pfunc-convert-prefix-milli' => 'милли',
+ 'pfunc-convert-prefix-micro' => 'микро',
+ 'pfunc-convert-prefix-nano' => 'нано',
+ 'pfunc-convert-prefix-pico' => 'пико',
+ 'pfunc-convert-prefix-femto' => 'фемто',
+ 'pfunc-convert-prefix-atto' => 'атто',
+ 'pfunc-convert-prefix-zepto' => 'зепто',
+ 'pfunc-convert-prefix-yocto' => 'йокто',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2метр|$2метра|$2метров}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|ангстрем|ангстрема|ангстрем}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|миля|мили|миль}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|фурлонг|фурлонга|фурлонгов}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|чейн|чейна|чейнов}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|род|рода|родов}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|фатом|фатома|фатомов}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|ярд|ярда|ярдов}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|фут|фута|футов}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|хэнд|хэнда|хэндов}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|дюйм|дюйма|дюймов}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|морская миля|морские мили|морских милей}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|морская миля (британская до 1970)|морские мили (британских до 1970)|морских миль (британских до 1970)}}',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1|морская миля (США до 1970)|морские мили (США до 1970)|морских миль (США до 1970)}}',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2парсек|$2парсека|$2парсек}}',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1|$2 световой год|$2 световых года|$2 световых лет}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|астрономическая единица|астрономические единицы|астрономических единиц}}',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'фурлонг',
+ 'pfunc-convert-unit-length-chain-abbr' => 'чейн',
+ 'pfunc-convert-unit-length-rod-abbr' => 'род',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'фатом',
+ 'pfunc-convert-unit-length-yard-abbr' => 'ярд',
+ 'pfunc-convert-unit-length-foot-abbr' => 'фут',
+ 'pfunc-convert-unit-length-hand-abbr' => 'хэнд',
+ 'pfunc-convert-unit-length-inch-abbr' => 'дюйм',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'морская миля',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'брит. морская миля',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'морская миля (США до 1954)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2 пк',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2 св. г.',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'а. е.',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|квадратный километр|квадратных километра|квадратных километров}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|квадратный метр|квадратных метра|квадратных метров}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|квадратный сантиметр|квадратных сантиметра|квадратных сантиметров}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|квадратный миллиметр|квадратных миллиметра|квадратных миллиметров}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|гектар|гектара|гектар}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|квадратная миля|квадратных мили|квадратных миль}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|акр|акра|акров}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|квадратный ярд|квадратных ярда|квадратных ярдов}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|квадратный фут|квадратных фута|квадратных футов}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|квадратный дюйм|квадратных дюйма|квадратных дюймов}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|квадратная морская миля|квадратные морские мили|квадратных морских миль}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|дунам|дунама|дунамов}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|цубо|цубо|цубо}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'км<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'м<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'см<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'мм<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'га',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'кв. ми',
+ 'pfunc-convert-unit-area-acre-abbr' => 'акр',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'кв. ярд',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'кв. м',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'кв. дюйм',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'кв. м. ми',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'дунам',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'цубо',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|секунда|секунды|секунд}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|$2год|$2года|$2лет}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|день|дня|дней}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|час|часа|часов}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|минута|минуты|минут}}',
+ 'pfunc-convert-unit-time-second-abbr' => 'с',
+ 'pfunc-convert-unit-time-year-abbr' => '$2 г',
+ 'pfunc-convert-unit-time-day-abbr' => 'дн',
+ 'pfunc-convert-unit-time-hour-abbr' => 'ч.',
+ 'pfunc-convert-unit-time-minute-abbr' => 'м.',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|кубический метр|кубических метра|кубических метров}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|кубический сантиметр|кубических сантиметра|кубических сантиметров}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|кубический миллиметр|кубических миллиметра|кубических миллиметров}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|килолитр|килолитра|килолитров}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|литр|литра|литров}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|сантилитр|сантилитра|сантилитров}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|миллилитр|миллилитра|миллилитров}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|кубический ярд|кубических ярда|кубических ярдов}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|кубический фут|кубических фута|кубических футов}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|кубический дюйм|кубических дюйма|кубических дюймов}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|баррель|барреля|баррелей}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|бушель|бушеля|бушелей}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|галлон|галлона|галлонов}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|кварта|кварты|кварт}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|пинта|пинты|пинт}}',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1|жидкая унция|жидких унции|жидких унций}}',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1|баррель США|барреля США|баррелей США}}',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1|баррель|барреля|баррелей}}',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1|баррель|барреля|баррелей}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|галлон США|галлона США|галлонов США}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|кварта США|кварты США|кварт США}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|пинта США|пинты США|пинт США}}',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1|жидкая унция США|жидких унции США|жидких унций США}}',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1|сухой баррель США|сухих барреля США|сухих баррелей США}}',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1|бушель США|бушеля США|бушелей США}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|сухой галлон США|сухих галлона США|сухих галлонов США}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|сухая кварта США|сухие кварты США|сухих кварт США}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|сухая пинта США|сухих пинты США|сухих пинт США}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'м<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'см<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'мм<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2 л',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'куб. ярд',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'куб. фут',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'куб. дюйм',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'бр.',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'бш.',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'гал.',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'кв.',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'пт.',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'жид. унц.',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'бр. США',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'бр.',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'бр.',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'гал. США',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'кт. США',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'пт. США',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'жид. унц. США',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'бр. США',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'вш. США',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'сух. гал. США',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'сух. кт. США',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'сух. пт. США',
+ 'pfunc-convert-unit-speed-mile-hour' => 'миль/час',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'миль/ч',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|$2паскаль|$2паскаля|$2паскалей}}',
+ 'pfunc-convert-unit-pressure-bar' => 'бар',
+ 'pfunc-convert-unit-pressure-decibar' => 'децибар',
+ 'pfunc-convert-unit-pressure-millibar' => 'миллибар',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'килобария',
+ 'pfunc-convert-unit-pressure-barye' => 'бария',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|атмосфера|атмосферы|атмосфер}}',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1|торр|торра|торр}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|миллиметр ртутного столба|миллиметра ртутного столба|миллиметров ртутного столба}}',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|дюйм ртутного столба|дюйма ртутного столба|дюймов ртутного столба}}',
+ 'pfunc-convert-unit-pressure-psi' => '{{PLURAL:$1|фунт на квадратный дюйм|фунта на квадратный дюйм|фунтов на квадратный дюйм}}',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Па',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'бар',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'дбар',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'мбар',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'КБа',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ба',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'атм',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'торр',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'мм рт. ст.',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'дюйм. рт. ст.',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'фунт. на кв. дюйм',
+);
+
+/** Rusyn (Русиньскый)
+ * @author Gazeb
+ */
+$messages['rue'] = array(
+ 'pfunc_desc' => 'Росшырїня парсера о лоґічны функції',
+ 'pfunc_time_error' => 'Хына: неплатный час',
+ 'pfunc_time_too_long' => 'Хыба: дуже много кликаня #time',
+ 'pfunc_rel2abs_invalid_depth' => 'Хыба: Неплатна глубка в стежцї: "$1" (проба о приступ до узла высшого як корїнь)',
+ 'pfunc_expr_stack_exhausted' => 'Хыба выразу: Засобник переповненый',
+ 'pfunc_expr_unexpected_number' => 'Хыба выразу: Чекане чісло',
+ 'pfunc_expr_preg_match_failure' => 'Хыба выразу: Нечекана хыба функції preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Хыба выразу: Нерозпознане слово „$1“',
+ 'pfunc_expr_unexpected_operator' => 'Хыба выразу: Нечеканый оператор: $1',
+ 'pfunc_expr_missing_operand' => 'Хыба выразу: Хыбить операнд про $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Хыба выразу: Нечекана заперача заперка',
+ 'pfunc_expr_unrecognised_punctuation' => 'Хыба выразу: Нерозпознаный роздїловый знак „$1“',
+ 'pfunc_expr_unclosed_bracket' => 'Хыба ыразу: Незаперты заперкы',
+ 'pfunc_expr_division_by_zero' => 'Дїлїня нулов',
+ 'pfunc_expr_invalid_argument' => 'Неправилный арґумент про $1: < -1 або > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Неправилный арґумент про ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Хыба выразу: Незнама хыба ($1)',
+ 'pfunc_expr_not_a_number' => 'У $1: резултат не є чісло',
+ 'pfunc_string_too_long' => 'Хыба: Ланц є довшый як $1 {{PLURAL:$1|знак|знакы|знаків}}, што є ліміт',
+);
+
+/** Yakut (Саха тыла)
+ * @author HalanTul
+ */
+$messages['sah'] = array(
+ 'pfunc_desc' => 'Логическай функциялаах тупсарыллыбыт синтаксическай анализатор',
+ 'pfunc_time_error' => 'Алҕас: сыыһа кэм',
+ 'pfunc_time_too_long' => 'Алҕас: #time функция наһаа элбэхтик хатыламмыт',
+ 'pfunc_time_too_big' => 'Алҕас: #time 9999-у ааһыа суохтаах',
+ 'pfunc_rel2abs_invalid_depth' => 'Алҕас: ошибочная глубина пути: «$1» (попытка доступа к узлу, находящемуся выше, чем корневой)',
+ 'pfunc_expr_stack_exhausted' => 'Ошибка выражения: переполнение стека',
+ 'pfunc_expr_unexpected_number' => 'Алҕас: кэтэһиллибэтэх чыыһыла',
+ 'pfunc_expr_preg_match_failure' => 'Алҕас: preg_match моһуоктанна',
+ 'pfunc_expr_unrecognised_word' => 'Алҕас: биллибэт тыл «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Алҕас: кэтэһиллибэтэх оператор $1',
+ 'pfunc_expr_missing_operand' => 'Алҕас: $1 операнда тиийбэт',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Алҕас: кэтэһиллибэтэх сабар ускуопка',
+ 'pfunc_expr_unrecognised_punctuation' => 'Алҕас: биллибэт пунктуация бэлиэтэ «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Алҕас: сабыллыбатах ускуопка',
+ 'pfunc_expr_division_by_zero' => 'Нуулга түҥэттии',
+ 'pfunc_expr_invalid_argument' => '$1 алҕас аргуменнаах: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln аргумена сыыһалаах: <= 0',
+ 'pfunc_expr_unknown_error' => 'Expression error (ошибка выражения): Биллибэт алҕас ($1)',
+ 'pfunc_expr_not_a_number' => '$1 иһигэр: эппиэтэ чыыһыла буолбатах',
+ 'pfunc_string_too_long' => 'Алҕас: Устуруока уһуна $1 бэлиэннэн хааччахха баппат',
+);
+
+/** Sicilian (Sicilianu)
+ * @author Melos
+ * @author Santu
+ */
+$messages['scn'] = array(
+ 'pfunc_desc' => 'Ci junci ô parser na sèrii di funzioni lòggichi',
+ 'pfunc_time_error' => 'Sbàgghiu: uràriu nun vàlidu',
+ 'pfunc_time_too_long' => 'Sbàgghiu: troppi chiamati a #time',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Sbàgghiu nti la sprissioni: lu stack finìu',
+ 'pfunc_expr_unexpected_number' => 'Sbàgghiu nti la sprissioni: nùmmiru non privistu',
+ 'pfunc_expr_preg_match_failure' => "Sbàgghiu nti la sprissioni: sbàgghiu non privistu 'n preg_match",
+ 'pfunc_expr_unrecognised_word' => 'Sbàgghiu nti la sprissioni: palora "$1" non canusciuta',
+ 'pfunc_expr_unexpected_operator' => 'Sbàgghiu nti la sprissioni: upiraturi $1 non privistu',
+ 'pfunc_expr_missing_operand' => 'Sbàgghiu nti la sprissioni: upirandu mancanti pi $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Sbàgghiu nti la sprissioni: parèntisi chiusa non aspittata',
+ 'pfunc_expr_unrecognised_punctuation' => 'Sbàgghiu nti la sprissioni: caràttiri di puntiggiatura "$1" non canusciutu',
+ 'pfunc_expr_unclosed_bracket' => 'Sbàgghiu nti la sprissioni: parèntisi non chiuruta',
+ 'pfunc_expr_division_by_zero' => 'Divisioni pi zeru',
+ 'pfunc_expr_invalid_argument' => 'Argumentu non vàlidu pi $1: < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argumentu non vàlidu pi ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Sbàgghiu nti la sprissioni: sbàgghiu scanusciutu ($1)',
+ 'pfunc_expr_not_a_number' => 'Nti $1: lu risurtatu nun è nu nùmmiru',
+ 'pfunc_string_too_long' => 'Erruri: la stringa supira lu limiti di $1 carattiri',
+);
+
+/** Sinhala (සිංහල)
+ * @author Budhajeewa
+ * @author නන්දිමිතුරු
+ */
+$messages['si'] = array(
+ 'pfunc_desc' => 'තාර්කීක ශ්‍රිතයන් උපයෝගී කරගනිමින් ව්‍යාකරණ විග්‍රහකය වර්ධනය කරන්න',
+ 'pfunc_time_error' => 'දෝෂය: අනීතික වේලාව',
+ 'pfunc_time_too_long' => 'දෝෂය: වේලා ඇමතුම් # පමණට වැඩිය',
+ 'pfunc_rel2abs_invalid_depth' => 'දෝෂය: පෙතෙහි ගැඹුර අනීතිකයි: "$1" (මූල මංසලට ඉහළ මංසලක් ප්‍රවේශනයට උත්සාහ දැරිණි)',
+ 'pfunc_expr_stack_exhausted' => 'ප්‍රකාශන දෝෂය: ඇසිරුම හිස්ව පැවතිණි',
+ 'pfunc_expr_unexpected_number' => 'ප්‍රකාශන දෝෂය: අනපේක්‍ෂිත සංඛ්‍යාව',
+ 'pfunc_expr_preg_match_failure' => 'ප්‍රකාශන දෝෂය: බලාපොරොත්තු නොවූ preg_match ඇණහිටුම',
+ 'pfunc_expr_unrecognised_word' => 'ප්‍රකාශන දෝෂය: හඳුනානොගත් වදන "$1"',
+ 'pfunc_expr_unexpected_operator' => 'ප්‍රකාශන දෝෂය: අනපේක්‍ෂිත $1 මෙහෙයුම්කාරකය',
+ 'pfunc_expr_missing_operand' => 'ප්‍රකාශන දෝෂය: $1 සඳහා අස්ථානගත ප්‍රවර්ත්‍යය',
+ 'pfunc_expr_unexpected_closing_bracket' => 'ප්‍රකාශන දෝෂය: අනපේක්‍ෂිත වැසීම් වරහන',
+ 'pfunc_expr_unrecognised_punctuation' => 'ප්‍රකාශන දෝෂය: හඳුනානොගත් විරාම අක්ෂරය "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'ප්‍රකාශන දෝෂය: නොවැසූ වරහන',
+ 'pfunc_expr_division_by_zero' => 'ශුන්‍යයෙන් බෙදීම',
+ 'pfunc_expr_invalid_argument' => '$1: < -1 හෝ > 1 සඳහා අනීතික විස්තාරකය',
+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 සඳහා අනීතික විස්තාරකය',
+ 'pfunc_expr_unknown_error' => 'ප්‍රකාශන දෝෂය: අඥාත දෝෂය ($1)',
+ 'pfunc_expr_not_a_number' => '$1: හි ප්‍රතිඵලය සංඛ්‍යාවක් නොවේ',
+ 'pfunc_string_too_long' => 'Error: වදන් පෙළ අකුරු $1 සීමාව ඉක්මවයි',
+);
+
+/** Slovak (Slovenčina)
+ * @author Helix84
+ */
+$messages['sk'] = array(
+ 'pfunc_desc' => 'Rozšírenie syntaktického analyzátora o logické funkcie',
+ 'pfunc_time_error' => 'Chyba: Neplatný čas',
+ 'pfunc_time_too_long' => 'Chyba: príliš veľa volaní #time',
+ 'pfunc_rel2abs_invalid_depth' => 'Chyba: Neplatná hĺbka v ceste: „$1“ (pokus o prístup k uzlu nad koreňovým uzlom)',
+ 'pfunc_expr_stack_exhausted' => 'Chyba výrazu: Zásobník vyčerpaný',
+ 'pfunc_expr_unexpected_number' => 'Chyba výrazu: Neočakávané číslo',
+ 'pfunc_expr_preg_match_failure' => 'Chyba výrazu: Neočakávané zlyhanie funkcie preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Chyba výrazu: Nerozpoznané slovo „$1“',
+ 'pfunc_expr_unexpected_operator' => 'Chyba výrazu: Neočakávaný operátor $1',
+ 'pfunc_expr_missing_operand' => 'Chyba výrazu: Chýbajúci operand pre $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Chyba výrazu: Neočakávaná zatvárajúca hranatá zátvorka',
+ 'pfunc_expr_unrecognised_punctuation' => 'Chyba výrazu: Nerozpoznané diakritické znamienko „$1“',
+ 'pfunc_expr_unclosed_bracket' => 'Chyba výrazu: Neuzavretá hranatá zátvorka',
+ 'pfunc_expr_division_by_zero' => 'Chyba výrazu: Delenie nulou',
+ 'pfunc_expr_invalid_argument' => 'Neplatný argument pre $1: < -1 alebo > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Neplatný argument pre ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Chyba výrazu: Neznáma chyba ($1)',
+ 'pfunc_expr_not_a_number' => 'V $1: výsledok nie je číslo',
+ 'pfunc_string_too_long' => 'Chyba: Reťazec prekračuje limit $1 znakov',
+);
+
+/** Slovenian (Slovenščina)
+ * @author Dbc334
+ */
+$messages['sl'] = array(
+ 'pfunc_desc' => 'Izboljša razčlenjevalnik z logičnimi funkcijami',
+ 'pfunc_time_error' => 'Napaka: neveljaven čas',
+ 'pfunc_time_too_long' => 'Napaka: preveč klicev #time',
+ 'pfunc_time_too_big' => 'Napaka: #time podpira samo leta do 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Napaka: Neveljavna globina poti: »$1« (poskus dostopanja do vozlišča višjega od korenskega vozlišča)',
+ 'pfunc_expr_stack_exhausted' => 'Napaka v izrazu: Sklad je izčrpan',
+ 'pfunc_expr_unexpected_number' => 'Napaka v izrazu: Nepričakovani število',
+ 'pfunc_expr_preg_match_failure' => 'Napaka v izrazu: Nepričakovan neuspeh preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Napaka v izrazu: Neprepoznana beseda »$1«',
+ 'pfunc_expr_unexpected_operator' => 'Napaka v izrazu: Nepričakovan operator $1',
+ 'pfunc_expr_missing_operand' => 'Napaka v izrazu: Manjkajoč operand za $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Napaka v izrazu: Nepričakovan zaključni oklepaj',
+ 'pfunc_expr_unrecognised_punctuation' => 'Napaka v izrazu: Nepričakovan znak za ločilo »$1«',
+ 'pfunc_expr_unclosed_bracket' => 'Napaka v izrazu: Nezaprti oklepaj',
+ 'pfunc_expr_division_by_zero' => 'Deljenje z ničlo',
+ 'pfunc_expr_invalid_argument' => 'Napačen argument za $1: < -1 ali > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Napačen argument za ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Napaka v izrazu: Neznana napaka ($1)',
+ 'pfunc_expr_not_a_number' => 'V $1: rezultat ni število',
+ 'pfunc_string_too_long' => 'Napaka: Niz presega omejitev $1 {{PLURAL:$1|znaka|znakov}}',
+ 'pfunc-convert-dimensionmismatch' => 'Napaka: Ne morem pretvoriti med enotama »$1« in »$2«.',
+ 'pfunc-convert-unknownunit' => 'Napaka: Neznana enota »$1«.',
+ 'pfunc-convert-unknowndimension' => 'Napaka: Neznana razsežnost »$1«.',
+ 'pfunc-convert-invalidcompoundunit' => 'Napaka: Neveljavna sestavljena enota »$1«.',
+ 'pfunc-convert-nounit' => 'Napaka: Izvirna enota ni podana.',
+ 'pfunc-convert-doublecompoundunit' => 'Napaka: Ne morem razčleniti dvojne sestavljene enote, kot je »$1«.',
+ 'pfunc-convert-dimension-length' => 'dolžina',
+ 'pfunc-convert-dimension-area' => 'ploščina',
+ 'pfunc-convert-dimension-volume' => 'prostornina',
+ 'pfunc-convert-dimension-time' => 'čas',
+ 'pfunc-convert-dimension-timesquared' => 'čas<sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'masa',
+ 'pfunc-convert-dimension-speed' => 'hitrost',
+ 'pfunc-convert-dimension-temperature' => 'temperatura',
+ 'pfunc-convert-dimension-acceleration' => 'pospešek',
+ 'pfunc-convert-dimension-force' => 'sila',
+ 'pfunc-convert-dimension-torque' => 'navor',
+ 'pfunc-convert-dimension-energy' => 'energija',
+ 'pfunc-convert-dimension-power' => 'moč',
+ 'pfunc-convert-dimension-pressure' => 'tlak',
+ 'pfunc-convert-dimension-density' => 'gostota',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'pozitivna učinkovitost goriva',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'negativna učinkovitost goriva',
+ 'pfunc-convert-prefix-yotta' => 'jota',
+ 'pfunc-convert-prefix-zetta' => 'zeta',
+ 'pfunc-convert-prefix-exa' => 'eksa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hekto',
+ 'pfunc-convert-prefix-deca' => 'deka',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'mili',
+ 'pfunc-convert-prefix-micro' => 'mikro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'piko',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'ato',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'jokto',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|meter|metra|metri|metrov}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|angstrem|angstrema|angstremi|angstremov}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|milja|milji|milje|milj}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|furlong|furlonga|furlongi|furlongov}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|veriga|verigi|verige|verig}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|palica|palici|palice|palic}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|seženj|sežnja|sežnji|sežnjev}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|jard|jarda|jardi|jardov}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|čevelj|čevlja|čevlji|čeljev}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|dlan|dlani}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|palec|palca|palci|palcev}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|navtična milja|navtični milji|navtične milje|navtičnih milj}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|navtična milja|navtični milji|navtične milje|navtičnih milj}} (britanska, pred 1970)',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1|navtična milja|navtični milji|navtične milje|navtičnih milj}} (ZDA, pred 1954)',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|parsek|parseka|parseki|persekov}}',
+ 'pfunc-convert-unit-length-lightyear' => '$2 {{PLURAL:$1|svetlobno leto|svetlobni leti|svetlobna leta|svetlobnih let}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|astronomska enota|astronomski enoti|astronomske enote|astronomskih enot}}',
+ 'pfunc-convert-unit-length-metre-abbr' => 'm',
+ 'pfunc-convert-unit-length-angstrom-abbr' => 'Å',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'furlong',
+ 'pfunc-convert-unit-length-chain-abbr' => 'veriga',
+ 'pfunc-convert-unit-length-rod-abbr' => 'rd',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'seženj',
+ 'pfunc-convert-unit-length-yard-abbr' => 'yd',
+ 'pfunc-convert-unit-length-foot-abbr' => 'ft',
+ 'pfunc-convert-unit-length-hand-abbr' => 'h',
+ 'pfunc-convert-unit-length-inch-abbr' => 'in',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'nmi',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'nmi (Brit)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'nmi (ZDA, pred 1954)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2 pc',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2 sv. l.',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'a.e.',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|kvadratni kilometer|kvadratna kilometra|kvadratni kilometri|kvadratnih kilometrov}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|kvadratni meter|kvadratna metra|kvadratni metri|kvadratnih metrov}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|kvadratni centimeter|kvadratna centimetra|kvadratni centimetri|kvadratnih centimetrov}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|kvadratni milimeter|kvadratna milimetra|kvadratni milimetri|kvadratnih milimetrov}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hektar|hektara|hektare|hektarov}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|kvadratna milja|kvadratni milji|kvadratne milje|kvadratnih milj}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|aker|akra|akri|akrov}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|kvadratni jard|kvadratna jarda|kvadratni jardi|kvadratnih jardov}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|kvadratni čevelj|kvadratna čevlja|kvadratni čevlji|kvadratnih čevljev}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|kvadratni palec|kvadratna palca|kvadratni palci|kvadratnih palcev}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|kvadratna navtična milja|kvadratni navtični milji|kvadratne navtične milje|kvadratnih navtičnih milj}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|dunam|dunama|dunami|dunamov}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|tsubo|tsuba|tsubi|tsubov}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'kv. mi',
+ 'pfunc-convert-unit-area-acre-abbr' => 'aker',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'kv. yd',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'kv. ft',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'kv. in',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'kv nmi',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'dunam',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'tsubo',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|sekunda|sekundi|sekunde|sekund}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|leto|leti|leta|let}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|dan|dneva|dnevi|dni}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|ura|uri|ure|ur}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minuta|minuti|minute|minut}}',
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-year-abbr' => 'leto',
+ 'pfunc-convert-unit-time-day-abbr' => 'dan',
+ 'pfunc-convert-unit-time-hour-abbr' => 'ura',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|kubični meter|kubična metra|kubični metri|kubičnih metrov}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|kubični centimeter|kubična centimetra|kubični centimetri|kubičnih centimetrov}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|kubični milimeter|kubična milimetra|kubični milimetri|kubičnih milimetrov}}',
+ 'pfunc-convert-unit-volume-kilolitre' => 'kilo{{PLURAL:$1|liter|litra|litri|litrov}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|liter|litra|litri|litrov}}',
+ 'pfunc-convert-unit-volume-centilitre' => 'centi{{PLURAL:$1|liter|litra|litri|litrov}}',
+ 'pfunc-convert-unit-volume-millilitre' => 'mili{{PLURAL:$1|liter|litra|litri|litrov}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|kubični jard|kubična jarda|kubični jardi|kubičnih jardov}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|kubični čevelj|kubična čevlja|kubični čevlji|kubičnih čevljev}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|kubični palec|kubična palca|kubični palci|kubičnih palcev}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|sod|soda|sodi|sodov}}',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1|bušel|bušla|bušli|bušlov}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|galona|galoni|galone|galon}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|kvart|kvarta|kvarti|kvartov}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|pint|pinta|pinti|pintov}}',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1|tekočinska unča|tekočinski unči|tekočinske unče|tekočinskih unč}}',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1|ameriški sod|ameriška soda|ameriški sodi|ameriških sodov}}',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1|sod|soda|sodi|sodov}}',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1|sod|soda|sodi|sodov}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|ameriška galona|ameriški galoni|ameriške galone|ameriških galon}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|ameriški kvart|ameriška kvarta|ameriški kvarti|ameriških kvartov}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|ameriški pint|ameriška pinta|ameriški pinti|ameriških pintov}}',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1|ameriška tekočinska unča|ameriški tekočinski unči|ameriške tekočinske unče|ameriških tekočinskih unč}}',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1|ameriški suhi sod|ameriška suha soda|ameriški suhi sodi|ameriških suhih sodov}}',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1|ameriški bušel|ameriška bušla|ameriški bušli|ameriških bušlov}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|ameriška suha galona|ameriški suhi galoni|ameriške suhe galone|ameriških suhih galon}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|ameriški suhi kvart|ameriška suha kvarta|ameriški suhi kvarti|ameriških suhih kvartov}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|ameriški suhi pint|ameriška suha pinta|ameriški suhi pinti|ameriških suhih pintov}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2 l',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'kub. yd',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'kub. ft',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'kub. in',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'bsh',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'gal',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'qt',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'pt',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'fl oz',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'am. bbl',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'am. gal',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'am. qt',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'am. pt',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'am. fl oz',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'am. bbl',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'am. bsh',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'am. suha gal',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'am. suhi qt',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'am. suhi pt',
+ 'pfunc-convert-unit-speed-mile-hour' => 'milje na uro',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'mph',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|paskal|paskala|paskali|paskalov}}',
+ 'pfunc-convert-unit-pressure-bar' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar' => 'decibar',
+ 'pfunc-convert-unit-pressure-millibar' => 'milibar',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'kilobarye',
+ 'pfunc-convert-unit-pressure-barye' => 'barye',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|atmosfera|atmosferi|atmosfere|atmosfer}}',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1|torr|torra|torri|torrov}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|milimeter|milimetra|milimetri|milimetrov}} živega srebra',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|palec|palca|palci|palcev}} živega srebra',
+ 'pfunc-convert-unit-pressure-psi' => '{{PLURAL:$1|funt|funta|funti|funtov}} na kvadratni palec',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => 'Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'dbar',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'mbar',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'kBa',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ba',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'Torr',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'mmHg',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'inHg',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Albanian (Shqip)
+ * @author Olsi
+ * @author Vinie007
+ */
+$messages['sq'] = array(
+ 'pfunc_desc' => 'Enhance parser me funksione logjike',
+ 'pfunc_time_error' => 'Gabim: kohë e pavlefshme',
+ 'pfunc_time_too_long' => 'Gabim: shumë #thirrje kohe',
+ 'pfunc_time_too_big' => 'Gabim: # kohë mbështet vetëm vjet deri në 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Gabim: thellësi e pavlefshme në rrugë: "$1" (u përpoq për të hyrë në një nyje mbi nyjen e rrënjës)',
+ 'pfunc_expr_stack_exhausted' => 'Gabim shprehjeje: Stack exhausted',
+ 'pfunc_expr_unexpected_number' => 'Gabim shprehjeje: Numër i papritur',
+ 'pfunc_expr_preg_match_failure' => 'Gabim shprehjeje: Dështim i papritur i preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Gabim shprehjeje: Fjalë e panjohur: $1',
+ 'pfunc_expr_unexpected_operator' => 'Gabim shprehjeje: Operator i papritur $1',
+ 'pfunc_expr_missing_operand' => 'Gabim shprehjej: Operim i munfuar për $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Gabim shprehjeje: Mbyllje e papritur kllapash',
+ 'pfunc_expr_unrecognised_punctuation' => 'Gabim shprehjeje: Karakater pikësimi i panjohur "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Gabim shprehjeje: Mosmbyllje kllapash',
+ 'pfunc_expr_division_by_zero' => 'Pjesëtim me zero',
+ 'pfunc_expr_invalid_argument' => 'Argument i pavlefshëm për $1: < -1 ose > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argument i pavlefshëm për ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Gabim shprehjeje: Gabim i panjohur ($1)',
+ 'pfunc_expr_not_a_number' => 'Në $1: rezultati nuk është një numër',
+ 'pfunc_string_too_long' => 'Gabim: string kalon limit $1 karakter',
+);
+
+/** Serbian Cyrillic ekavian (‪Српски (ћирилица)‬)
+ * @author Millosh
+ * @author Rancher
+ * @author Verlor
+ */
+$messages['sr-ec'] = array(
+ 'pfunc_desc' => 'Проширује рашчлањивач с логичким функцијама',
+ 'pfunc_time_error' => 'Грешка: лоше време',
+ 'pfunc_time_too_long' => 'Грешка: превише #time позива',
+ 'pfunc_expr_stack_exhausted' => 'Грешка у изразу: стек напуњен',
+ 'pfunc_expr_unexpected_number' => 'Грешка у изразу: неочекивани број',
+ 'pfunc_expr_preg_match_failure' => 'Грешка у изразу: Неочекивана preg_match грешка',
+ 'pfunc_expr_unrecognised_word' => 'Грешка у изразу: непозната реч "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Грешка у изразу: непознати оператор "$1"',
+ 'pfunc_expr_missing_operand' => 'Грешка у изразу: недостаје операнд за $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Грешка у изразу: Неочекивано затварање средње заграде.',
+ 'pfunc_expr_unrecognised_punctuation' => 'Грешка у изразу: Непознати интерпункцијски карактер "$1".',
+ 'pfunc_expr_unclosed_bracket' => 'Грешка у изразу: Незатворена средња заграда.',
+ 'pfunc_expr_division_by_zero' => 'Дељење са нулом.',
+ 'pfunc_expr_invalid_argument' => 'Лош аргумент: $1 је < -1 или > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Лош аргумент: ln <= 0',
+ 'pfunc_expr_unknown_error' => 'Грешка у изразу: Непозната грешка ($1)',
+ 'pfunc_expr_not_a_number' => 'Резултат у $1 није број.',
+ 'pfunc_string_too_long' => 'Грешка: реч прекорачује $1 слова, што је постављено ограничење',
+);
+
+/** Serbian Latin ekavian (‪Srpski (latinica)‬)
+ * @author Michaello
+ */
+$messages['sr-el'] = array(
+ 'pfunc_desc' => 'obogati parser logičkim funkcijama',
+ 'pfunc_time_error' => 'Greška: loše vreme',
+ 'pfunc_time_too_long' => 'Greška: previše #time poziva',
+ 'pfunc_expr_stack_exhausted' => 'Greška u izrazu: stek napunjen',
+ 'pfunc_expr_unexpected_number' => 'Greška u izrazu: neočekivani broj',
+ 'pfunc_expr_preg_match_failure' => 'Greška u izrazu: Neočekivana preg_match greška',
+ 'pfunc_expr_unrecognised_word' => 'Greška u izrazu: nepoznata reč "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Greška u izrazu: nepoznati operator "$1"',
+ 'pfunc_expr_missing_operand' => 'Greška u izrazu: nedostaje operand za $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Greška u izrazu: Neočekivano zatvaranje srednje zagrade.',
+ 'pfunc_expr_unrecognised_punctuation' => 'Greška u izrazu: Nepoznati interpunkcijski karakter "$1".',
+ 'pfunc_expr_unclosed_bracket' => 'Greška u izrazu: Nezatvorena srednja zagrada.',
+ 'pfunc_expr_division_by_zero' => 'Deljenje sa nulom.',
+ 'pfunc_expr_invalid_argument' => 'Loš argument: $1 je < -1 ili > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Loš argument: ln <= 0',
+ 'pfunc_expr_unknown_error' => 'Greška u izrazu: Nepoznata greška ($1)',
+ 'pfunc_expr_not_a_number' => 'Rezultat u $1 nije broj.',
+ 'pfunc_string_too_long' => 'Greška: reč prekoračuje $1 slova, što je postavljeno ograničenje',
+);
+
+/** Seeltersk (Seeltersk)
+ * @author Pyt
+ */
+$messages['stq'] = array(
+ 'pfunc_desc' => 'Ärwiedert dän Parser uum logiske Funktione',
+ 'pfunc_time_error' => 'Failer: uungultige Tiedangoawe',
+ 'pfunc_time_too_long' => 'Failer: tou fuul #time-Aproupe',
+ 'pfunc_rel2abs_invalid_depth' => 'Failer: uungultige Djüpte in Paad: „$1“ (Fersäik, ap n Knättepunkt buppe dän Haudknättepunkt toutougriepen)',
+ 'pfunc_expr_stack_exhausted' => 'Expression-Failer: Stack-Uurloop',
+ 'pfunc_expr_unexpected_number' => 'Expression-Failer: Nit ferwachtede Taal',
+ 'pfunc_expr_preg_match_failure' => 'Expression-Failer: Uunferwachtede „preg_match“-Failfunktion',
+ 'pfunc_expr_unrecognised_word' => 'Expression-Failer: Nit wierkoand Woud „$1“',
+ 'pfunc_expr_unexpected_operator' => 'Expression-Failer: Uunferwachteden Operator: <strong><tt>$1</tt></strong>',
+ 'pfunc_expr_missing_operand' => 'Expression-Failer: Failenden Operand foar <strong><tt>$1</tt></strong>',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Expression-Failer: Uunferwachte sluutende kaantige Klammere',
+ 'pfunc_expr_unrecognised_punctuation' => 'Expression-Failer: Nit wierkoand Satsteeken „$1“',
+ 'pfunc_expr_unclosed_bracket' => 'Expression-Failer: Nit sleetene kaantige Klammer',
+ 'pfunc_expr_division_by_zero' => 'Expression-Failer: Division truch Null',
+ 'pfunc_expr_invalid_argument' => 'Uungultich Argument foar $1: < -1 of > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Uungultich Argument foar ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Expression-Failer: Uunbekoanden Failer ($1)',
+ 'pfunc_expr_not_a_number' => 'Expression-Failer: In $1: Resultoat is neen Taal',
+ 'pfunc_string_too_long' => 'Failer: Teekenkätte is laanger as dät Teekenlimit fon $1',
+);
+
+/** Sundanese (Basa Sunda)
+ * @author Irwangatot
+ * @author Kandar
+ */
+$messages['su'] = array(
+ 'pfunc_desc' => 'Ngembangkeun parser kalawan fungsi logis',
+ 'pfunc_time_error' => 'Éror: titimangsa teu valid',
+ 'pfunc_expr_division_by_zero' => 'Pambagi ku nol',
+);
+
+/** Swedish (Svenska)
+ * @author Ainali
+ * @author Lejonel
+ * @author M.M.S.
+ * @author Najami
+ */
+$messages['sv'] = array(
+ 'pfunc_desc' => 'Lägger till logiska funktioner i parsern',
+ 'pfunc_time_error' => 'Fel: ogiltig tid',
+ 'pfunc_time_too_long' => 'Fel: för många anrop av #time',
+ 'pfunc_time_too_big' => 'Fel: # tid stöder endast år fram till 9999',
+ 'pfunc_rel2abs_invalid_depth' => 'Fel: felaktig djup i sökväg: "$1" (försöker nå en nod ovanför rotnoden)',
+ 'pfunc_expr_stack_exhausted' => 'Fel i uttryck: Stackutrymmet tog slut',
+ 'pfunc_expr_unexpected_number' => 'Fel i uttryck: Oväntat tal',
+ 'pfunc_expr_preg_match_failure' => 'Fel i uttryck: Oväntad fel i preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Fel i uttryck: Okänt ord "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Fel i uttryck: Oväntad operator $1',
+ 'pfunc_expr_missing_operand' => 'Fel i uttryck: Operand saknas för $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Fel i uttryck: Oväntad avslutande parentes',
+ 'pfunc_expr_unrecognised_punctuation' => 'Fel i uttryck: Okänt interpunktionstecken "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Fel i uttryck: Oavslutad parentes',
+ 'pfunc_expr_division_by_zero' => 'Division med noll',
+ 'pfunc_expr_invalid_argument' => 'Ogiltigt argument för $1: < -1 eller > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Ogiltigt argument för ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Fel i uttryck: Okänt fel ($1)',
+ 'pfunc_expr_not_a_number' => 'I $1: resultatet är inte ett tal',
+ 'pfunc_string_too_long' => 'Fel: Strängen överskrider gränsen på $1 tecken',
+ 'pfunc-convert-dimensionmismatch' => 'Fel: Kan inte konvertera mellan enheterna "$1" och "$2".',
+ 'pfunc-convert-unknownunit' => 'Fel: Okänd enhet "$1".',
+ 'pfunc-convert-unknowndimension' => 'Fel: Okänd dimension "$1".',
+ 'pfunc-convert-dimension-length' => 'längd',
+ 'pfunc-convert-dimension-area' => 'area',
+ 'pfunc-convert-dimension-volume' => 'volym',
+ 'pfunc-convert-dimension-time' => 'tid',
+ 'pfunc-convert-dimension-timesquared' => 'tid <sup>2</sup>',
+ 'pfunc-convert-dimension-mass' => 'massa',
+ 'pfunc-convert-dimension-speed' => 'hastighet',
+ 'pfunc-convert-dimension-temperature' => 'temperatur',
+ 'pfunc-convert-dimension-acceleration' => 'acceleration',
+ 'pfunc-convert-dimension-force' => 'kraft',
+ 'pfunc-convert-dimension-torque' => 'vridmoment',
+ 'pfunc-convert-dimension-energy' => 'energi',
+ 'pfunc-convert-dimension-pressure' => 'tryck',
+ 'pfunc-convert-dimension-density' => 'densitet',
+ 'pfunc-convert-prefix-yotta' => 'yotta',
+ 'pfunc-convert-prefix-zetta' => 'zetta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'peta',
+ 'pfunc-convert-prefix-tera' => 'tera',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mega',
+ 'pfunc-convert-prefix-kilo' => 'kilo',
+ 'pfunc-convert-prefix-hecto' => 'hekto',
+ 'pfunc-convert-prefix-deca' => 'deka',
+ 'pfunc-convert-prefix-deci' => 'deci',
+ 'pfunc-convert-prefix-centi' => 'centi',
+ 'pfunc-convert-prefix-milli' => 'milli',
+ 'pfunc-convert-prefix-micro' => 'mikro',
+ 'pfunc-convert-prefix-nano' => 'nano',
+ 'pfunc-convert-prefix-pico' => 'piko',
+ 'pfunc-convert-prefix-femto' => 'femto',
+ 'pfunc-convert-prefix-atto' => 'atto',
+ 'pfunc-convert-prefix-zepto' => 'zepto',
+ 'pfunc-convert-prefix-yocto' => 'yokto',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1|$2meter|$2meter}}',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1|ångström|ångström}}',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1|engelsk mil|engelska mil}}',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1|furlong|furlonger}}',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1|chain|chains}}',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1|stång|stänger}}',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1|famn|famnar}}',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1|yard|yards}}',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1|fot|fot}}',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1|hand|händer}}',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1|tum|tum}}',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1|nautisk mil|nautiska mil}}',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1|nautisk mil (innan 1970, brittisk)|nautiska mil (innan 1970, brittisk)}}',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1|nautisk mil (innan 1954, USA)|nautiska mil (innan 1954, USA)}}',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1|$2parsec|$2parsec}}',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1|$2ljusår|$2ljusår}}',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1|astronomisk enhet|astronomiska enheter}}',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'furlong',
+ 'pfunc-convert-unit-length-chain-abbr' => 'chain',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'famn',
+ 'pfunc-convert-unit-length-yard-abbr' => 'yd',
+ 'pfunc-convert-unit-length-foot-abbr' => 'ft',
+ 'pfunc-convert-unit-length-hand-abbr' => 'h',
+ 'pfunc-convert-unit-length-inch-abbr' => 'in',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'nmi',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'nmi (Storbr.)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'nmi (innan 1954, USA)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2pc',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'AU',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1|kvadratkilometer|kvadratkilometer}}',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1|kvadratmeter|kvadratmeter}}',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1|kvadratcentimeter|kvadratcentimeter}}',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1|kvadratmillimeter|kvadratmillimeter}}',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1|hektar|hektar}}',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1|kvadratmil|kvadratmil}}',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1|tunnland|tunnland}}',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1|kvadratyard|kvadratyard}}',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1|kvadratfot|kvadratfötter}}',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1|kvadrattum|kvadrattum}}',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1|kvadratisk nautisk mil|kvadratiska nautiska mil}}',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1|dunam|dunam}}',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1|tsubo|tsubo}}',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm<sup>2</sup>',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm<sup>2</sup>',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'kv mil',
+ 'pfunc-convert-unit-area-acre-abbr' => 'tunnland',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'kv yd',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'kv ft',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'kv in',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'kv nmi',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'dunam',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'tsubo',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1|sekund|sekunder}}',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1|$2år|$2år}}',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1|dag|dagar}}',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1|timme|timmar}}',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1|minut|minuter}}',
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-day-abbr' => 'dag',
+ 'pfunc-convert-unit-time-hour-abbr' => 'tim',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1|kubikmeter|kubikmeter}}',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1|kubikcentimeter|kubikcentimeter}}',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1|kubikmillimeter|kubikmillimeter}}',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1|kiloliter|kiloliter}}',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1|liter|liter}}',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1|centiliter|centiliter}}',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1|milliliter|milliliter}}',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1|kubikyard|kubikyards}}',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1|kubikfot|kubikfötter}}',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1|kubiktum|kubiktum}}',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1|fat|fat}}',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1|gallon|gallons}}',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1|quart|quarts}}',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1|pint|pints}}',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1|gallon (USA, våt)|gallon (USA, våt)}}',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1|quart (USA, våt)|quart (USA, våt)}}',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1|pint (USA, våt)|pint (USA, våt)}}',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1|gallon (USA, torr)|gallon (USA, torr)}}',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1|quart (USA, torr)|quart (USA, torr)}}',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1|pint (USA, torr)|pint (USA, torr)}}',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm<sup>3</sup>',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2l',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'gal',
+ 'pfunc-convert-unit-speed-mile-hour' => 'miles per timme',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'mph',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1|$2pascal|$2pascal}}',
+ 'pfunc-convert-unit-pressure-bar' => 'bar',
+ 'pfunc-convert-unit-pressure-millibar' => 'millibar',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1|atmosfär|atmosfärer}}',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1|torr|torr}}',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1|millimeter kvicksilver|millimeter kvicksilver}}',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1|tum kvicksilver|tum kvicksilver}}',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'mbar',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'mmHg',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Telugu (తెలుగు)
+ * @author Mpradeep
+ * @author Veeven
+ */
+$messages['te'] = array(
+ 'pfunc_time_error' => 'లోపం: సమయం సరిగ్గా లేదు',
+ 'pfunc_time_too_long' => 'లోపం: #timeను చాలా సార్లు ఉపయోగించారు',
+ 'pfunc_rel2abs_invalid_depth' => 'లోపం: పాత్ యొక్క డెప్తు సరిగ్గాలేదు: "$1" (రూట్ నోడు కంటే పైన ఉన్న నోడు ఉపయోగించటానికి ప్రయత్నం జరిగింది)',
+ 'pfunc_expr_stack_exhausted' => 'సమాసంలో(Expression) లోపం: స్టాకు మొత్తం అయిపోయింది',
+ 'pfunc_expr_unexpected_number' => 'సమాసంలో(Expression) లోపం: ఊహించని సంఖ్య వచ్చింది',
+ 'pfunc_expr_preg_match_failure' => 'సమాసంలో(Expression) లోపం: preg_matchలో ఊహించని విఫలం',
+ 'pfunc_expr_unrecognised_word' => 'సమాసంలో(Expression) లోపం: "$1" అనే పదాన్ని గుర్తుపట్టలేకపోతున్నాను',
+ 'pfunc_expr_unexpected_operator' => 'సమాసంలో(Expression) లోపం: $1 పరికర్తను(operator) ఊహించలేదు',
+ 'pfunc_expr_missing_operand' => 'సమాసంలో(Expression) లోపం: $1కు ఒక ఆపరాండును ఇవ్వలేదు',
+ 'pfunc_expr_unexpected_closing_bracket' => 'సమాసంలో(Expression) లోపం: ఊహించని బ్రాకెట్టు ముగింపు',
+ 'pfunc_expr_unrecognised_punctuation' => 'సమాసంలో(Expression) లోపం: "$1" అనే విరామ చిహ్నాన్ని గుర్తించలేకపోతున్నాను',
+ 'pfunc_expr_unclosed_bracket' => 'సమాసంలో(Expression) లోపం: బ్రాకెట్టును మూయలేదు',
+ 'pfunc_expr_division_by_zero' => 'సున్నాతో భాగించారు',
+ 'pfunc_expr_unknown_error' => 'సమాసంలో(Expression) లోపం: తెలియని లోపం ($1)',
+ 'pfunc_expr_not_a_number' => '$1లో: వచ్చిన ఫలితం సంఖ్య కాదు',
+);
+
+/** Tajik (Cyrillic) (Тоҷикӣ (Cyrillic))
+ * @author Ibrahim
+ */
+$messages['tg-cyrl'] = array(
+ 'pfunc_desc' => 'Ба таҷзеҳкунанда, дастурҳои мантиқӣ меафзояд',
+ 'pfunc_time_error' => 'Хато: замони ғайримиҷоз',
+ 'pfunc_time_too_long' => 'Хато: #time фарохонии беш аз ҳад',
+ 'pfunc_rel2abs_invalid_depth' => 'Хато: Чуқурии ғайримиҷоз дар нишонӣ: "$1" (талош барои дастраси ба як нишонӣ болотар аз нишонии реша)',
+ 'pfunc_expr_stack_exhausted' => 'Хатои ибора: Пушта аз даст рафтааст',
+ 'pfunc_expr_unexpected_number' => 'Хатои ибора: Адади ғайримунтазир',
+ 'pfunc_expr_preg_match_failure' => 'Хатои ибора: Хатои ғайримунтазири preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Хатои ибора: Калимаи ношинохта "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Хатои ибора: Амалгари ғайримунтазири $1',
+ 'pfunc_expr_missing_operand' => 'Хатои ибора: Амалгари гумшуда барои $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Хатои ибора: Қафси бастаи номунтазир',
+ 'pfunc_expr_unrecognised_punctuation' => 'Хатои ибора: Аломати нуқтагузории шинохтанашуда "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Хатои ибора: Қафси бастанашуда',
+ 'pfunc_expr_division_by_zero' => 'Тақсим бар сифр',
+ 'pfunc_expr_unknown_error' => 'Хатои ибора: Хатои ношинос ($1)',
+ 'pfunc_expr_not_a_number' => 'Дар $1: натиҷа адад нест',
+);
+
+/** Tajik (Latin) (Тоҷикӣ (Latin))
+ * @author Liangent
+ */
+$messages['tg-latn'] = array(
+ 'pfunc_desc' => 'Ba taçzehkunanda, dasturhoi mantiqī meafzojad',
+ 'pfunc_time_error' => 'Xato: zamoni ƣajrimiçoz',
+ 'pfunc_time_too_long' => 'Xato: #time faroxoniji beş az had',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Xatoi ibora: Puşta az dast raftaast',
+ 'pfunc_expr_unexpected_number' => 'Xatoi ibora: Adadi ƣajrimuntazir',
+ 'pfunc_expr_preg_match_failure' => 'Xatoi ibora: Xatoi ƣajrimuntaziri preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Xatoi ibora: Kalimai noşinoxta "$1"',
+ 'pfunc_expr_unexpected_operator' => 'Xatoi ibora: Amalgari ƣajrimuntaziri $1',
+ 'pfunc_expr_missing_operand' => 'Xatoi ibora: Amalgari gumşuda baroi $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Xatoi ibora: Qafsi bastai nomuntazir',
+ 'pfunc_expr_unrecognised_punctuation' => 'Xatoi ibora: Alomati nuqtaguzoriji şinoxtanaşuda "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Xatoi ibora: Qafsi bastanaşuda',
+ 'pfunc_expr_division_by_zero' => 'Taqsim bar sifr',
+ 'pfunc_expr_unknown_error' => 'Xatoi ibora: Xatoi noşinos ($1)',
+ 'pfunc_expr_not_a_number' => 'Dar $1: natiça adad nest',
+);
+
+/** Thai (ไทย)
+ * @author Ans
+ */
+$messages['th'] = array(
+ 'pfunc_time_error' => 'เกิดข้อผิดพลาด: ค่าเวลาไม่ถูกต้อง',
+ 'pfunc_time_too_long' => 'เกิดข้อผิดพลาด: มีการเรียกใช้ #time มากเกินไป',
+ 'pfunc_rel2abs_invalid_depth' => 'เกิดข้อผิดพลาด: path depth ไม่ถูกต้อง: "$1" (เป็นการพยายามที่จะเข้าถึงตำแหน่งที่อยู่เหนือตำแหน่งราก)',
+ 'pfunc_expr_stack_exhausted' => 'สูตรเกิดข้อผิดพลาด: มี stack ไม่พอในการคำนวณสูตร',
+ 'pfunc_expr_unexpected_number' => 'สูตรไม่ถูกต้อง: ค่าตัวเลขอยู่ผิดที่',
+ 'pfunc_expr_preg_match_failure' => 'สูตรเกิดข้อผิดพลาด: เกิดความล้มเหลวในการสั่ง preg_match โดยไม่ทราบสาเหตุ',
+ 'pfunc_expr_unrecognised_word' => 'สูตรไม่ถูกต้อง: "$1" เป็นคำที่ไม่รู้จัก',
+ 'pfunc_expr_unexpected_operator' => 'สูตรไม่ถูกต้อง: $1 อยู่ผิดที่',
+ 'pfunc_expr_missing_operand' => 'สูตรไม่ถูกต้อง: ได้รับค่าไม่ครบในการคำนวณ $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'สูตรไม่ถูกต้อง: ปิดวงเล็บเกิน หรือ ปิดวงเล็บผิดที่',
+ 'pfunc_expr_unrecognised_punctuation' => 'สูตรไม่ถูกต้อง: "$1" เป็นเครื่องหมายหรือตัวอักษรที่ไม่รู้จัก',
+ 'pfunc_expr_unclosed_bracket' => 'สูตรไม่ถูกต้อง: ไม่ได้ปิดวงเล็บ',
+ 'pfunc_expr_division_by_zero' => 'ตัวหารเป็นศูนย์',
+ 'pfunc_expr_invalid_argument' => 'ค่าตัวแปรไม่ถูกต้อง: $1 ไม่สามารถรับค่าที่น้อยกว่า -1 หรือ มากกว่า 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ค่าตัวแปรไม่ถูกต้อง: ln ไม่สามารถรับค่าที่น้อยกว่าหรือเท่ากับศูนย์',
+ 'pfunc_expr_unknown_error' => 'สูตรไม่ถูกต้อง: เกิดความผิดพลาดในสูตรโดยไม่ทราบสาเหตุ ($1)',
+ 'pfunc_expr_not_a_number' => '$1: ผลลัพธ์ไม่สามารถแทนด้วยจำนวน (NAN or not a number)',
+);
+
+/** Turkmen (Türkmençe)
+ * @author Hanberke
+ */
+$messages['tk'] = array(
+ 'pfunc_desc' => 'Parseri logiki funksiýalar bilen güýçlendir',
+ 'pfunc_time_error' => 'Säwlik: nädogry wagt',
+ 'pfunc_time_too_long' => 'Säwlik: aşa köp #time çagyryşlary',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Aňlatma säwligi: Stek gutardy',
+ 'pfunc_expr_unexpected_number' => 'Aňlatma säwligi: Garaşylmaýan san',
+ 'pfunc_expr_preg_match_failure' => 'Aňlatma säwligi: Garaşylmaýan preg_match näsazlygy',
+ 'pfunc_expr_unrecognised_word' => 'Aňlatma säwligi: Bilinmeýän "$1" sözi',
+ 'pfunc_expr_unexpected_operator' => 'Aňlatma säwligi: Garaşylmaýan $1 operatory',
+ 'pfunc_expr_missing_operand' => 'Aňlatma säwligi: $1 üçin kem operand',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Aňlatma säwligi: Garaşylmaýan ýapyjy ýaý',
+ 'pfunc_expr_unrecognised_punctuation' => 'Aňlatma säwligi: Bilinmeýän punktuasiýa simwoly "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Aňlatma säwligi: Ýapylmadyk ýaý',
+ 'pfunc_expr_division_by_zero' => 'Nola bölmek',
+ 'pfunc_expr_invalid_argument' => '$1: < -1 ýa-da > 1 üçin nädogry argument',
+ 'pfunc_expr_invalid_argument_ln' => 'ln: <= 0 üçin nädogry argument',
+ 'pfunc_expr_unknown_error' => 'Aňlatma säwligi: Näbelli säwlik ($1)',
+ 'pfunc_expr_not_a_number' => '$1-de: netije san däl',
+ 'pfunc_string_too_long' => 'Säwlik: Setir $1 simwol çäginden geçýär',
+);
+
+/** Tagalog (Tagalog)
+ * @author AnakngAraw
+ */
+$messages['tl'] = array(
+ 'pfunc_desc' => 'Pagibayuhin ang katangian ng banghay na may mga tungkuling makatwiran (may lohika)',
+ 'pfunc_time_error' => 'Kamalian: hindi tanggap na oras',
+ 'pfunc_time_too_long' => 'Kamalian: napakaraming mga pagtawag sa #oras',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Kamalian sa pagpapahayag: Naubos na ang salansan',
+ 'pfunc_expr_unexpected_number' => 'Kamalian sa pagpapahayag: Hindi inaasahang bilang',
+ 'pfunc_expr_preg_match_failure' => "Kamalian sa pagpapahayag: Hindi inaasahang pagkabigo ng \"pagtutugma_ng_hibla\" (''preg_match'')",
+ 'pfunc_expr_unrecognised_word' => 'Kamalian sa pagpapahayag: Hindi nakikilalang salitang "$1"',
+ 'pfunc_expr_unexpected_operator' => "Kamalian sa pagpapahayag: Hindi inaasahang bantas na tagapagsagawa (''operator'') ng $1",
+ 'pfunc_expr_missing_operand' => "Kamalian sa pagpapahayag: Nawawalang halaga (''operand'') para sa $1",
+ 'pfunc_expr_unexpected_closing_bracket' => 'Kamalian sa pagpapahayag: Hindi inaasahang pangpagtatapos na panaklong na kasingay (braket)',
+ 'pfunc_expr_unrecognised_punctuation' => 'Kamalian sa pagpapahayag: Hindi nakikilalang panitik na pangpalabantasang "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'Kamalian sa pagpapahayag: Hindi naisarang panaklong na kasingay (braket)',
+ 'pfunc_expr_division_by_zero' => 'Paghahati sa pamamagitan ng wala (sero)',
+ 'pfunc_expr_invalid_argument' => 'Hindi tanggap na pangangatwiran (argumento) para sa $1: < -1 o > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Hindi tanggap na pangangatwiran (argumento) para sa ln: <= 0',
+ 'pfunc_expr_unknown_error' => 'Kamalian sa pagpapahayag: Hindi nalalamang kamalian ($1)',
+ 'pfunc_expr_not_a_number' => 'Sa $1: ang kinalabasan ay hindi isang bilang',
+ 'pfunc_string_too_long' => 'Kamalian: Lumampas ang bagting sa $1 hangganang panitik',
+);
+
+/** Turkish (Türkçe)
+ * @author Joseph
+ */
+$messages['tr'] = array(
+ 'pfunc_desc' => 'Derleyiciyi mantıksal fonksiyonlarla geliştir',
+ 'pfunc_time_error' => 'Hata: geçersiz zaman',
+ 'pfunc_time_too_long' => 'Hata: çok fazla #time çağrısı',
+ '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ı)',
+ 'pfunc_expr_stack_exhausted' => 'İfade hatası: Stack bitti',
+ 'pfunc_expr_unexpected_number' => 'İfade hatası: Beklenmeyen sayı',
+ 'pfunc_expr_preg_match_failure' => 'İfade hatası: Beklenmedik preg_match arızası',
+ 'pfunc_expr_unrecognised_word' => 'İfade hatası: Tanınmayan "$1" kelimesi',
+ 'pfunc_expr_unexpected_operator' => 'İfade hatası: Beklenmedik $1 operatörü',
+ 'pfunc_expr_missing_operand' => 'İfade hatası: $1 için eksik terim',
+ 'pfunc_expr_unexpected_closing_bracket' => 'İfade hatası: Beklenmedik kapa parantez',
+ 'pfunc_expr_unrecognised_punctuation' => 'İfade hatası: Tanınmayan noktalama karakteri "$1"',
+ 'pfunc_expr_unclosed_bracket' => 'İfade hatası: Kapanmamış parantez',
+ 'pfunc_expr_division_by_zero' => 'Sıfır ile bölme',
+ 'pfunc_expr_invalid_argument' => '$1 için geçersiz değişken: < -1 ya da > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln için geçersiz değişken: <= 0',
+ 'pfunc_expr_unknown_error' => 'İfade hatası: Bilinmeyen hata ($1)',
+ 'pfunc_expr_not_a_number' => "$1'de: sonuç bir sayı değil",
+ 'pfunc_string_too_long' => 'Hata: Dize $1 karakter sınırını geçiyor',
+);
+
+/** Ukrainian (Українська)
+ * @author AS
+ * @author Ahonc
+ */
+$messages['uk'] = array(
+ 'pfunc_desc' => 'Покращений синтаксичний аналізатор з логічними функціями',
+ 'pfunc_time_error' => 'Помилка: неправильний час',
+ 'pfunc_time_too_long' => 'Помилка: забагато викликів функції #time',
+ 'pfunc_rel2abs_invalid_depth' => 'Помилка: неправильна глибина шляху: «$1» (спроба доступу до вузла, що знаходиться вище, ніж кореневий)',
+ 'pfunc_expr_stack_exhausted' => 'Помилка виразу: стек переповнений',
+ 'pfunc_expr_unexpected_number' => 'Помилка виразу: неочікуване число',
+ 'pfunc_expr_preg_match_failure' => 'Помилка виразу: збій preg_match',
+ 'pfunc_expr_unrecognised_word' => 'Помилка виразу: незрозуміле слово «$1»',
+ 'pfunc_expr_unexpected_operator' => 'Помилка виразу: неочікуваний оператор $1',
+ 'pfunc_expr_missing_operand' => 'Помилка виразу: бракує операнда для $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Помилка виразу: неочікувана закрита дужка',
+ 'pfunc_expr_unrecognised_punctuation' => 'Помилка виразу: незрозумілий розділовий знак «$1»',
+ 'pfunc_expr_unclosed_bracket' => 'Помилка виразу: незакрита дужка',
+ 'pfunc_expr_division_by_zero' => 'Ділення на нуль',
+ 'pfunc_expr_invalid_argument' => 'Неправильний аргумент для $1: < -1 або > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Помилковий аргумент логарифма (має бути більший від нуля)',
+ 'pfunc_expr_unknown_error' => 'Помилка виразу: невідома помилка ($1)',
+ 'pfunc_expr_not_a_number' => 'У $1: результат не є числом',
+ 'pfunc_string_too_long' => 'Помилка: довжина рядка перевищує межу в {{PLURAL:$1|$1 символ|$1 символи|$1 символів}}',
+);
+
+/** Vèneto (Vèneto)
+ * @author Candalua
+ */
+$messages['vec'] = array(
+ 'pfunc_desc' => 'Zonta al parser na serie de funsion logiche',
+ 'pfunc_time_error' => 'Eror: orario mìa valido',
+ 'pfunc_time_too_long' => 'Eror: massa chiamate a #time',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => "Eror ne l'espression: stack esaurìo",
+ 'pfunc_expr_unexpected_number' => "Eror ne l'espression: xe vegnù fora un nùmaro che no se se spetava",
+ 'pfunc_expr_preg_match_failure' => "Eror ne l'espression: eror inateso in preg_match",
+ 'pfunc_expr_unrecognised_word' => 'Eror ne l\'espression: parola "$1" mìa riconossiùa',
+ 'pfunc_expr_unexpected_operator' => "Eror ne l'espression: operator $1 inateso",
+ 'pfunc_expr_missing_operand' => "Eror ne l'espression: operando mancante par $1",
+ 'pfunc_expr_unexpected_closing_bracket' => "Eror ne l'espression: parentesi chiusa inatesa",
+ 'pfunc_expr_unrecognised_punctuation' => 'Eror ne l\'espression: caràtere de puntegiatura "$1" mìa riconossiùo',
+ 'pfunc_expr_unclosed_bracket' => "Eror ne l'espression: parentesi verta e mìa sarà",
+ 'pfunc_expr_division_by_zero' => 'Division par zero',
+ 'pfunc_expr_invalid_argument' => 'Argomento mìa valido par $1: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Argomento mìa valido par ln: <= 0',
+ 'pfunc_expr_unknown_error' => "Eror ne l'espression: eror sconossiùo ($1)",
+ 'pfunc_expr_not_a_number' => "In $1: el risultato no'l xe mìa un nùmaro",
+ 'pfunc_string_too_long' => 'Eròr: la stringa la va fora dal limite de {{PLURAL:$1|1 caràtere|$1 caràteri}}',
+);
+
+/** Veps (Vepsan kel')
+ * @author Игорь Бродский
+ */
+$messages['vep'] = array(
+ 'pfunc_time_error' => 'Petuz: vär aig',
+);
+
+/** Vietnamese (Tiếng Việt)
+ * @author Minh Nguyen
+ * @author Vinhtantran
+ */
+$messages['vi'] = array(
+ 'pfunc_desc' => 'Nâng cao bộ xử lý với những hàm cú pháp lôgic',
+ 'pfunc_time_error' => 'Lỗi: thời gian không hợp lệ',
+ 'pfunc_time_too_long' => 'Lỗi: quá nhiều lần gọi #time',
+ 'pfunc_time_too_big' => 'Lỗi: #time chỉ hỗ trợ các năm cho tới 9999',
+ '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)',
+ 'pfunc_expr_stack_exhausted' => 'Lỗi biểu thức: Đã cạn stack',
+ 'pfunc_expr_unexpected_number' => 'Lỗi biểu thức: Dư số',
+ 'pfunc_expr_preg_match_failure' => 'Lỗi biểu thức: Hàm preg_match thất bại',
+ 'pfunc_expr_unrecognised_word' => 'Lỗi biểu thức: Từ “$1” không rõ ràng',
+ 'pfunc_expr_unexpected_operator' => "Lỗi biểu thức: Dư toán tử '''$1'''",
+ 'pfunc_expr_missing_operand' => 'Lỗi biểu thức: Thiếu toán hạng trong $1',
+ 'pfunc_expr_unexpected_closing_bracket' => 'Lỗi biểu thức: Dư dấu đóng ngoặc',
+ 'pfunc_expr_unrecognised_punctuation' => 'Lỗi biểu thức: Dấu phân cách “$1” không rõ ràng',
+ 'pfunc_expr_unclosed_bracket' => 'Lỗi biểu thức: Dấu ngoặc chưa được đóng',
+ 'pfunc_expr_division_by_zero' => 'Chia cho zero',
+ 'pfunc_expr_invalid_argument' => 'Tham số không hợp lệ cho $1: < −1 hay > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'Tham số không hợp lệ cho ln: ≤ 0',
+ 'pfunc_expr_unknown_error' => 'Lỗi biểu thức: Lỗi không rõ nguyên nhân ($1)',
+ 'pfunc_expr_not_a_number' => 'Trong $1: kết quả không phải là kiểu số',
+ 'pfunc_string_too_long' => 'Lỗi: Chuỗi vượt quá giới hạn $1 ký tự',
+ 'pfunc-convert-dimensionmismatch' => 'Lỗi: Không thể chuyển đổi giữa các đơn vị “$1” và “$2”.',
+ 'pfunc-convert-unknownunit' => 'Lỗi: Không hiểu đơn vị “$1”.',
+ 'pfunc-convert-unknowndimension' => 'Lỗi: Không hiểu kích thước “$1”.',
+ 'pfunc-convert-invalidcompoundunit' => 'Lỗi: Đơn vị ghép “$1” không hợp lệ.',
+ 'pfunc-convert-nounit' => 'Lỗi: Không đưa vào đơn vị nguồn.',
+ 'pfunc-convert-doublecompoundunit' => 'Lỗi: Không thể phân tích các đơn vị ghép đúp như “$1”.',
+ 'pfunc-convert-dimension-length' => 'chiều dài',
+ 'pfunc-convert-dimension-area' => 'diện tích',
+ 'pfunc-convert-dimension-volume' => 'thể tích',
+ 'pfunc-convert-dimension-time' => 'thời gian',
+ 'pfunc-convert-dimension-timesquared' => 'thời gian²',
+ 'pfunc-convert-dimension-mass' => 'khối lượng',
+ 'pfunc-convert-dimension-speed' => 'tốc độ',
+ 'pfunc-convert-dimension-temperature' => 'nhiệt độ',
+ 'pfunc-convert-dimension-acceleration' => 'gia tốc',
+ 'pfunc-convert-dimension-force' => 'lực lượng',
+ 'pfunc-convert-dimension-torque' => 'mô men lực',
+ 'pfunc-convert-dimension-energy' => 'năng lượng',
+ 'pfunc-convert-dimension-power' => 'công suất',
+ 'pfunc-convert-dimension-pressure' => 'áp suất',
+ 'pfunc-convert-dimension-density' => 'mật độ',
+ 'pfunc-convert-dimension-fuelefficiencypositive' => 'hiệu quả nhiên liệu dương',
+ 'pfunc-convert-dimension-fuelefficiencynegative' => 'hiệu quả nhiên liệu âm',
+ 'pfunc-convert-prefix-yotta' => 'yôta',
+ 'pfunc-convert-prefix-zetta' => 'zêta',
+ 'pfunc-convert-prefix-exa' => 'exa',
+ 'pfunc-convert-prefix-peta' => 'pêta',
+ 'pfunc-convert-prefix-tera' => 'têra',
+ 'pfunc-convert-prefix-giga' => 'giga',
+ 'pfunc-convert-prefix-mega' => 'mêga',
+ 'pfunc-convert-prefix-kilo' => 'kilô',
+ 'pfunc-convert-prefix-hecto' => 'hêctô',
+ 'pfunc-convert-prefix-deca' => 'đềca',
+ 'pfunc-convert-prefix-deci' => 'đêxi',
+ 'pfunc-convert-prefix-centi' => 'xenti',
+ 'pfunc-convert-prefix-milli' => 'mili',
+ 'pfunc-convert-prefix-micro' => 'micrô',
+ 'pfunc-convert-prefix-nano' => 'nanô',
+ 'pfunc-convert-prefix-pico' => 'picô',
+ 'pfunc-convert-prefix-femto' => 'femtô',
+ 'pfunc-convert-prefix-atto' => 'atô',
+ 'pfunc-convert-prefix-zepto' => 'zéptô',
+ 'pfunc-convert-prefix-yocto' => 'yóctô',
+ 'pfunc-convert-unit-length-metre' => '{{PLURAL:$1}}$2mét',
+ 'pfunc-convert-unit-length-angstrom' => '{{PLURAL:$1}}ångström',
+ 'pfunc-convert-unit-length-mile' => '{{PLURAL:$1}}dặm',
+ 'pfunc-convert-unit-length-furlong' => '{{PLURAL:$1}}furlong',
+ 'pfunc-convert-unit-length-chain' => '{{PLURAL:$1}}chain',
+ 'pfunc-convert-unit-length-rod' => '{{PLURAL:$1}}rod',
+ 'pfunc-convert-unit-length-fathom' => '{{PLURAL:$1}}fathom',
+ 'pfunc-convert-unit-length-yard' => '{{PLURAL:$1}}yard',
+ 'pfunc-convert-unit-length-foot' => '{{PLURAL:$1}}foot',
+ 'pfunc-convert-unit-length-hand' => '{{PLURAL:$1}}hand',
+ 'pfunc-convert-unit-length-inch' => '{{PLURAL:$1}}inch',
+ 'pfunc-convert-unit-length-nauticalmile' => '{{PLURAL:$1}}hải lý',
+ 'pfunc-convert-unit-length-nauticalmileuk' => '{{PLURAL:$1}}hải lý (Anh trước 1970)',
+ 'pfunc-convert-unit-length-nauticalmileus' => '{{PLURAL:$1}}hải lý (Mỹ trước 1954)',
+ 'pfunc-convert-unit-length-parsec' => '{{PLURAL:$1}}$2parsec',
+ 'pfunc-convert-unit-length-lightyear' => '{{PLURAL:$1}}$2 năm ánh sáng',
+ 'pfunc-convert-unit-length-astronomicalunit' => '{{PLURAL:$1}}đơn vị thiên văn',
+ 'pfunc-convert-unit-length-furlong-abbr' => 'furlong',
+ 'pfunc-convert-unit-length-chain-abbr' => 'chain',
+ 'pfunc-convert-unit-length-rod-abbr' => 'rd',
+ 'pfunc-convert-unit-length-fathom-abbr' => 'fathom',
+ 'pfunc-convert-unit-length-yard-abbr' => 'yd',
+ 'pfunc-convert-unit-length-foot-abbr' => 'ft',
+ 'pfunc-convert-unit-length-hand-abbr' => 'h',
+ 'pfunc-convert-unit-length-inch-abbr' => 'in',
+ 'pfunc-convert-unit-length-nauticalmile-abbr' => 'nmi',
+ 'pfunc-convert-unit-length-nauticalmileuk-abbr' => 'nmi (Anh)',
+ 'pfunc-convert-unit-length-nauticalmileus-abbr' => 'nmi (Mỹ trước 1954)',
+ 'pfunc-convert-unit-length-parsec-abbr' => '$2pc',
+ 'pfunc-convert-unit-length-lightyear-abbr' => '$2ly',
+ 'pfunc-convert-unit-length-astronomicalunit-abbr' => 'ua',
+ 'pfunc-convert-unit-area-squarekilometre' => '{{PLURAL:$1}}kilômét vuông',
+ 'pfunc-convert-unit-area-squaremetre' => '{{PLURAL:$1}}mét vuông',
+ 'pfunc-convert-unit-area-squarecentimetre' => '{{PLURAL:$1}}xentimét vuông',
+ 'pfunc-convert-unit-area-squaremillimetre' => '{{PLURAL:$1}}millimét vuông',
+ 'pfunc-convert-unit-area-hectare' => '{{PLURAL:$1}}hecta',
+ 'pfunc-convert-unit-area-squaremile' => '{{PLURAL:$1}}dặm vuông',
+ 'pfunc-convert-unit-area-acre' => '{{PLURAL:$1}}mẫu Anh',
+ 'pfunc-convert-unit-area-squareyard' => '{{PLURAL:$1}}yard vuông',
+ 'pfunc-convert-unit-area-squarefoot' => '{{PLURAL:$1}}foot vuông',
+ 'pfunc-convert-unit-area-squareinch' => '{{PLURAL:$1}}inch vuông',
+ 'pfunc-convert-unit-area-squarenauticalmile' => '{{PLURAL:$1}}hải lý vuông',
+ 'pfunc-convert-unit-area-dunam' => '{{PLURAL:$1}}dunam',
+ 'pfunc-convert-unit-area-tsubo' => '{{PLURAL:$1}}tsubo',
+ 'pfunc-convert-unit-area-squarekilometre-abbr' => 'km²',
+ 'pfunc-convert-unit-area-squaremetre-abbr' => 'm²',
+ 'pfunc-convert-unit-area-squarecentimetre-abbr' => 'cm²',
+ 'pfunc-convert-unit-area-squaremillimetre-abbr' => 'mm²',
+ 'pfunc-convert-unit-area-hectare-abbr' => 'ha',
+ 'pfunc-convert-unit-area-squaremile-abbr' => 'sq mi',
+ 'pfunc-convert-unit-area-acre-abbr' => 'mẫu',
+ 'pfunc-convert-unit-area-squareyard-abbr' => 'sq yd',
+ 'pfunc-convert-unit-area-squarefoot-abbr' => 'sq ft',
+ 'pfunc-convert-unit-area-squareinch-abbr' => 'sq in',
+ 'pfunc-convert-unit-area-squarenauticalmile-abbr' => 'sq nmi',
+ 'pfunc-convert-unit-area-dunam-abbr' => 'dunam',
+ 'pfunc-convert-unit-area-tsubo-abbr' => 'tsubo',
+ 'pfunc-convert-unit-time-second' => '{{PLURAL:$1}}giây',
+ 'pfunc-convert-unit-time-year' => '{{PLURAL:$1}}$2 năm',
+ 'pfunc-convert-unit-time-day' => '{{PLURAL:$1}}ngày',
+ 'pfunc-convert-unit-time-hour' => '{{PLURAL:$1}}giờ',
+ 'pfunc-convert-unit-time-minute' => '{{PLURAL:$1}}phút',
+ 'pfunc-convert-unit-time-second-abbr' => 's',
+ 'pfunc-convert-unit-time-year-abbr' => '$2yr',
+ 'pfunc-convert-unit-time-day-abbr' => 'ngày',
+ 'pfunc-convert-unit-time-hour-abbr' => 'h',
+ 'pfunc-convert-unit-time-minute-abbr' => 'min',
+ 'pfunc-convert-unit-volume-cubicmetre' => '{{PLURAL:$1}}mét khối',
+ 'pfunc-convert-unit-volume-cubiccentimetre' => '{{PLURAL:$1}}xentimét khối',
+ 'pfunc-convert-unit-volume-cubicmillimetre' => '{{PLURAL:$1}}milimét khối',
+ 'pfunc-convert-unit-volume-kilolitre' => '{{PLURAL:$1}}kilôlít',
+ 'pfunc-convert-unit-volume-litre' => '{{PLURAL:$1}}lít',
+ 'pfunc-convert-unit-volume-centilitre' => '{{PLURAL:$1}}xentilít',
+ 'pfunc-convert-unit-volume-millilitre' => '{{PLURAL:$1}}mililít',
+ 'pfunc-convert-unit-volume-cubicyard' => '{{PLURAL:$1}}yard khối',
+ 'pfunc-convert-unit-volume-cubicfoot' => '{{PLURAL:$1}}foot khối',
+ 'pfunc-convert-unit-volume-cubicinch' => '{{PLURAL:$1}}inch khối',
+ 'pfunc-convert-unit-volume-barrel' => '{{PLURAL:$1}}thùng',
+ 'pfunc-convert-unit-volume-bushel' => '{{PLURAL:$1}}giạ',
+ 'pfunc-convert-unit-volume-gallon' => '{{PLURAL:$1}}gallon',
+ 'pfunc-convert-unit-volume-quart' => '{{PLURAL:$1}}quart',
+ 'pfunc-convert-unit-volume-pint' => '{{PLURAL:$1}}pint',
+ 'pfunc-convert-unit-volume-fluidounce' => '{{PLURAL:$1}}aoxơ chất lỏng',
+ 'pfunc-convert-unit-volume-barrelus' => '{{PLURAL:$1}}thùng Mỹ',
+ 'pfunc-convert-unit-volume-barreloil' => '{{PLURAL:$1}}thùng',
+ 'pfunc-convert-unit-volume-barrelbeer' => '{{PLURAL:$1}}thùng',
+ 'pfunc-convert-unit-volume-usgallon' => '{{PLURAL:$1}}gallon Mỹ',
+ 'pfunc-convert-unit-volume-usquart' => '{{PLURAL:$1}}quart Mỹ',
+ 'pfunc-convert-unit-volume-uspint' => '{{PLURAL:$1}}pint Mỹ',
+ 'pfunc-convert-unit-volume-usfluidounce' => '{{PLURAL:$1}}aoxơ chất lỏng Mỹ',
+ 'pfunc-convert-unit-volume-usdrybarrel' => '{{PLURAL:$1}}thùng chất khô Mỹ',
+ 'pfunc-convert-unit-volume-usbushel' => '{{PLURAL:$1}}thùng Mỹ',
+ 'pfunc-convert-unit-volume-usdrygallon' => '{{PLURAL:$1}}gallon chất khô Mỹ',
+ 'pfunc-convert-unit-volume-usdryquart' => '{{PLURAL:$1}}quart chất khô Mỹ',
+ 'pfunc-convert-unit-volume-usdrypint' => '{{PLURAL:$1}}pint chất khô Mỹ',
+ 'pfunc-convert-unit-volume-cubicmetre-abbr' => 'm³',
+ 'pfunc-convert-unit-volume-cubiccentimetre-abbr' => 'cm³',
+ 'pfunc-convert-unit-volume-cubicmillimetre-abbr' => 'mm³',
+ 'pfunc-convert-unit-volume-litre-abbr' => '$2l',
+ 'pfunc-convert-unit-volume-cubicyard-abbr' => 'cu yd',
+ 'pfunc-convert-unit-volume-cubicfoot-abbr' => 'cu ft',
+ 'pfunc-convert-unit-volume-cubicinch-abbr' => 'cu in',
+ 'pfunc-convert-unit-volume-barrel-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-bushel-abbr' => 'bsh',
+ 'pfunc-convert-unit-volume-gallon-abbr' => 'gal',
+ 'pfunc-convert-unit-volume-quart-abbr' => 'qt',
+ 'pfunc-convert-unit-volume-pint-abbr' => 'pt',
+ 'pfunc-convert-unit-volume-fluidounce-abbr' => 'fl oz',
+ 'pfunc-convert-unit-volume-barrelus-abbr' => 'bbl Mỹ',
+ 'pfunc-convert-unit-volume-barreloil-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-barrelbeer-abbr' => 'bbl',
+ 'pfunc-convert-unit-volume-usgallon-abbr' => 'gal Mỹ',
+ 'pfunc-convert-unit-volume-usquart-abbr' => 'qt Mỹ',
+ 'pfunc-convert-unit-volume-uspint-abbr' => 'pt Mỹ',
+ 'pfunc-convert-unit-volume-usfluidounce-abbr' => 'fl oz Mỹ',
+ 'pfunc-convert-unit-volume-usdrybarrel-abbr' => 'bbl Mỹ',
+ 'pfunc-convert-unit-volume-usbushel-abbr' => 'bsh Mỹ',
+ 'pfunc-convert-unit-volume-usdrygallon-abbr' => 'dry gal Mỹ',
+ 'pfunc-convert-unit-volume-usdryquart-abbr' => 'dry qt Mỹ',
+ 'pfunc-convert-unit-volume-usdrypint-abbr' => 'dry pt Mỹ',
+ 'pfunc-convert-unit-speed-mile-hour' => 'dặm một giờ',
+ 'pfunc-convert-unit-speed-speedoflight' => 'c',
+ 'pfunc-convert-unit-speed-mile-hour-abbr' => 'mph',
+ 'pfunc-convert-unit-speed-speedoflight-abbr' => 'c',
+ 'pfunc-convert-unit-pressure-pascal' => '{{PLURAL:$1}}$2pascal',
+ 'pfunc-convert-unit-pressure-bar' => 'ba',
+ 'pfunc-convert-unit-pressure-decibar' => 'đêxiba',
+ 'pfunc-convert-unit-pressure-millibar' => 'miliba',
+ 'pfunc-convert-unit-pressure-kilobarye' => 'kilôbarye',
+ 'pfunc-convert-unit-pressure-barye' => 'barye',
+ 'pfunc-convert-unit-pressure-atmosphere' => '{{PLURAL:$1}}atmôtphe',
+ 'pfunc-convert-unit-pressure-torr' => '{{PLURAL:$1}}torr',
+ 'pfunc-convert-unit-pressure-mmhg' => '{{PLURAL:$1}}milimét thủy ngân',
+ 'pfunc-convert-unit-pressure-inhg' => '{{PLURAL:$1}}inch thủy ngân',
+ 'pfunc-convert-unit-pressure-psi' => '{{PLURAL:$1}}pound một inch vuông',
+ 'pfunc-convert-unit-pressure-pascal-abbr' => '$2Pa',
+ 'pfunc-convert-unit-pressure-bar-abbr' => 'bar',
+ 'pfunc-convert-unit-pressure-decibar-abbr' => 'dbar',
+ 'pfunc-convert-unit-pressure-millibar-abbr' => 'mbar',
+ 'pfunc-convert-unit-pressure-kilobarye-abbr' => 'kBa',
+ 'pfunc-convert-unit-pressure-barye-abbr' => 'Ba',
+ 'pfunc-convert-unit-pressure-atmosphere-abbr' => 'atm',
+ 'pfunc-convert-unit-pressure-torr-abbr' => 'Torr',
+ 'pfunc-convert-unit-pressure-mmhg-abbr' => 'mmHg',
+ 'pfunc-convert-unit-pressure-inhg-abbr' => 'inHg',
+ 'pfunc-convert-unit-pressure-psi-abbr' => 'psi',
+);
+
+/** Volapük (Volapük)
+ * @author Smeira
+ */
+$messages['vo'] = array(
+ 'pfunc_time_error' => 'Pök: tim no lonöföl',
+ 'pfunc_expr_division_by_zero' => 'Müedam dub ser',
+ 'pfunc_expr_unknown_error' => 'Notidotapöl: pöl nesevädik ($1)',
+ 'pfunc_expr_not_a_number' => 'In $1: sek no binon num',
+);
+
+/** Yiddish (ייִדיש)
+ * @author פוילישער
+ */
+$messages['yi'] = array(
+ 'pfunc_time_error' => 'גרײַז: אומגילטיגע צײַט',
+ 'pfunc_expr_unexpected_operator' => 'אויסדריק גרײַז: אומגעריכטער $1 אפעראַטאר',
+ 'pfunc_expr_unclosed_bracket' => 'אויסדריק גרײַז: אומגעשלאסענער קלאַמער',
+ 'pfunc_expr_not_a_number' => 'אין $1: רעזולטאַט איז נישט קיין נומער',
+);
+
+/** Yoruba (Yorùbá)
+ * @author Demmy
+ */
+$messages['yo'] = array(
+ 'pfunc_time_error' => 'Àsìṣe: àsìkò àìtọ́',
+ 'pfunc_expr_unexpected_number' => 'Àsìṣe ìgbékalẹ̀ọ̀rọ̀: Nọ́mbà àìretí',
+ 'pfunc_expr_division_by_zero' => 'Pínpín pẹ̀lú òdo',
+ 'pfunc_expr_not_a_number' => 'Nínú $1: èsì kìí ṣe nọ́mbà',
+);
+
+/** Cantonese (粵語)
+ * @author Shinjiman
+ */
+$messages['yue'] = array(
+ 'pfunc_desc' => '用邏輯功能去加強處理器',
+ 'pfunc_time_error' => '錯: 唔啱嘅時間',
+ 'pfunc_time_too_long' => '錯: 太多 #time 呼叫',
+ 'pfunc_rel2abs_invalid_depth' => '錯: 唔啱路徑嘅深度: "$1" (已經試過由頭點落個點度)',
+ 'pfunc_expr_stack_exhausted' => '表達錯: 堆叠耗盡',
+ 'pfunc_expr_unexpected_number' => '表達錯: 未預料嘅數字',
+ 'pfunc_expr_preg_match_failure' => '表達錯: 未預料嘅 preg_match失敗',
+ 'pfunc_expr_unrecognised_word' => '表達錯: 未預料嘅字 "$1"',
+ 'pfunc_expr_unexpected_operator' => '表達錯: 未預料嘅 $1 運算符',
+ 'pfunc_expr_missing_operand' => '表達錯: 缺少 $1 嘅運算符',
+ 'pfunc_expr_unexpected_closing_bracket' => '表達錯: 未預料嘅閂括號',
+ 'pfunc_expr_unrecognised_punctuation' => '表達錯: 未能認得到嘅標點 "$1"',
+ 'pfunc_expr_unclosed_bracket' => '表達錯: 未閂好嘅括號',
+ 'pfunc_expr_division_by_zero' => '除以零',
+ 'pfunc_expr_invalid_argument' => '$1嘅無效參數: < -1 or > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln嘅無效參數: <= 0',
+ 'pfunc_expr_unknown_error' => '表達錯: 未知嘅錯 ($1)',
+ 'pfunc_expr_not_a_number' => '響 $1: 結果唔係數字',
+);
+
+/** Simplified Chinese (‪中文(简体)‬)
+ * @author Liangent
+ * @author Philip
+ * @author Shinjiman
+ */
+$messages['zh-hans'] = array(
+ 'pfunc_desc' => '用逻辑函数加强解析器',
+ 'pfunc_time_error' => '错误:无效时间',
+ 'pfunc_time_too_long' => '错误:#time调用次数过多',
+ 'pfunc_rel2abs_invalid_depth' => '错误:无效路径深度:“$1”(尝试访问根节点以上节点)',
+ 'pfunc_expr_stack_exhausted' => '表达式错误:堆栈耗尽',
+ 'pfunc_expr_unexpected_number' => '表达式错误:未预料的数字',
+ 'pfunc_expr_preg_match_failure' => '表达式错误:未预料的preg_match失败',
+ 'pfunc_expr_unrecognised_word' => '表达式错误:无法识别的词语“$1”',
+ 'pfunc_expr_unexpected_operator' => '表达式错误:未预料的$1操作符',
+ 'pfunc_expr_missing_operand' => '表达式错误:缺少$1的操作数',
+ 'pfunc_expr_unexpected_closing_bracket' => '表达式错误:未预料的反括号',
+ 'pfunc_expr_unrecognised_punctuation' => '表达式错误:无法识别的标点“$1”',
+ 'pfunc_expr_unclosed_bracket' => '表达式错误:未封闭的括号',
+ 'pfunc_expr_division_by_zero' => '零除',
+ 'pfunc_expr_invalid_argument' => '$1的无效参数:< -1 或 > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln的无效参数:<= 0',
+ 'pfunc_expr_unknown_error' => '表达式错误:未知错误($1)',
+ 'pfunc_expr_not_a_number' => '在$1中:结果不是数字',
+ 'pfunc_string_too_long' => '错误:字符串超过$1字符限制',
+);
+
+/** Traditional Chinese (‪中文(繁體)‬)
+ * @author Gaoxuewei
+ * @author Liangent
+ * @author Mark85296341
+ * @author Shinjiman
+ * @author Waihorace
+ */
+$messages['zh-hant'] = array(
+ 'pfunc_desc' => '用邏輯函數加強解析器',
+ 'pfunc_time_error' => '錯誤:無效時間',
+ 'pfunc_time_too_long' => '錯誤:過多的 #time 呼叫',
+ 'pfunc_time_too_big' => '錯誤:#時間只支援至9999年',
+ 'pfunc_rel2abs_invalid_depth' => '錯誤:無效路徑深度:「$1」(嘗試訪問頂點以上節點)',
+ 'pfunc_expr_stack_exhausted' => '表達式錯誤:堆疊耗盡',
+ 'pfunc_expr_unexpected_number' => '表達式錯誤:未預料的數字',
+ 'pfunc_expr_preg_match_failure' => '表達式錯誤:未預料的 preg_match 失敗',
+ 'pfunc_expr_unrecognised_word' => '表達式錯誤:無法識別的詞語「$1」',
+ 'pfunc_expr_unexpected_operator' => '表達式錯誤:未預料的 $1 運算子',
+ 'pfunc_expr_missing_operand' => '表達式錯誤:缺少 $1 的運算元',
+ 'pfunc_expr_unexpected_closing_bracket' => '表達式錯誤:未預料的反括號',
+ 'pfunc_expr_unrecognised_punctuation' => '表達式錯誤:無法識別的標點「$1」',
+ 'pfunc_expr_unclosed_bracket' => '表達式錯誤:未封閉的括號',
+ 'pfunc_expr_division_by_zero' => '除以零',
+ 'pfunc_expr_invalid_argument' => '$1 的無效參量:< -1 或 > 1',
+ 'pfunc_expr_invalid_argument_ln' => 'ln 的無效參量:<= 0',
+ 'pfunc_expr_unknown_error' => '表達式錯誤:未知錯誤($1)',
+ 'pfunc_expr_not_a_number' => '在 $1 中:結果不是數字',
+ 'pfunc_string_too_long' => '錯誤:字符串超過$1字符限制',
+);
+
diff --git a/extensions/ParserFunctions/ParserFunctions.php b/extensions/ParserFunctions/ParserFunctions.php
new file mode 100644
index 00000000..da9f3bbe
--- /dev/null
+++ b/extensions/ParserFunctions/ParserFunctions.php
@@ -0,0 +1,115 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+ die( 'This file is a MediaWiki extension, it is not a valid entry point' );
+}
+
+/**
+ * CONFIGURATION
+ * These variables may be overridden in LocalSettings.php after you include the
+ * extension file.
+ */
+
+/**
+ * Defines the maximum length of a string that string functions are allowed to operate on
+ * Prevention against denial of service by string function abuses.
+ */
+$wgPFStringLengthLimit = 1000;
+
+/**
+ * Enable string functions.
+ *
+ * Set this to true if you want your users to be able to implement their own
+ * parsers in the ugliest, most inefficient programming language known to man:
+ * MediaWiki wikitext with ParserFunctions.
+ *
+ * WARNING: enabling this may have an adverse impact on the sanity of your users.
+ * An alternative, saner solution for embedding complex text processing in
+ * MediaWiki templates can be found at: http://www.mediawiki.org/wiki/Extension:Lua
+ */
+$wgPFEnableStringFunctions = false;
+
+/**
+ * Enable Convert parser for converting between units of measurement
+ */
+$wgPFEnableConvert = false;
+
+/**
+ * The language for 'en' is actually 'en-us', which insists on using non-canonical translations
+ * of the SI base units ("meter" rather than "metre" and "liter" rather than "litre"). We
+ * can avoid contaminatng dialects by internally mapping languages by default; this is
+ * configurable so you can remove it if you like, or add other maps if that's useful.
+ * Essentially, if your wiki's $wgContLang appears as a key in this array, the value is
+ * what is used as the default language for {{#convert}} output.
+ */
+$wgPFUnitLanguageVariants = array(
+ 'en' => 'en-gb'
+);
+
+/** REGISTRATION */
+$wgExtensionCredits['parserhook'][] = array(
+ 'path' => __FILE__,
+ 'name' => 'ParserFunctions',
+ 'version' => '1.4.0',
+ 'url' => 'http://www.mediawiki.org/wiki/Extension:ParserFunctions',
+ 'author' => array( 'Tim Starling', 'Robert Rohde', 'Ross McClure', 'Juraj Simlovic' ),
+ 'descriptionmsg' => 'pfunc_desc',
+);
+
+$wgAutoloadClasses['ExtParserFunctions'] = dirname( __FILE__ ) . '/ParserFunctions_body.php';
+$wgAutoloadClasses['ExprParser'] = dirname( __FILE__ ) . '/Expr.php';
+$wgAutoloadClasses['ConvertParser'] = dirname( __FILE__ ) . '/Convert.php';
+
+$wgExtensionMessagesFiles['ParserFunctions'] = dirname( __FILE__ ) . '/ParserFunctions.i18n.php';
+$wgExtensionMessagesFiles['ParserFunctionsMagic'] = dirname( __FILE__ ) . '/ParserFunctions.i18n.magic.php';
+
+$wgParserTestFiles[] = dirname( __FILE__ ) . "/funcsParserTests.txt";
+$wgParserTestFiles[] = dirname( __FILE__ ) . "/stringFunctionTests.txt";
+$wgParserTestFiles[] = dirname( __FILE__ ) . "/convertTests.txt";
+
+$wgHooks['ParserFirstCallInit'][] = 'wfRegisterParserFunctions';
+
+function wfRegisterParserFunctions( $parser ) {
+ global $wgPFEnableStringFunctions, $wgPFEnableConvert;
+
+ if ( defined( get_class( $parser ) . '::SFH_OBJECT_ARGS' ) ) {
+ // These functions accept DOM-style arguments
+ $parser->setFunctionHook( 'if', 'ExtParserFunctions::ifObj', SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'ifeq', 'ExtParserFunctions::ifeqObj', SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'switch', 'ExtParserFunctions::switchObj', SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'ifexist', 'ExtParserFunctions::ifexistObj', SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'ifexpr', 'ExtParserFunctions::ifexprObj', SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'iferror', 'ExtParserFunctions::iferrorObj', SFH_OBJECT_ARGS );
+ } else {
+ $parser->setFunctionHook( 'if', 'ExtParserFunctions::ifHook' );
+ $parser->setFunctionHook( 'ifeq', 'ExtParserFunctions::ifeq' );
+ $parser->setFunctionHook( 'switch', 'ExtParserFunctions::switchHook' );
+ $parser->setFunctionHook( 'ifexist', 'ExtParserFunctions::ifexist' );
+ $parser->setFunctionHook( 'ifexpr', 'ExtParserFunctions::ifexpr' );
+ $parser->setFunctionHook( 'iferror', 'ExtParserFunctions::iferror' );
+ }
+
+ $parser->setFunctionHook( 'expr', 'ExtParserFunctions::expr' );
+ $parser->setFunctionHook( 'time', 'ExtParserFunctions::time' );
+ $parser->setFunctionHook( 'timel', 'ExtParserFunctions::localTime' );
+ $parser->setFunctionHook( 'rel2abs', 'ExtParserFunctions::rel2abs' );
+ $parser->setFunctionHook( 'titleparts', 'ExtParserFunctions::titleparts' );
+
+ // String Functions
+ if ( $wgPFEnableStringFunctions ) {
+ $parser->setFunctionHook( 'len', 'ExtParserFunctions::runLen' );
+ $parser->setFunctionHook( 'pos', 'ExtParserFunctions::runPos' );
+ $parser->setFunctionHook( 'rpos', 'ExtParserFunctions::runRPos' );
+ $parser->setFunctionHook( 'sub', 'ExtParserFunctions::runSub' );
+ $parser->setFunctionHook( 'count', 'ExtParserFunctions::runCount' );
+ $parser->setFunctionHook( 'replace', 'ExtParserFunctions::runReplace' );
+ $parser->setFunctionHook( 'explode', 'ExtParserFunctions::runExplode' );
+ $parser->setFunctionHook( 'urldecode', 'ExtParserFunctions::runUrlDecode' );
+ }
+
+ if( $wgPFEnableConvert ) {
+ $parser->setFunctionHook( 'convert', 'ExtParserFunctions::convert' );
+ }
+
+ return true;
+}
diff --git a/extensions/ParserFunctions/ParserFunctions_body.php b/extensions/ParserFunctions/ParserFunctions_body.php
new file mode 100644
index 00000000..13611510
--- /dev/null
+++ b/extensions/ParserFunctions/ParserFunctions_body.php
@@ -0,0 +1,846 @@
+<?php
+
+class ExtParserFunctions {
+ static $mExprParser;
+ static $mConvertParser;
+ static $mTimeCache = array();
+ static $mTimeChars = 0;
+ static $mMaxTimeChars = 6000; # ~10 seconds
+
+ public static function clearState( $parser ) {
+ self::$mTimeChars = 0;
+ $parser->pf_ifexist_breakdown = array();
+ $parser->pf_markerRegex = null;
+ return true;
+ }
+
+ /**
+ * Register ParserClearState hook.
+ * We defer this until needed to avoid the loading of the code of this file
+ * when no parser function is actually called.
+ */
+ public static function registerClearHook() {
+ static $done = false;
+ if( !$done ) {
+ global $wgHooks;
+ $wgHooks['ParserClearState'][] = __CLASS__ . '::clearState';
+ $done = true;
+ }
+ }
+
+ /**
+ * Get the marker regex. Cached.
+ */
+ public static function getMarkerRegex( $parser ) {
+ self::registerClearHook();
+ if ( isset( $parser->pf_markerRegex ) ) {
+ return $parser->pf_markerRegex;
+ }
+
+ wfProfileIn( __METHOD__ );
+
+ $prefix = preg_quote( $parser->uniqPrefix(), '/' );
+
+ // The first line represents Parser from release 1.12 forward.
+ // subsequent lines are hacks to accomodate old Mediawiki versions.
+ if ( defined( 'Parser::MARKER_SUFFIX' ) )
+ $suffix = preg_quote( Parser::MARKER_SUFFIX, '/' );
+ elseif ( isset( $parser->mMarkerSuffix ) )
+ $suffix = preg_quote( $parser->mMarkerSuffix, '/' );
+ elseif ( defined( 'MW_PARSER_VERSION' ) &&
+ strcmp( MW_PARSER_VERSION, '1.6.1' ) > 0 )
+ $suffix = "QINU\x07";
+ else $suffix = 'QINU';
+
+ $parser->pf_markerRegex = '/' . $prefix . '(?:(?!' . $suffix . ').)*' . $suffix . '/us';
+
+ wfProfileOut( __METHOD__ );
+ return $parser->pf_markerRegex;
+ }
+
+ // Removes unique markers from passed parameters, used by string functions.
+ private static function killMarkers ( $parser, $text ) {
+ return preg_replace( self::getMarkerRegex( $parser ), '' , $text );
+ }
+
+ /**
+ * @return ExprParser
+ */
+ public static function &getExprParser() {
+ if ( !isset( self::$mExprParser ) ) {
+ self::$mExprParser = new ExprParser;
+ }
+ return self::$mExprParser;
+ }
+
+ public static function expr( $parser, $expr = '' ) {
+ try {
+ return self::getExprParser()->doExpression( $expr );
+ } catch ( ExprError $e ) {
+ return $e->getMessage();
+ }
+ }
+
+ public static function ifexpr( $parser, $expr = '', $then = '', $else = '' ) {
+ try {
+ $ret = self::getExprParser()->doExpression( $expr );
+ if ( is_numeric( $ret ) ) {
+ $ret = floatval( $ret );
+ }
+ if ( $ret ) {
+ return $then;
+ } else {
+ return $else;
+ }
+ } catch ( ExprError $e ) {
+ return $e->getMessage();
+ }
+ }
+
+ public static function ifexprObj( $parser, $frame, $args ) {
+ $expr = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
+ $then = isset( $args[1] ) ? $args[1] : '';
+ $else = isset( $args[2] ) ? $args[2] : '';
+ $result = self::ifexpr( $parser, $expr, $then, $else );
+ if ( is_object( $result ) ) {
+ $result = trim( $frame->expand( $result ) );
+ }
+ return $result;
+ }
+
+ public static function ifHook( $parser, $test = '', $then = '', $else = '' ) {
+ if ( $test !== '' ) {
+ return $then;
+ } else {
+ return $else;
+ }
+ }
+
+ public static function ifObj( $parser, $frame, $args ) {
+ $test = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
+ if ( $test !== '' ) {
+ return isset( $args[1] ) ? trim( $frame->expand( $args[1] ) ) : '';
+ } else {
+ return isset( $args[2] ) ? trim( $frame->expand( $args[2] ) ) : '';
+ }
+ }
+
+ public static function ifeq( $parser, $left = '', $right = '', $then = '', $else = '' ) {
+ if ( $left == $right ) {
+ return $then;
+ } else {
+ return $else;
+ }
+ }
+
+ public static function ifeqObj( $parser, $frame, $args ) {
+ $left = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
+ $right = isset( $args[1] ) ? trim( $frame->expand( $args[1] ) ) : '';
+ if ( $left == $right ) {
+ return isset( $args[2] ) ? trim( $frame->expand( $args[2] ) ) : '';
+ } else {
+ return isset( $args[3] ) ? trim( $frame->expand( $args[3] ) ) : '';
+ }
+ }
+
+ public static function iferror( $parser, $test = '', $then = '', $else = false ) {
+ if ( preg_match( '/<(?:strong|span|p|div)\s(?:[^\s>]*\s+)*?class="(?:[^"\s>]*\s+)*?error(?:\s[^">]*)?"/', $test ) ) {
+ return $then;
+ } elseif ( $else === false ) {
+ return $test;
+ } else {
+ return $else;
+ }
+ }
+
+ public static function iferrorObj( $parser, $frame, $args ) {
+ $test = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
+ $then = isset( $args[1] ) ? $args[1] : false;
+ $else = isset( $args[2] ) ? $args[2] : false;
+ $result = self::iferror( $parser, $test, $then, $else );
+ if ( $result === false ) {
+ return '';
+ } else {
+ return trim( $frame->expand( $result ) );
+ }
+ }
+
+ public static function switchHook( $parser /*,...*/ ) {
+ $args = func_get_args();
+ array_shift( $args );
+ $primary = trim( array_shift( $args ) );
+ $found = $defaultFound = false;
+ $parts = null;
+ $default = null;
+ $mwDefault =& MagicWord::get( 'default' );
+ foreach ( $args as $arg ) {
+ $parts = array_map( 'trim', explode( '=', $arg, 2 ) );
+ if ( count( $parts ) == 2 ) {
+ # Found "="
+ if ( $found || $parts[0] == $primary ) {
+ # Found a match, return now
+ return $parts[1];
+ } elseif ( $defaultFound || $mwDefault->matchStartAndRemove( $parts[0] ) ) {
+ $default = $parts[1];
+ } # else wrong case, continue
+ } elseif ( count( $parts ) == 1 ) {
+ # Multiple input, single output
+ # If the value matches, set a flag and continue
+ if ( $parts[0] == $primary ) {
+ $found = true;
+ } elseif ( $mwDefault->matchStartAndRemove( $parts[0] ) ) {
+ $defaultFound = true;
+ }
+ } # else RAM corruption due to cosmic ray?
+ }
+ # Default case
+ # Check if the last item had no = sign, thus specifying the default case
+ if ( count( $parts ) == 1 ) {
+ return $parts[0];
+ } elseif ( !is_null( $default ) ) {
+ return $default;
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * @static
+ * @param $parser Parser
+ * @param $frame PPFrame
+ * @param $args
+ * @return string
+ */
+ public static function switchObj( $parser, $frame, $args ) {
+ if ( count( $args ) == 0 ) {
+ return '';
+ }
+ $primary = trim( $frame->expand( array_shift( $args ) ) );
+ $found = $defaultFound = false;
+ $default = null;
+ $lastItemHadNoEquals = false;
+ $mwDefault =& MagicWord::get( 'default' );
+ foreach ( $args as $arg ) {
+ $bits = $arg->splitArg();
+ $nameNode = $bits['name'];
+ $index = $bits['index'];
+ $valueNode = $bits['value'];
+
+ if ( $index === '' ) {
+ # Found "="
+ $lastItemHadNoEquals = false;
+ if ( $found ) {
+ # Multiple input match
+ return trim( $frame->expand( $valueNode ) );
+ } else {
+ $test = trim( $frame->expand( $nameNode ) );
+ if ( $test == $primary ) {
+ # Found a match, return now
+ return trim( $frame->expand( $valueNode ) );
+ } elseif ( $defaultFound || $mwDefault->matchStartAndRemove( $test ) ) {
+ $default = $valueNode;
+ } # else wrong case, continue
+ }
+ } else {
+ # Multiple input, single output
+ # If the value matches, set a flag and continue
+ $lastItemHadNoEquals = true;
+ $test = trim( $frame->expand( $valueNode ) );
+ if ( $test == $primary ) {
+ $found = true;
+ } elseif ( $mwDefault->matchStartAndRemove( $test ) ) {
+ $defaultFound = true;
+ }
+ }
+ }
+ # Default case
+ # Check if the last item had no = sign, thus specifying the default case
+ if ( $lastItemHadNoEquals ) {
+ return $test;
+ } elseif ( !is_null( $default ) ) {
+ return trim( $frame->expand( $default ) );
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Returns the absolute path to a subpage, relative to the current article
+ * title. Treats titles as slash-separated paths.
+ *
+ * Following subpage link syntax instead of standard path syntax, an
+ * initial slash is treated as a relative path, and vice versa.
+ *
+ * @param $parser Parser
+ */
+ public static function rel2abs( $parser , $to = '' , $from = '' ) {
+
+ $from = trim( $from );
+ if ( $from == '' ) {
+ $from = $parser->getTitle()->getPrefixedText();
+ }
+
+ $to = rtrim( $to , ' /' );
+
+ // if we have an empty path, or just one containing a dot
+ if ( $to == '' || $to == '.' ) {
+ return $from;
+ }
+
+ // if the path isn't relative
+ if ( substr( $to , 0 , 1 ) != '/' &&
+ substr( $to , 0 , 2 ) != './' &&
+ substr( $to , 0 , 3 ) != '../' &&
+ $to != '..' )
+ {
+ $from = '';
+ }
+ // Make a long path, containing both, enclose it in /.../
+ $fullPath = '/' . $from . '/' . $to . '/';
+
+ // remove redundant current path dots
+ $fullPath = preg_replace( '!/(\./)+!', '/', $fullPath );
+
+ // remove double slashes
+ $fullPath = preg_replace( '!/{2,}!', '/', $fullPath );
+
+ // remove the enclosing slashes now
+ $fullPath = trim( $fullPath , '/' );
+ $exploded = explode ( '/' , $fullPath );
+ $newExploded = array();
+
+ foreach ( $exploded as $current ) {
+ if ( $current == '..' ) { // removing one level
+ if ( !count( $newExploded ) ) {
+ // attempted to access a node above root node
+ return '<strong class="error">' . wfMsgForContent( 'pfunc_rel2abs_invalid_depth', $fullPath ) . '</strong>';
+ }
+ // remove last level from the stack
+ array_pop( $newExploded );
+ } else {
+ // add the current level to the stack
+ $newExploded[] = $current;
+ }
+ }
+
+ // we can now join it again
+ return implode( '/' , $newExploded );
+ }
+
+ /**
+ * @static
+ * @param $parser Parser
+ * @param $frame PPFrame
+ * @return bool
+ */
+ public static function incrementIfexistCount( $parser, $frame ) {
+ // Don't let this be called more than a certain number of times. It tends to make the database explode.
+ global $wgExpensiveParserFunctionLimit;
+ self::registerClearHook();
+ $parser->mExpensiveFunctionCount++;
+ if ( $frame ) {
+ $pdbk = $frame->getPDBK( 1 );
+ if ( !isset( $parser->pf_ifexist_breakdown[$pdbk] ) ) {
+ $parser->pf_ifexist_breakdown[$pdbk] = 0;
+ }
+ $parser->pf_ifexist_breakdown[$pdbk] ++;
+ }
+ return $parser->mExpensiveFunctionCount <= $wgExpensiveParserFunctionLimit;
+ }
+
+ public static function ifexist( $parser, $title = '', $then = '', $else = '' ) {
+ return self::ifexistCommon( $parser, false, $title, $then, $else );
+ }
+
+ public static function ifexistCommon( $parser, $frame, $titletext = '', $then = '', $else = '' ) {
+ global $wgContLang;
+ $title = Title::newFromText( $titletext );
+ $wgContLang->findVariantLink( $titletext, $title, true );
+ if ( $title ) {
+ if ( $title->getNamespace() == NS_MEDIA ) {
+ /* If namespace is specified as NS_MEDIA, then we want to
+ * check the physical file, not the "description" page.
+ */
+ if ( !self::incrementIfexistCount( $parser, $frame ) ) {
+ return $else;
+ }
+ $file = wfFindFile( $title );
+ if ( !$file ) {
+ return $else;
+ }
+ $parser->mOutput->addImage(
+ $file->getName(), $file->getTimestamp(), $file->getSha1() );
+ return $file->exists() ? $then : $else;
+ } elseif ( $title->getNamespace() == NS_SPECIAL ) {
+ /* Don't bother with the count for special pages,
+ * since their existence can be checked without
+ * accessing the database.
+ */
+ return SpecialPage::exists( $title->getDBkey() ) ? $then : $else;
+ } elseif ( $title->isExternal() ) {
+ /* Can't check the existence of pages on other sites,
+ * so just return $else. Makes a sort of sense, since
+ * they don't exist _locally_.
+ */
+ return $else;
+ } else {
+ $pdbk = $title->getPrefixedDBkey();
+ $lc = LinkCache::singleton();
+ if ( !self::incrementIfexistCount( $parser, $frame ) ) {
+ return $else;
+ }
+ if ( 0 != ( $id = $lc->getGoodLinkID( $pdbk ) ) ) {
+ $parser->mOutput->addLink( $title, $id );
+ return $then;
+ } elseif ( $lc->isBadLink( $pdbk ) ) {
+ $parser->mOutput->addLink( $title, 0 );
+ return $else;
+ }
+ $id = $title->getArticleID();
+ $parser->mOutput->addLink( $title, $id );
+ if ( $id ) {
+ return $then;
+ }
+ }
+ }
+ return $else;
+ }
+
+ public static function ifexistObj( $parser, $frame, $args ) {
+ $title = isset( $args[0] ) ? trim( $frame->expand( $args[0] ) ) : '';
+ $then = isset( $args[1] ) ? $args[1] : null;
+ $else = isset( $args[2] ) ? $args[2] : null;
+
+ $result = self::ifexistCommon( $parser, $frame, $title, $then, $else );
+ if ( $result === null ) {
+ return '';
+ } else {
+ return trim( $frame->expand( $result ) );
+ }
+ }
+
+ public static function time( $parser, $format = '', $date = '', $language = '', $local = false ) {
+ global $wgLang, $wgContLang, $wgLocaltimezone;
+ self::registerClearHook();
+ if ( isset( self::$mTimeCache[$format][$date][$language][$local] ) ) {
+ return self::$mTimeCache[$format][$date][$language][$local];
+ }
+
+ # compute the timestamp string $ts
+ # PHP >= 5.2 can handle dates before 1970 or after 2038 using the DateTime object
+ # PHP < 5.2 is limited to dates between 1970 and 2038
+
+ $invalidTime = false;
+
+ if ( class_exists( 'DateTime' ) ) { # PHP >= 5.2
+ # the DateTime constructor must be used because it throws exceptions
+ # when errors occur, whereas date_create appears to just output a warning
+ # that can't really be detected from within the code
+ try {
+ # Determine timezone
+ if ( $local ) {
+ # convert to MediaWiki local timezone if set
+ if ( isset( $wgLocaltimezone ) ) {
+ $tz = new DateTimeZone( $wgLocaltimezone );
+ } else {
+ $tz = new DateTimeZone( date_default_timezone_get() );
+ }
+ } else {
+ # if local time was not requested, convert to UTC
+ $tz = new DateTimeZone( 'UTC' );
+ }
+
+ # Correct for DateTime interpreting 'XXXX' as XX:XX o'clock
+ if ( preg_match( '/^[0-9]{4}$/', $date ) ) {
+ $date = '00:00 '.$date;
+ }
+
+ # Parse date
+ if ( $date !== '' ) {
+ $dateObject = new DateTime( $date, $tz );
+ } else {
+ # use current date and time
+ $dateObject = new DateTime( 'now', $tz );
+ }
+
+ # Generate timestamp
+ $ts = $dateObject->format( 'YmdHis' );
+ } catch ( Exception $ex ) {
+ $invalidTime = true;
+ }
+ } else { # PHP < 5.2
+ if ( $date !== '' ) {
+ $unix = @strtotime( $date );
+ } else {
+ $unix = time();
+ }
+
+ if ( $unix == -1 || $unix == false ) {
+ $invalidTime = true;
+ } else {
+ if ( $local ) {
+ # Use the time zone
+ if ( isset( $wgLocaltimezone ) ) {
+ $oldtz = getenv( 'TZ' );
+ putenv( 'TZ=' . $wgLocaltimezone );
+ }
+ wfSuppressWarnings(); // E_STRICT system time bitching
+ $ts = date( 'YmdHis', $unix );
+ wfRestoreWarnings();
+ if ( isset( $wgLocaltimezone ) ) {
+ putenv( 'TZ=' . $oldtz );
+ }
+ } else {
+ $ts = wfTimestamp( TS_MW, $unix );
+ }
+ }
+ }
+
+ # format the timestamp and return the result
+ if ( $invalidTime ) {
+ $result = '<strong class="error">' . wfMsgForContent( 'pfunc_time_error' ) . '</strong>';
+ } else {
+ self::$mTimeChars += strlen( $format );
+ if ( self::$mTimeChars > self::$mMaxTimeChars ) {
+ return '<strong class="error">' . wfMsgForContent( 'pfunc_time_too_long' ) . '</strong>';
+ } else {
+ if ( $ts < 100000000000000 ) { // Language can't deal with years after 9999
+ if ( $language !== '' && Language::isValidBuiltInCode( $language ) ) {
+ // use whatever language is passed as a parameter
+ $langObject = Language::factory( $language );
+ $result = $langObject->sprintfDate( $format, $ts );
+ } else {
+ // use wiki's content language
+ $result = $parser->getFunctionLang()->sprintfDate( $format, $ts );
+ }
+ } else {
+ return '<strong class="error">' . wfMsgForContent( 'pfunc_time_too_big' ) . '</strong>';
+ }
+ }
+ }
+ self::$mTimeCache[$format][$date][$language][$local] = $result;
+ return $result;
+ }
+
+ public static function localTime( $parser, $format = '', $date = '', $language = '' ) {
+ return self::time( $parser, $format, $date, $language, true );
+ }
+
+ /**
+ * Obtain a specified number of slash-separated parts of a title,
+ * e.g. {{#titleparts:Hello/World|1}} => "Hello"
+ *
+ * @param Parser $parser Parent parser
+ * @param string $title Title to split
+ * @param int $parts Number of parts to keep
+ * @param int $offset Offset starting at 1
+ * @return string
+ */
+ public static function titleparts( $parser, $title = '', $parts = 0, $offset = 0 ) {
+ $parts = intval( $parts );
+ $offset = intval( $offset );
+ $ntitle = Title::newFromText( $title );
+ if ( $ntitle instanceof Title ) {
+ $bits = explode( '/', $ntitle->getPrefixedText(), 25 );
+ if ( count( $bits ) <= 0 ) {
+ return $ntitle->getPrefixedText();
+ } else {
+ if ( $offset > 0 ) {
+ --$offset;
+ }
+ if ( $parts == 0 ) {
+ return implode( '/', array_slice( $bits, $offset ) );
+ } else {
+ return implode( '/', array_slice( $bits, $offset, $parts ) );
+ }
+ }
+ } else {
+ return $title;
+ }
+ }
+
+ /**
+ * Get a ConvertParser object
+ * @return ConvertParser
+ */
+ protected static function &getConvertParser() {
+ if ( !isset( self::$mConvertParser ) ) {
+ self::$mConvertParser = new ConvertParser;
+ }
+ return self::$mConvertParser;
+ }
+
+ public static function convert( /*...*/ ) {
+ try {
+ $args = func_get_args();
+ return self::getConvertParser()->execute( $args );
+ } catch ( ConvertError $e ) {
+ return $e->getMessage();
+ }
+ }
+
+ // Verifies parameter is less than max string length.
+ private static function checkLength( $text ) {
+ global $wgPFStringLengthLimit;
+ return ( mb_strlen( $text ) < $wgPFStringLengthLimit );
+ }
+
+ // Generates error message. Called when string is too long.
+ private static function tooLongError() {
+ global $wgPFStringLengthLimit, $wgContLang;
+ return '<strong class="error">' .
+ wfMsgExt( 'pfunc_string_too_long',
+ array( 'escape', 'parsemag', 'content' ),
+ $wgContLang->formatNum( $wgPFStringLengthLimit ) ) .
+ '</strong>';
+ }
+
+ /**
+ * {{#len:string}}
+ *
+ * Reports number of characters in string.
+ */
+ public static function runLen ( $parser, $inStr = '' ) {
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+ $len = mb_strlen( $inStr );
+
+ wfProfileOut( __METHOD__ );
+ return $len;
+ }
+
+ /**
+ * {{#pos: string | needle | offset}}
+ *
+ * Finds first occurrence of "needle" in "string" starting at "offset".
+ *
+ * Note: If the needle is an empty string, single space is used instead.
+ * Note: If the needle is not found, empty string is returned.
+ */
+ public static function runPos ( $parser, $inStr = '', $inNeedle = '', $inOffset = 0 ) {
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+ $inNeedle = self::killMarkers( $parser, (string)$inNeedle );
+
+ if ( !self::checkLength( $inStr ) ||
+ !self::checkLength( $inNeedle ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ if ( $inNeedle == '' ) { $inNeedle = ' '; }
+
+ $pos = mb_strpos( $inStr, $inNeedle, $inOffset );
+ if ( $pos === false ) { $pos = ""; }
+
+ wfProfileOut( __METHOD__ );
+ return $pos;
+ }
+
+ /**
+ * {{#rpos: string | needle}}
+ *
+ * Finds last occurrence of "needle" in "string".
+ *
+ * Note: If the needle is an empty string, single space is used instead.
+ * Note: If the needle is not found, -1 is returned.
+ */
+ public static function runRPos ( $parser, $inStr = '', $inNeedle = '' ) {
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+ $inNeedle = self::killMarkers( $parser, (string)$inNeedle );
+
+ if ( !self::checkLength( $inStr ) ||
+ !self::checkLength( $inNeedle ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ if ( $inNeedle == '' ) { $inNeedle = ' '; }
+
+ $pos = mb_strrpos( $inStr, $inNeedle );
+ if ( $pos === false ) { $pos = -1; }
+
+ wfProfileOut( __METHOD__ );
+ return $pos;
+ }
+
+ /**
+ * {{#sub: string | start | length }}
+ *
+ * Returns substring of "string" starting at "start" and having
+ * "length" characters.
+ *
+ * Note: If length is zero, the rest of the input is returned.
+ * Note: A negative value for "start" operates from the end of the
+ * "string".
+ * Note: A negative value for "length" returns a string reduced in
+ * length by that amount.
+ */
+ public static function runSub ( $parser, $inStr = '', $inStart = 0, $inLength = 0 ) {
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+
+ if ( !self::checkLength( $inStr ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ if ( intval( $inLength ) == 0 ) {
+ $result = mb_substr( $inStr, $inStart );
+ } else {
+ $result = mb_substr( $inStr, $inStart, $inLength );
+ }
+
+ wfProfileOut( __METHOD__ );
+ return $result;
+ }
+
+ /**
+ * {{#count: string | substr }}
+ *
+ * Returns number of occurrences of "substr" in "string".
+ *
+ * Note: If "substr" is empty, a single space is used.
+ */
+ public static function runCount ( $parser, $inStr = '', $inSubStr = '' ) {
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+ $inSubStr = self::killMarkers( $parser, (string)$inSubStr );
+
+ if ( !self::checkLength( $inStr ) ||
+ !self::checkLength( $inSubStr ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ if ( $inSubStr == '' ) { $inSubStr = ' '; }
+
+ $result = mb_substr_count( $inStr, $inSubStr );
+
+ wfProfileOut( __METHOD__ );
+ return $result;
+ }
+
+ /**
+ * {{#replace:string | from | to | limit }}
+ *
+ * Replaces each occurrence of "from" in "string" with "to".
+ * At most "limit" replacements are performed.
+ *
+ * Note: Armored against replacements that would generate huge strings.
+ * Note: If "from" is an empty string, single space is used instead.
+ */
+ public static function runReplace( $parser, $inStr = '',
+ $inReplaceFrom = '', $inReplaceTo = '', $inLimit = -1 ) {
+ global $wgPFStringLengthLimit;
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+ $inReplaceFrom = self::killMarkers( $parser, (string)$inReplaceFrom );
+ $inReplaceTo = self::killMarkers( $parser, (string)$inReplaceTo );
+
+ if ( !self::checkLength( $inStr ) ||
+ !self::checkLength( $inReplaceFrom ) ||
+ !self::checkLength( $inReplaceTo ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ if ( $inReplaceFrom == '' ) { $inReplaceFrom = ' '; }
+
+ // Precompute limit to avoid generating enormous string:
+ $diff = mb_strlen( $inReplaceTo ) - mb_strlen( $inReplaceFrom );
+ if ( $diff > 0 ) {
+ $limit = ( ( $wgPFStringLengthLimit - mb_strlen( $inStr ) ) / $diff ) + 1;
+ } else {
+ $limit = -1;
+ }
+
+ $inLimit = intval( $inLimit );
+ if ( $inLimit >= 0 ) {
+ if ( $limit > $inLimit || $limit == -1 ) { $limit = $inLimit; }
+ }
+
+ // Use regex to allow limit and handle UTF-8 correctly.
+ $inReplaceFrom = preg_quote( $inReplaceFrom, '/' );
+ $inReplaceTo = StringUtils::escapeRegexReplacement( $inReplaceTo );
+
+ $result = preg_replace( '/' . $inReplaceFrom . '/u',
+ $inReplaceTo, $inStr, $limit );
+
+ if ( !self::checkLength( $result ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ wfProfileOut( __METHOD__ );
+ return $result;
+ }
+
+
+ /**
+ * {{#explode:string | delimiter | position | limit}}
+ *
+ * Breaks "string" into chunks separated by "delimiter" and returns the
+ * chunk identified by "position".
+ *
+ * Note: Negative position can be used to specify tokens from the end.
+ * Note: If the divider is an empty string, single space is used instead.
+ * Note: Empty string is returned if there are not enough exploded chunks.
+ */
+ public static function runExplode ( $parser, $inStr = '', $inDiv = '', $inPos = 0, $inLim = null ) {
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+ $inDiv = self::killMarkers( $parser, (string)$inDiv );
+
+ if ( $inDiv == '' ) { $inDiv = ' '; }
+
+ if ( !self::checkLength( $inStr ) ||
+ !self::checkLength( $inDiv ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ $inDiv = preg_quote( $inDiv, '/' );
+
+ $matches = preg_split( '/' . $inDiv . '/u', $inStr, $inLim );
+
+ if ( $inPos >= 0 && isset( $matches[$inPos] ) ) {
+ $result = $matches[$inPos];
+ } elseif ( $inPos < 0 && isset( $matches[count( $matches ) + $inPos] ) ) {
+ $result = $matches[count( $matches ) + $inPos];
+ } else {
+ $result = '';
+ }
+
+ wfProfileOut( __METHOD__ );
+ return $result;
+ }
+
+ /**
+ * {{#urldecode:string}}
+ *
+ * Decodes URL-encoded (like%20that) strings.
+ */
+ public static function runUrlDecode( $parser, $inStr = '' ) {
+ wfProfileIn( __METHOD__ );
+
+ $inStr = self::killMarkers( $parser, (string)$inStr );
+ if ( !self::checkLength( $inStr ) ) {
+ wfProfileOut( __METHOD__ );
+ return self::tooLongError();
+ }
+
+ $result = urldecode( $inStr );
+
+ wfProfileOut( __METHOD__ );
+ return $result;
+ }
+}
diff --git a/extensions/ParserFunctions/README b/extensions/ParserFunctions/README
new file mode 100644
index 00000000..9665c2f3
--- /dev/null
+++ b/extensions/ParserFunctions/README
@@ -0,0 +1,21 @@
+ParserFunctions v1.4.0
+
+1. Licensing
+2. How to install
+3. Tests
+
+1. Licensing
+Licensed under GNU GPL. See COPYING for more license information.
+
+2. How to install
+ a. Download this tarbell and extract the contents to $IP/extensions/ParserFunctions/
+ where $IP is your root wiki install
+ b. Add 'require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php");' to the
+ end of your LocalSettings (without the single quotes)
+ c. Enjoy
+
+3. Tests
+ParserFunctions ships with two tests
+- Parser tests. These get added to the main parser tests, see there for docs
+- Expression tests. These are designed to test the math-related functions
+ See testExpr.php
diff --git a/extensions/ParserFunctions/convertTests.txt b/extensions/ParserFunctions/convertTests.txt
new file mode 100644
index 00000000..dc09c45a
--- /dev/null
+++ b/extensions/ParserFunctions/convertTests.txt
@@ -0,0 +1,231 @@
+!! functionhooks
+convert
+!! endfunctionhooks
+
+!! test
+Simple conversion
+!! input
+{{#convert: 10 m | km }}
+!!result
+<p>0.01 kilometres
+</p>
+!! end
+
+!! test
+Position and formatting of numbers and units
+!! input
+*{{#convert: 10 m | km }}
+*{{#convert: 10m | km }}
+*{{#convert: 10 km | m }}
+*{{#convert: 10-km | m }}
+*{{#convert: 10E2 km | m }}
+*{{#convert: 10E-2 km | m }}
+*{{#convert: 10.0E2 km | m }}
+*{{#convert: 10.0E2.5 km | m }}
+!! result
+<ul><li>0.01 kilometres
+</li><li>0.01kilometres
+</li><li>10,000 metres
+</li><li>10,000-metres
+</li><li>1,000,000 metres
+</li><li>100 metres
+</li><li>1,000,000 metres
+</li><li>1,000,000.5,000 metres
+</li></ul>
+
+!! end
+
+!! test
+Precision 1
+!! input
+*{{#convert: 10 m | km }}
+*{{#convert: 11 m | km }}
+*{{#convert: 12 m | km }}
+*{{#convert: 13 m | km }}
+*{{#convert: 14 m | km }}
+*{{#convert: 15 m | km }}
+*{{#convert: 16 m | km }}
+*{{#convert: 17 m | km }}
+*{{#convert: 18 m | km }}
+*{{#convert: 19 m | km }}
+*{{#convert: 20 m | km }}
+!! result
+<ul><li>0.01 kilometres
+</li><li>0.011 kilometres
+</li><li>0.012 kilometres
+</li><li>0.013 kilometres
+</li><li>0.014 kilometres
+</li><li>0.015 kilometres
+</li><li>0.016 kilometres
+</li><li>0.017 kilometres
+</li><li>0.018 kilometres
+</li><li>0.019 kilometres
+</li><li>0.02 kilometres
+</li></ul>
+
+!! end
+
+!! test
+Precision 2
+!! input
+*{{#convert: 10.0 m | km }}
+*{{#convert: 10.1 m | km }}
+*{{#convert: 10.2 m | km }}
+*{{#convert: 10.3 m | km }}
+*{{#convert: 10.4 m | km }}
+*{{#convert: 10.5 m | km }}
+*{{#convert: 10.6 m | km }}
+*{{#convert: 10.7 m | km }}
+!! result
+<ul><li>0.0100 kilometres
+</li><li>0.0101 kilometres
+</li><li>0.0102 kilometres
+</li><li>0.0103 kilometres
+</li><li>0.0104 kilometres
+</li><li>0.0105 kilometres
+</li><li>0.0106 kilometres
+</li><li>0.0107 kilometres
+</li></ul>
+
+!! end
+
+!! test
+String interpolation
+!! input
+{{#convert: 25, 26, 27, 28, 29, and 30 km }}
+!! result
+<p>25,000, 26,000, 27,000, 28,000, 29,000, and 30,000 metres
+</p>
+!! end
+
+!! test
+Precision 3
+!! input
+{{#convert: 25, 26, 27, 28, 29, and 30 miles }}
+!! result
+<p>40,000, 42,000, 43,000, 45,000, 47,000, and 50,000 metres
+</p>
+!! end
+
+!! test
+Precision 4
+!! input
+{{#convert:35000, 35E3, 35.0E3, 350E2, 3.500E4, 35000E0, 350000E-1 m | km }}
+!! result
+<p>35, 35, 35.0, 35, 35.00, 35, 35 kilometres
+</p>
+!! end
+
+!! test
+#sourceunit
+!!input
+*{{#convert: 25 | #sourceunit = km }}
+*{{#convert: 25 | #sourceunit=km }}
+*{{#convert: 25 | #sourceunit = km | #sourceunit = mm }}
+*{{#convert: 25 | #sourceunit = km | cm }}
+!! result
+<ul><li>25,000 metres
+</li><li>25,000 metres
+</li><li>0.025 metres
+</li><li>2,500,000 centimetres
+</li></ul>
+
+!! end
+
+!! test
+Precision overrides
+!!input
+*{{#convert: 1 mi | #dp = 0 }}
+*{{#convert: 1 mi | #dp=1 }}
+*{{#convert: 1 mi | #dp = -2 }}
+*{{#convert: 1 mi | #dp = 5 }}
+*{{#convert: 1 mi | #dp = -8 }}
+*{{#convert: 1 mi | #sf = 0 }}
+*{{#convert: 1 mi | #sf=1 }}
+*{{#convert: 1 mi | #sf = 3 }}
+*{{#convert: 1 mi | #sf = 5 }}
+*{{#convert: 1 mi | #sf = -8 }}
+!! result
+<ul><li>1,609 metres
+</li><li>1,609.3 metres
+</li><li>1,600 metres
+</li><li>1,609.344 metres
+</li><li>0 metres
+</li><li>2,000 metres
+</li><li>2,000 metres
+</li><li>1,610 metres
+</li><li>1,609.3 metres
+</li><li>2,000 metres
+</li></ul>
+
+!! end
+
+
+!! test
+Errors
+!! input
+*{{#convert: 25 | km }}
+*{{#convert: 25 foobars | mi }}
+*{{#convert: 25 mi | #sourceunit = foobar }}
+*{{#convert: 25 km | s }}
+*{{#convert: 25 km/Pa | m/Pa }}
+*{{#convert: 25 km/s/l }}
+*{{#convert: 25 km/m3 }}
+!! result
+<ul><li><strong class="error">Error: no source unit given</strong>
+</li><li><strong class="error">Error: unknown unit "foobars"</strong>
+</li><li><strong class="error">Error: unknown unit "foobar"</strong>
+</li><li><strong class="error">Error: cannot convert between units of "length" and "time"</strong>
+</li><li><strong class="error">Error: invalid compound unit "length/pressure"</strong>
+</li><li><strong class="error">Error: cannot parse double compound units like "km/s/l"</strong>
+</li><li><strong class="error">Error: invalid compound unit "length/volume"</strong>
+</li></ul>
+
+!! end
+
+
+!! test
+#sourceunit = #targetunit
+!! input
+*{{#convert: 25 km | #targetunit = #sourceunit }}
+*{{#convert: 25 km | #sourceunit = #targetunit }}
+!! result
+<ul><li>25 kilometres
+</li><li>25 kilometres
+</li></ul>
+
+!! end
+
+!! test
+#language
+!! input
+*{{#convert: 10 m | km | #language=en-gb }}
+*{{#convert: 10m | km | #language = en }}
+*{{#convert: 10 km | m |#language=en}}
+*{{#convert: 10 Pa | mmHg | #language = fr }}
+!! result
+<ul><li>0.01 kilometres
+</li><li>0.01kilometers
+</li><li>10,000 meters
+</li><li>0.1 millimètre de mercure
+</li></ul>
+
+!! end
+
+!! test
+Case sensitivity
+!! input
+*{{#convert: 10 mm | m }}
+*{{#convert: 10 Mm | m }}
+*{{#convert: 10 km | Mm }}
+*{{#convert: 10 Pa | mmHg }}
+*{{#convert: 10 pa | mmHg }}
+!! result
+<ul><li>0.01 metres
+</li><li>10,000,000 metres
+</li><li>0.01 megametres
+</li><li>0.1 millimetres of mercury
+</li><li><strong class="error">Error: unknown unit "pa"</strong>
+</li></ul>
+
+!! end
diff --git a/extensions/ParserFunctions/exprTests.txt b/extensions/ParserFunctions/exprTests.txt
new file mode 100644
index 00000000..d842d462
--- /dev/null
+++ b/extensions/ParserFunctions/exprTests.txt
@@ -0,0 +1,39 @@
+1 + 1 = 2
+-1 + 1 = 0
++1 + 1 = 2
+4 * 4 = 16
+-4 * -4 = 4 * 4
+(1/3) * 3 = 1
+3 / 1.5 = 2
+3 mod 2 = 1
+1 or 0
+not (1 and 0)
+not 0
+4.0 round 0; 4
+ceil 4; 4
+floor 4; 4
+4.5 round 0; 5
+4.2 round 0; 4
+-4.2 round 0; -4
+-4.5 round 0; -5
+-2.0 round 0; -2
+ceil -3; -3
+floor -6.0; -6
+ceil 4.2; 5
+ceil -4.5; -4
+floor -4.5; -5
+4 < 5
+-5 < 2
+-2 <= -2
+abs(-2); 2
+4 > 3
+4 > -3
+5 >= 2
+2 >= 2
+1 != 2
+not (1 != 1)
+1e4 = 10000
+1e-2 = 0.01
+ln(exp(1));1
+trunc(4.5);4
+trunc(-4.5);-4
diff --git a/extensions/ParserFunctions/funcsParserTests.txt b/extensions/ParserFunctions/funcsParserTests.txt
new file mode 100644
index 00000000..ef2c1f38
--- /dev/null
+++ b/extensions/ParserFunctions/funcsParserTests.txt
@@ -0,0 +1,177 @@
+# Force the test runner to ensure the extension is loaded
+# fixme... this doesn't seem to work :D
+#!! functionhooks
+#time
+#!! endfunctionhooks
+
+# fixme: #time seems to be accepting input as local time, which strikes me as wrong
+
+!! article
+ParserFunctions page
+!! text
+A sample page so we can test ifexist.
+
+This used to be a Main Page, but that caused duplicate article
+warnings when running the normal tests at the same time.
+!! endarticle
+
+!! article
+File:Dionysos-Brunnen am Kölner Dom.jpg
+!! text
+blah blah
+!! endarticle
+
+!! test
+Input times should probably be UTC, not local time
+!! input
+{{#time:c|15 January 2001}}
+!!result
+<p>2001-01-15T00:00:00+00:00
+</p>
+!! end
+
+!! test
+Time test in traditional range...
+!! input
+{{#time:Y|15 January 2001}}
+!! result
+<p>2001
+</p>
+!! end
+
+!! test
+Time test prior to 1970 Unix creation myth
+!! input
+{{#time:Y|5 April 1967}}
+!! result
+<p>1967
+</p>
+!! end
+
+!! test
+Time test after the 2038 32-bit Apocalype
+!! input
+{{#time:Y|28 July 2061}}
+!! result
+<p>2061
+</p>
+!! end
+
+!! test
+Bug 19093: Default values don't fall through in switch
+!! input
+<{{#switch: foo | bar | #default = DEF }}>
+<{{#switch: foo | #default | bar = DEF }}>
+!! result
+<p>&lt;DEF&gt;
+&lt;DEF&gt;
+</p>
+!! end
+
+!! test
+{{#ifexist}}
+!! input
+{{#ifexist:Media:Foobar.jpg|Found|Not found}}
+{{#ifexist:ParserFunctions page|Found|Not found}}
+{{#ifexist:Missing|Found|Not found}}
+!! result
+<p>Found
+Found
+Not found
+</p>
+!! end
+
+!! test
+#if
+!! input
+{{#if: | yes | no}}
+{{#if: string | yes | no}}
+{{#if: | yes | no}}
+{{#if:
+
+
+| yes | no}}
+{{#if: 1==2 | yes | no}}
+{{#if: foo | yes }}
+{{#if: | yes }}(empty)
+{{#if: foo | | no}}(empty)
+{{#if: {{{1}}} | yes | no}}
+{{#if: {{{1|}}} | yes | no}}
+!! result
+<p>no
+yes
+no
+no
+yes
+yes
+(empty)
+(empty)
+yes
+no
+</p>
+!! end
+
+!! test
+#ifeq
+!!input
+{{#ifeq: 01 | 1 | yes | no}}
+{{#ifeq: 0 | -0 | yes | no}}
+{{#ifeq: foo | bar | yes | no}}
+{{#ifeq: foo | Foo | yes | no}}
+{{#ifeq: "01" | "1" | yes | no}}
+!! result
+<p>yes
+yes
+no
+no
+no
+</p>
+!! end
+
+!! test
+#iferror
+!!input
+{{#iferror: {{#expr: 1 + 2 }} | error | correct }}
+{{#iferror: {{#expr: 1 + X }} | error | correct }}
+{{#iferror: {{#expr: 1 + 2 }} | error }}
+{{#iferror: {{#expr: 1 + X }} | error }}
+{{#iferror: {{#expr: 1 + 2 }} }}
+{{#iferror: {{#expr: 1 + X }} }}empty
+!! result
+<p>correct
+error
+3
+error
+3
+empty
+</p>
+!! end
+
+
+!! test
+#ifexpr
+!! input
+{{#ifexpr: | yes | no}}
+{{#ifexpr: 1 > 0 | yes }}
+{{#ifexpr: 1 < 0 | yes }}empty
+{{#ifexpr: 1 > 0 | | no}}empty
+{{#ifexpr: 1 < 0 | | no}}
+{{#ifexpr: 1 > 0 }}empty
+!! result
+<p>no
+yes
+empty
+empty
+no
+empty
+</p>
+!! end
+
+!! test
+Bug 22866: #ifexpr should evaluate "-0" as false
+!! input
+{{#ifexpr: (-1)*0 | true | false }}
+!! result
+<p>false
+</p>
+!! end
diff --git a/extensions/ParserFunctions/stringFunctionTests.txt b/extensions/ParserFunctions/stringFunctionTests.txt
new file mode 100644
index 00000000..064decef
--- /dev/null
+++ b/extensions/ParserFunctions/stringFunctionTests.txt
@@ -0,0 +1,32 @@
+# @todo expand
+!! functionhooks
+len
+!! endfunctionhooks
+
+!! test
+#len
+!! input
+{{#len:}}
+{{#len:0}}
+{{#len:test}}
+!!result
+<p>0
+1
+4
+</p>
+!! end
+
+!! test
+#urldecode
+!! input
+{{#urldecode:}}
+{{#urldecode:foo%20bar}}
+{{#urldecode:%D0%9C%D0%B5%D0%B4%D0%B8%D0%B0%D0%92%D0%B8%D0%BA%D0%B8}}
+{{#urldecode: some unescaped string}}
+!! result
+<p>foo bar
+МедиаВики
+some unescaped string
+</p>
+!! end
+
diff --git a/extensions/ParserFunctions/testExpr.php b/extensions/ParserFunctions/testExpr.php
new file mode 100644
index 00000000..4a941737
--- /dev/null
+++ b/extensions/ParserFunctions/testExpr.php
@@ -0,0 +1,38 @@
+<?php
+
+require_once ( getenv( 'MW_INSTALL_PATH' ) !== false
+ ? getenv( 'MW_INSTALL_PATH' ) . "/maintenance/commandLine.inc"
+ : dirname( __FILE__ ) . '/../../maintenance/commandLine.inc' );
+require( 'Expr.php' );
+
+$tests = file( 'exprTests.txt' );
+
+$pass = $fail = 0;
+
+// Each test is on one line. The test must always evaluate to '1'.
+$parser = new ExprParser;
+foreach ( $tests as $test ) {
+ $test = trim( $test );
+ if ( in_string( ';', $test ) )
+ list( $input, $expected ) = explode( ';', $test );
+ else {
+ $input = $test;
+ $expected = 1;
+ }
+
+ $expected = trim( $expected );
+ $input = trim( $input );
+
+ $result = $parser->doExpression( $input );
+ if ( $result != $expected ) {
+ print
+ "FAILING test -- $input
+ gave a final result of $result, instead of $expected.\n";
+ $fail++;
+ } else {
+ print "PASSED test $test\n";
+ $pass++;
+ }
+}
+
+print "Passed $pass tests, failed $fail tests, out of a total of " . ( $pass + $fail ) . "\n"; \ No newline at end of file