diff options
Diffstat (limited to 'extensions/ParserFunctions')
-rw-r--r-- | extensions/ParserFunctions/COPYING | 283 | ||||
-rw-r--r-- | extensions/ParserFunctions/Convert.php | 889 | ||||
-rw-r--r-- | extensions/ParserFunctions/Expr.php | 555 | ||||
-rw-r--r-- | extensions/ParserFunctions/ParserFunctions.i18n.magic.php | 566 | ||||
-rw-r--r-- | extensions/ParserFunctions/ParserFunctions.i18n.php | 4695 | ||||
-rw-r--r-- | extensions/ParserFunctions/ParserFunctions.php | 115 | ||||
-rw-r--r-- | extensions/ParserFunctions/ParserFunctions_body.php | 846 | ||||
-rw-r--r-- | extensions/ParserFunctions/README | 21 | ||||
-rw-r--r-- | extensions/ParserFunctions/convertTests.txt | 231 | ||||
-rw-r--r-- | extensions/ParserFunctions/exprTests.txt | 39 | ||||
-rw-r--r-- | extensions/ParserFunctions/funcsParserTests.txt | 177 | ||||
-rw-r--r-- | extensions/ParserFunctions/stringFunctionTests.txt | 32 | ||||
-rw-r--r-- | extensions/ParserFunctions/testExpr.php | 38 |
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((?:\+|\-|−|\x{2212})?(\d+(?:\.\d+)?)(?:E(?:\+|\-|−|\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( '<' => '<', '>' => '>', + '−' => '-', '−' => '-' ) ); + + $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><DEF> +<DEF> +</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 |